AdSense Mobile vs Desktop Fill Rate Gap (2026 Fix)

Mobile fill rate sits at 55–70% while desktop is 92–98%. Here's which part of the gap is structural, which part is your config, and the fastest fix.

You open AdSense, go to Reports, break down by Platform (device), and see desktop fill rate at 92–98% but mobile sitting at 55–70%. Your traffic is 75% mobile, so the gap is dragging down your effective RPM. Before you start “fixing” things, separate the part of the gap that is structural (you can’t move it) from the part that is configuration (you can). Most publishers spend hours on the structural part and ignore the configuration part — which is exactly backwards.

Fastest fix: switch every mobile slot to data-ad-format="auto" with data-full-width-responsive="true", then run a Lighthouse mobile audit and fix your worst LCP and CLS issue. Those two changes recover most of the movable gap. Everything below is the rest of the playbook.

Why the gap exists — four layers

Layer 1: Advertiser demand (structural, ~40% of the gap)

Desktop advertisers buy specific creative sizes — 728×90, 300×250, 970×250 — at scale, so inventory depth is high. Mobile has fewer “standard” formats with the same depth of demand. The 300×250 mobile slot has strong demand; the 320×100 mobile leaderboard and the 320×50 banner have much less. Anchor has good fill and is one of the better-performing mobile formats, but the average over all mobile formats stays below desktop.

You can’t change advertiser behavior. But you can choose the ad sizes that have demand.

Layer 2: Viewability (configuration, ~30% of the gap)

AdSense’s auction prefers high-viewability slots. An ad counts as “viewable” (the IAB / Active View standard) only when at least 50% of its pixels are on screen for at least one continuous second. A slot that’s viewable to 40% of users — because the user scrolls past it too fast, or it sits below the fold and they bounce — gets fewer bids and lower CPMs, which drags fill rate down with it. Mobile pages are slower and sessions are shorter, so viewability is structurally lower on mobile. As a rough rule, a drop from ~65% to ~50% viewability costs roughly 10–20% RPM.

This is the layer you CAN move, through page speed and slot positioning.

Layer 3: Geography (structural, ~20% of the gap)

Mobile-heavy regions skew toward developing economies with lower advertiser CPMs. India, Indonesia, Brazil, Nigeria — high mobile share, low CPM. If your traffic concentrates there, mobile fill will stay lower regardless of optimization.

Layer 4: Format mistakes (configuration, ~10% of the gap, fixable today)

This is the part most publishers can move fastest. Forcing desktop ad sizes onto mobile, running vignettes at high frequency, or leaving side rail enabled on mobile where no slot can render — all of these depress fill needlessly.

How to identify which layer is hurting you

Open Reports, break down by Platform, and pull this table for desktop vs mobile:

MetricDesktopMobileGap
Coverage / fill rate
Active View viewable %
Page RPM / CPM
Top country share

Then read the biggest gap:

  • Active View viewable % is the largest mobile-vs-desktop gap -> viewability problem. Fix page speed and slot position (Layer 2).
  • CPM is the largest gap -> geography or ad-size mismatch. Check the country breakdown (Layers 1 and 3).
  • Fill rate is the largest gap but Active View is fine -> ad-size or format mismatch. Audit your mobile slots (Layer 4).

Concrete fixes by layer

Fix viewability (highest leverage)

  1. Run a Lighthouse mobile audit (Chrome DevTools -> Lighthouse, or npx lighthouse <url> --preset=desktop then mobile). Targets that correlate with viewability and ad eligibility: LCP < 2.5s, CLS < 0.1, INP < 200ms. Note: INP replaced FID as a Core Web Vital on March 12, 2024 — if a guide still tells you to chase FID, it’s outdated.
  2. Reserve height on every mobile slot in CSS (a fixed min-height matching the expected ad). This prevents the slot from shifting content as it loads, which protects CLS and keeps the ad visible instead of pushed off screen.
  3. Don’t put your first ad before the first paragraph. Place it just after the content starts (roughly after the first 150–200 words). Counter-intuitive, but the user is more committed by then, so viewability is higher than a top-of-page slot they scroll past instantly.
  4. Lazy-load by position, not blanket. Never lazy-load an above-the-fold slot — that actively hurts viewability. Use a rootMargin of about 150–300px for mid-content slots and 300–500px for below-the-fold slots so the ad is ready just before the user reaches it. Native browser lazy-loading is too aggressive for ads.

Fix ad sizes

Use mobile-optimized sizes only:

  • 300×250 — best demand on mobile.
  • 336×280 — also strong.
  • 320×100 — OK, less demand.
  • Responsive data-ad-format="auto" — let AdSense pick; it usually lands on 300×250.
  • Avoid: 728×90 forced onto mobile (shrinks to unreadable), 970×250 (essentially no mobile demand).

The responsive tag Google still recommends as of June 2026:

<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-XXXX"
     data-ad-slot="YYYY"
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>

data-full-width-responsive="true" is not deprecated; Google’s own tests show full-width responsive ads perform better on mobile in portrait. Keep it on.

Reduce format friction (Auto ads)

Sign in to AdSense, click Edit next to your site, and open the Auto ads settings. Formats are grouped under Overlay formats (Anchor ads, Vignette ads, Side rail ads) and In-page formats (Banner ads, Multiplex ads, Related search). Then:

  • Anchor ads — keep on for mobile. It’s one of the highest-viewability mobile formats and rarely the problem. Use the new positioning controls if it overlaps your UI.
  • Vignette ads — the high-friction one. Consider turning it off on mobile, or leave it but be aware of “Allow additional triggers for vignette ads” (added February 9, 2026, auto-activated March 9, 2026 if you took no action): it fires extra vignettes on signals like reaching the end of an article and scrolling back up, ~30s of inactivity followed by interaction, and switching back to a backgrounded tab. (Google removed the browser back-button trigger on June 15, 2026, so that one no longer fires.) Disabling that toggle also turns off the existing triggers — you can’t disable only the new ones.
  • Side rail ads — turn off for mobile (there’s no usable side rail width on a phone). The desktop left/right/bilateral controls don’t apply on mobile anyway.
  • Banner / Multiplex — for in-page density, set “Maximum number of ads on a page” and “Minimum distance between ads on a page” so mobile doesn’t get stuffed with low-viewability units. Multiplex only earns if you actually have a content-grid layout.

Mobile RPM tracking (don’t over-react)

Mobile RPM swings 15–30% week-to-week from seasonal advertiser budgets, traffic-geography shifts, and AdSense auction changes. Don’t tune on a 3-day dip. Use a 30-day rolling window and only act when the 30-day average meaningfully changes.

Shortest path to higher mobile fill

In hit-rate order:

  1. Lighthouse mobile audit, fix the top two issues — usually LCP and CLS. Each ~0.5s LCP improvement tends to lift mobile RPM 5–15%.
  2. Switch all mobile slots to data-ad-format="auto" with data-full-width-responsive="true". Let AdSense pick the size.
  3. Reduce vignette frequency on mobile (or off). You lose 5–10% of raw impressions but recover 10–20% in fill from better page metrics and fewer bounces.
  4. Move the first ad after the first paragraph, not before it. Counter-intuitive viewability win.
  5. Wait 30 days and measure. No other big changes during the window.

How to confirm it’s fixed

  • After ~14–30 days, reopen Reports -> Platform and compare the same four-metric table. Mobile Active View viewable % should be the metric that moved first; fill rate follows it with a lag.
  • Re-run Lighthouse mobile: LCP < 2.5s, CLS < 0.1, INP < 200ms should now pass.
  • In Ads -> Overview, confirm coverage on mobile rose without a jump in policy warnings (a fill gain that comes with a density warning is a false win — see ad density below).

When this is genuinely not on you

A site whose traffic is 70%+ from low-CPM countries and 80%+ mobile will have a low absolute RPM no matter what you tune. Optimization won’t change the auction floor for that audience. Diversify revenue instead — see ad blocker affecting RPM for the strategic framing.

Easy misjudgments

  • “More mobile slots will compensate for low fill.” No. The density penalty kicks in (see ad density violating policy), and more low-fill slots just spread the same total revenue thinner.
  • “Mobile fill should match desktop.” It won’t. Even with perfect optimization, expect a ~10–15% residual gap. Aim to close half the gap, not all of it.
  • “Page speed only affects CPM, not fill.” It affects both: page speed -> viewability -> bid eligibility -> fill.
  • “Kill anchor to clean up mobile.” Don’t. Anchor is high-viewability and usually a net positive; vignette is the friction format to question first.

Prevention

  • Design mobile-first. Plan ad slot positions, sizes, and reserved heights in CSS from day one.
  • Treat Core Web Vitals (LCP, INP, CLS) as a monetization KPI, not just an SEO one.
  • Monitor mobile fill weekly, but only act on monthly trends.
  • When testing a layout change, change one thing, measure for 14 days, then decide.

FAQ

Q: Should I de-prioritize mobile ads? A: No. Mobile is where most of your traffic is. Lower fill on a large audience still earns more than higher fill on a small one.

Q: Will improving page speed really raise fill rate? A: Yes. Viewability is an input to the bidder’s eligibility check, so faster pages produce more viewable impressions, which attract more bids and raise fill. A typical 0.5s LCP improvement is worth roughly 5–15% mobile RPM.

Q: Why is my mobile CPM lower even when fill is fine? A: Geography mix, ad sizes with thinner advertiser demand, or too many low-CPM formats (vignette especially) dragging the average down.

Q: Can I serve different ads to mobile vs desktop? A: AdSense picks which ad fills each impression — you don’t control that directly. What you control is which slots and Auto ads formats are enabled per device in the AdSense console (Edit site -> Auto ads settings).

Q: My mobile fill dropped 20% in one week — what happened? A: Three usual suspects: an advertiser pulled budget mid-quarter, your Core Web Vitals regressed (check Search Console), or your traffic shifted to a lower-CPM country (check Analytics). Verify all three before touching slots.

Q: Is the FID metric still something I should optimize for? A: No. Google retired FID on March 12, 2024 and replaced it with INP (Interaction to Next Paint), with INP < 200ms as the “good” threshold. Any AdSense or speed guide still naming FID predates that change.

Tags: #AdSense #Monetization #Troubleshooting #Fill rate #Mobile vs web