You launched a redesign on Monday. By Wednesday your AdSense dashboard shows page RPM has dropped from $8.40 to $3.10. Impressions per page is roughly flat, so it is not a traffic problem — it is a yield problem. Almost certainly a combination of: ad units lost in the new template, viewability score regressed because slots moved below the fold, the new layout broke ad responsiveness on mobile, or a forgotten manual unit is still pointed at a slot ID that does not render anymore. The fix is not to “undo the redesign” — it is to walk the new template and verify each slot is firing, visible, and at competitive sizes.
Common causes
Ranked by how often each shows up in real post-redesign post-mortems.
1. Manual ad units missing from the new template
The old template had 4 manual slots: header, in-article-1, in-article-2, sidebar. The new template has 2 (header and end-of-article). You did not realize the other two were AdSense slots, so they were never ported.
How to spot it: AdSense → Reports → Ad units. Compare impressions per ad unit Mon vs the prior week. Units that went to near zero are the ones missing from the new template.
2. Viewability dropped because slots are below the fold
In the old design, the in-article ad sat at paragraph 2. In the new design, the hero image takes 80% of the viewport and the first ad is at paragraph 5 — way below the fold. Below-fold viewability runs 30-40% vs above-fold 75-85%. Lower viewability → lower CPM bids.
How to spot it: AdSense → Reports → Viewable impressions / Impressions × 100. If viewability fell below 50% (was 70%+), this is a factor.
3. Responsive units broke at the new breakpoint
The old CSS had a sidebar at 1024px+. The new design’s sidebar appears only at 1280px+. AdSense’s responsive units negotiate size on first render, and they fall back to a small format when the container is unexpectedly narrow.
How to spot it: Inspect a desktop page at 1100px viewport. If the sidebar ad shows a 250x250 instead of a 300x600, the responsive unit picked the wrong size due to container width.
4. Page categorization signals weakened
You changed your <title> patterns, removed structured data, or shortened article content. AdSense uses page context to match advertisers. If the page now looks “thin” or off-topic, you get filler creatives at low CPMs.
How to spot it: AdSense → Reports → URLs with biggest RPM drop. Sort, open the top 5, and check that your new template still emits proper <title>, meta description, structured data, and at least 800 words of substantive content.
5. Lazy-load aggressiveness reduced impressions
Your old template loaded ads at section visibility (eager). The new one uses loading="lazy" everywhere. Lazy ads only fire when the user scrolls — so if the reader bounces before scrolling, the ad never serves. Impressions per pageview drop.
How to spot it: AdSense → Reports → Ad impressions / Page views ratio. If it dropped 20%+ alongside RPM, lazy-load is reducing your fill.
6. New layout removed cross-device rendering
You used display: none on mobile for some ad slots, intending to swap with a mobile-only unit, but never set up the mobile-only unit. So mobile traffic — often 60-70% of total — sees fewer ads.
How to spot it: AdSense → Reports → Filter by device. If mobile impressions per page dropped and desktop stayed flat, mobile slots are missing.
7. Auto Ads disabled inadvertently in the new theme
The new template’s <head> does not include the AdSense auto-ads tag (enable_page_level_ads: true). Auto Ads stop firing across the entire site even though manual slots still work.
How to spot it: View source on the new page. Search for enable_page_level_ads. If absent, Auto Ads are off. Compare to the same string in the old template archive.
Before you start
- Establish the baseline: compute prior 7-day average page RPM, impressions per page, and viewability before the redesign.
- Confirm the redesign is the cause — not a seasonal CPM dip or an algorithm change. Compare to the same period last year if you have data.
- Note the exact deploy timestamp of the redesign; AdSense reports are timezone-shifted.
- Have access to both the new and old template source (git history is fine).
Information to collect
- AdSense → Reports → Ad units, both 7-day windows: pre-redesign vs post-redesign.
- Same for: Country, Device, URL group, Ad size.
- View-source HTML of a representative new article page.
- View-source HTML of the same article from a cached / archived old version.
- DevTools network filter for
pagead2.googlesyndication.comrequests on a real article. - Sample CrUX field data for LCP/CLS before vs after.
Step-by-step fix
Walk top-down: confirm which causes apply, fix the biggest ones first.
Step 1: Diff the ad unit list
Export the AdSense ad-unit-level report for the last week pre-redesign and the first 7 days post-redesign:
# csv-diff for each ad unit
diff <(sort pre.csv) <(sort post.csv) | less
Any unit where post-impressions are less than 10% of pre-impressions is effectively missing from the new template. Capture its slot ID.
Step 2: Restore missing manual ad units
For each missing slot ID, place the unit back into the new template at an equivalent position. If the new template has no room, create a new ad unit in AdSense and replace:
<div class="ad-slot" style="min-height: 280px;">
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-XXXXXXXX"
data-ad-slot="NEW_SLOT_ID"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
</div>
Match the position semantically: a deleted “after intro” slot should reappear after the intro in the new template, not at end-of-article.
Step 3: Re-validate above-the-fold placement
Open a representative article. Note where the first ad falls relative to viewport on a 1366x768 desktop and a 375x667 mobile. If the first ad is below the fold on either, move it up.
For mobile, a header banner directly under the page title is the highest-RPM placement that does not violate policy. Avoid placing it before any content — that violates Better Ads Standards.
Step 4: Re-enable Auto Ads if it was inadvertently removed
In your new template’s <head>:
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXX" crossorigin="anonymous"></script>
Then in AdSense → Ads → By site → your domain → Edit, confirm Auto Ads toggle is ON. Note: if you have manual slots, set Auto Ads density to Low or Medium to avoid double-placement. See Auto vs manual AdSense for the tradeoff.
Step 5: Fix responsive unit container widths
Audit your CSS at every breakpoint where ads render. The container width must match what AdSense expects:
@media (min-width: 1280px) {
.sidebar-ad-container { width: 300px; min-height: 600px; }
}
@media (min-width: 768px) and (max-width: 1279px) {
.sidebar-ad-container { width: 300px; min-height: 250px; }
}
@media (max-width: 767px) {
.sidebar-ad-container { width: 100%; max-width: 336px; min-height: 280px; }
}
Always reserve a container that supports the largest creative the unit can serve at that breakpoint.
Step 6: Restore page-context signals
For every URL bucket showing RPM regression beyond 30%, audit the rendered HTML for:
<title>present, distinct, and matches the article topic<meta name="description">present and 120-160 chars<h1>matches the topic- Structured data (
Article,BreadcrumbList) still emits — test in Rich Results Test - Article body word count comparable to pre-redesign (use Wayback for a comparison snapshot)
A redesign that “cleaned up” boilerplate can accidentally strip schema and lose contextual targeting. Restore the schema. See thin pages AdSense review.
Step 7: Tune lazy-load eagerness
If you turned on loading="lazy" for all ads, restore eager loading for the first 1-2 slots (the ones likely to be in the initial viewport):
<!-- First ad: eager -->
<ins class="adsbygoogle" data-ad-slot="..." ...></ins>
<!-- Below-fold ads: lazy -->
<ins class="adsbygoogle" loading="lazy" data-ad-slot="..." ...></ins>
The first ad firing immediately recovers most of the lost impressions without re-introducing CWV problems.
Step 8: Set a 14-day watch and re-measure
After fixes deploy, AdSense’s auction system needs 7-14 days to recalibrate bids on the new layout. Do not panic-tweak in the first 5 days. Measure on day 14 vs the pre-redesign baseline.
Verify
- Page RPM recovered to within 15% of pre-redesign baseline by day 14.
- Impressions per page back to within 10% of baseline.
- Viewability score above 60% (preferably above 70%).
- All ad units that were live pre-redesign are serving at least 30% of their previous daily impressions.
- No new AdSense policy violations appear in the dashboard.
Long-term prevention
- Before any redesign launch, dump the full ad-unit inventory and stick it on the migration checklist as “must port.”
- Run side-by-side A/B testing for at least 7 days before full cutover; compare RPM head-to-head.
- Annotate every redesign in your analytics with a clear date marker so future post-mortems are easy.
- Lock down a “minimum acceptable RPM” SLA; if redesign drops below it for 14 days, roll back.
- Preserve structured data and meta tags in any template migration; treat them as load-bearing for monetization, not just SEO.
- Keep an archive of the previous template (git tag) so you can diff side-by-side if questions arise.
Common pitfalls
- Comparing day 1 post-launch to the prior week — AdSense bid recalibration takes 7-14 days, so day-1 numbers are not representative.
- Assuming “RPM dropped” without checking impressions — if impressions dropped 50% the issue is missing units, not bid CPM.
- Disabling Auto Ads and forgetting to add manual replacements at the equivalent positions.
- Adding
loading="lazy"to every slot including the hero ad, then wondering why impressions fell. - Stripping schema in the name of “performance” — context signals matter more than 50ms of LCP.
- Tweaking the layout daily during the 14-day watch window, making it impossible to isolate which change moved RPM.
FAQ
Q: RPM dropped 60% — can I just roll back the redesign?
You can, but identify the root cause first. If it is one missing ad unit, port it forward into the new template instead of reverting 100 unrelated improvements. Roll back only if the broken pieces cannot be diagnosed within 48 hours.
Q: Should I expect ANY RPM drop after a redesign?
A 5-10% short-term dip is normal as AdSense’s auction recalibrates to the new layout. Beyond 15%, something is broken. See adsense ads not showing for the simpler “no ads at all” case.
Q: My viewability went from 70% to 45% — is that the main cause?
Probably, yes. Viewability directly affects CPM bids. Move slots above the fold, reduce slot size below 280px so they fit in viewport more often, and re-measure after 14 days.
Q: Does Google penalize me for under-monetized pages?
No, but a redesign that strips structured data or content depth can trigger a “Low value content” flag, which IS a penalty signal. Check AdSense Policy Center 30 days after launch. See adsense low value content.
Q: Can I run the old layout and new layout side by side as an A/B test?
Yes — most CDN-level A/B tools (Cloudflare Workers, Vercel Edge Middleware) support this. Send 50% of traffic to each and measure RPM by variant for 14 days. Make sure both variants emit identical ad slot IDs so the AdSense report buckets are comparable.
Tags: #AdSense #Monetization #rpm #redesign #Troubleshooting