Run an Active View report across ten of your ad units and you'll usually find at least two sitting under 40% viewability — quietly serving impressions no advertiser will ever pay full price for again. I've pulled this exact report for accounts billing seven figures a year and found units stacked below the fold that hadn't cleared 50% viewability in months. Nobody notices because the impression still counts, the ad still renders, and the report still shows "fill rate: 100%." But a viewable rate that low isn't a rounding error. It's inventory you're actively training buyers to avoid.
The Math Behind The 50/1 Rule Nobody Fully Explains
The IAB and Media Rating Council standard is specific for a reason: a display ad counts as viewable when at least 50% of its pixels are on screen for a minimum of one continuous second. Video is stricter — 50% of pixels for two continuous seconds, and the player has to be capable of being heard, whether or not the user has muted it. Nothing else counts. Not a half-second flash as someone scrolls past, not an ad that loads at 60% visible but drops to 30% before the second is up. The clock resets the moment visibility dips below the threshold.
That threshold isn't arbitrary. The MRC ran eye-tracking and attention studies before settling on it, and the finding was blunt: below roughly half the ad's surface area, most users physically can't process what they're looking at, especially on mobile where units are smaller to begin with. The one-second floor matters just as much as the 50% — a banner that flickers into view for 300 milliseconds during a fast scroll registers on a served-impression report but never registers with a human retina. The floor filters that noise out.
Before 2014, publishers reported served impressions — meaning if the ad tag fired, it counted, whether the ad rendered in the visible viewport or a thousand pixels below it. That standard let publishers sell inventory that never had a chance of being seen, and buyers eventually caught on and started discounting everything to compensate for the ones that weren't. Viewability standards exist because the old system punished honest publishers alongside dishonest ones. Once you see that history, the 50/1 rule stops looking like a compliance hurdle and starts looking like the thing protecting your actual eCPM.
A Served-But-Unseen Impression Is Worse Than No Impression At All
A served impression nobody sees isn't neutral — it's a cost. You occupied ad space on that page for a full pageview and got nothing back: no view, no attention, no chance of a click, and you burned an ad request against inventory that could have gone to a placement someone would actually scroll past and notice. On a page with a hard cap on ad density, that's real square footage. I've had publishers "fix" viewability by simply deleting a chronically unseen unit, and overall RPM went up, not down, because the impressions that had been going nowhere started counting toward units that actually converted.
The part most publishers miss is that viewability isn't scored per impression in isolation — exchanges and DSPs track a domain-level and ad-unit-level historical viewability rate, and that rate becomes a pre-bid signal on every future auction on your site. A chronically low-viewability placement doesn't just underperform itself; it pulls down the average attached to your whole domain. Once that average drops, bidders start applying a viewability discount or a hard filter to everything you sell, including units that were performing fine.
Here's roughly how the math plays out. Say your site runs 20 ad units averaging 68% viewability, and one below-fold unit sits at 22% because it renders behind a sticky footer. That single unit can pull your blended average down to 61-63%, depending on its share of impressions. Cross certain thresholds — many DSPs treat 60% as a meaningful floor — and you'll see bid density drop 15-20% across the whole domain within a few weeks, not just on the offending unit. Buyers reprice the account, not the placement.
Recovery isn't instant either. Once a domain-level average drops and demand partners adjust their internal scoring, it typically takes 4-8 weeks of consistently better numbers before bid density fully recovers, because most systems weight trailing 30-60 day windows rather than reacting to a single good day. That lag is exactly why catching a viewability problem early costs you far less than fixing it after it's been dragging your average down for a quarter.
- Ad units below 40% viewability sampled over trailing 30-60 day windows
- Overall domain-level Active View rate reported to connected demand sources
- Placement-specific historical viewability tied to ad unit ID, not just page URL
- Refresh and reload behavior that can inflate or deflate the sampled rate
The Placements That Quietly Kill Viewability
The single biggest viewability killer I see in audits is a below-fold ad unit set to load the instant the page renders, with no lazy-load buffer at all. The ad fires, gets marked served, and sits fully rendered 1,400 pixels down a page where your average visitor only scrolls 900 pixels before bouncing. It never had a chance. Tune the buffer so the ad only requests once it's within 300-500 pixels of the viewport, and that same placement's viewability typically jumps from the 30s into the 60-70% range within a single reporting cycle — the kind of adjustment covered in tuning your lazy-load buffer properly rather than guessing at a number.
Scroll-depth data tells you exactly where units die, and most publishers never pull it. If your analytics show 70% of visitors never scroll past the halfway point of an article, any ad stacked past that line is fighting for a viewable impression against math that's already against it. I've reworked layouts where three of five ad slots lived in that dead zone below 50% scroll depth — moving even one of them up into the first screen and a half lifted blended viewability from 54% to 71% without adding a single new unit.
The third killer is subtler: an ad renders correctly, hits 50%+ visibility, and then gets covered — by a sticky subscribe bar sliding up, a late-loading hero image pushing content down mid-render, or a cookie consent banner that repaints after the ad has already fired. Active View timers reset the instant coverage happens, so an ad on track to hit its one full second never gets there. This shows up in reports as inexplicably low viewability on units that look completely normal when you screenshot the page.
- Below-fold units firing on page load instead of on scroll proximity
- Ad slots placed past your site's median scroll-depth line
- Sticky elements (headers, subscribe bars, cookie banners) repainting over rendered ads
- Layout shift from late-loading images or fonts pushing ads out of the viewport mid-timer
- Auto-refreshing units that reset visibility before the refresh cycle even completes
Why Active View, IAS, And MOAT Never Show You The Same Number
Pull viewability for the same ad unit from Google Active View inside GAM, from Integral Ad Science, and from DoubleVerify (the company that absorbed MOAT), and you'll get three different numbers for the exact same impressions. Each vendor runs its own measurement pixel, samples differently, and handles cross-domain iframes with slightly different tolerances for what counts as "in-view." Active View tends to run a little more generous because it has direct access to the ad slot through GAM's own infrastructure, while third-party vendors measuring through a nested iframe sometimes lose visibility into partial coverage or fast scroll events and score more conservatively.
In practice, I've seen the same placement report 71% in Active View, 64% through IAS, and 58% via DoubleVerify — all in the same week, all measuring the same traffic. None of those numbers is "wrong." They're measuring the same event through different instruments with different sensitivity. The gap tends to widen on mobile web, where viewport handling and orientation changes trip up cross-domain measurement more than they do on desktop.
Don't waste time trying to reconcile the numbers to match — you won't, and chasing parity is a distraction from the actual work. Pick Active View as your internal optimization baseline since it's free and consistent across your own inventory for trend tracking. But remember buyers often score you against their own vendor of choice, usually IAS or DV, since that's embedded in their DSP. That's the number that actually affects your bid density, even if it's not the one you're staring at in your own dashboard.
AMP pages add another wrinkle. Ads served through the AMP ad framework are measured through Google's own viewability implementation embedded in the amp-ad component, and third-party verification vendors sometimes struggle to get a clean read through the sandboxed iframe AMP enforces for security. If you're still running AMP alongside a standard responsive site, don't be surprised if the AMP version of a page reports meaningfully different viewability than the non-AMP version of the same content, even with an identical layout.
Buyers Filter Your Inventory Before The Auction, Not After
A lot of publishers still think of viewability as a post-delivery penalty — you serve the impression, it gets measured, and if it wasn't viewable, maybe you get a make-good or a lower rate on the next deal. That's not how most programmatic buying actually works anymore. DSPs run predictive viewability models on your historical placement-level data and use that score to decide, pre-bid, whether to even enter the auction for that impression. A unit with a track record below 40% viewability often gets excluded from eligible inventory entirely for viewability-sensitive campaigns, before a single bid is placed.
This is the part of how buyers actually evaluate an auction that catches most publishers off guard — the filtering happens upstream of price. It's not that your $4 CPM unit gets discounted to $2.50 because of low viewability; it's that half your demand pool never bids on it at all, and the demand that remains is disproportionately the lower-quality, less-selective buyers who don't run viewability filters in the first place. Your effective competition for that impression shrinks before the auction even clears.
The revenue effect compounds fast. A placement with 75%+ historical viewability might see bid density from 40-plus DSPs on a given auction; drop that same placement to 35% viewability and you might see 15-20 DSPs bidding, mostly at lower price points because the remaining buyers are less brand-safety-conscious. That's not a 20% haircut — depending on the vertical, it can be a 35-45% drop in realized CPM for what looks like the exact same ad slot on the exact same page.
Private marketplace and first-look deals don't escape this either. Even when a buyer has a standing PMP agreement with you, most trading desks still monitor delivered viewability against a minimum in the deal terms, and a placement that consistently underperforms gets quietly deprioritized in favor of open auction inventory the next time that buyer allocates budget — even though nothing in the contract technically changed.
Viewability Rules Apply To Apps Too — And Most App Publishers Ignore Them
It surprises a lot of publishers that viewability isn't a web-only concept — the MRC has published app-specific viewability guidelines since 2015, and the same 50%-of-pixels-for-one-second threshold applies to in-app banner and native ad units. The measurement mechanism is different because there's no DOM to inspect; SDKs from IAS, DoubleVerify, and Moat instrument the native ad view directly and report back through their own libraries. But the underlying question buyers care about is identical: did a human have a real chance to see this ad, or did it render somewhere they never scrolled to or dismissed in under a second?
The mistake I see most often in app inventory is assuming interstitials and rewarded formats are automatically 100% viewable because they take over the full screen. A full-screen interstitial that a user closes within 400 milliseconds of it appearing never crosses the one-second threshold, and plenty of apps have close buttons active from the moment the ad renders. Native ad units stitched into an infinite-scroll feed have the exact same below-fold problem web publishers deal with — if your feed's median scroll depth is four cards and your ad slot sits in position seven, you've built the same dead zone into your app that a badly placed web banner creates.
If your app revenue leans on mediation and waterfall setups, this matters even more, because low measured viewability feeds into the same demand-quality filtering described earlier — it's one of the levers covered in strategies for lifting app eCPM that gets overlooked in favor of just adding more ad units or chasing higher fill. Fill rate and viewability are not the same number, and optimizing only for the first while ignoring the second is how apps end up with impressive-looking impression counts and mediocre blended eCPM.
- Interstitials with an active close button from the first frame, dismissed before the 1-second mark
- Native units placed past your feed's median scroll depth
- Banner ads measured through SDKs that don't account for app-switching or backgrounding
- Rewarded video counted as viewable even when audio/video buffering delays the actual render
The Viewability Audit You Can Run This Week
You don't need a paid audit tool to find your worst offenders — GAM's own reporting will show you exactly where the problems are if you know which report to pull. Go to Reporting, build a report by ad unit with Active View viewable rate as the metric, and sort ascending. Anything under 50% is actively hurting you; anything between 50-65% is worth investigating but not an emergency. I run this exact report for every new client in the first week, and it almost always surfaces two or three units nobody on the team had looked at in months.
Once you've got the list, cross-reference it against placement position and load behavior. Units below 40% are almost always one of three things: below-fold with no lazy-load buffer, sitting past your typical scroll depth, or getting covered by a layout element after render. You'll rarely need more diagnosis than that to know what to fix first.
If you're not sure whether a low number is actually costing you demand or just an isolated reporting quirk, it's worth running your account through a broader health check — something like the eligibility checker can flag whether viewability sits alongside other account-level issues, like ads.txt gaps, policy flags, or latency, that compound the same demand-suppression problem from different angles.
- Pull Active View viewable rate by ad unit for the last 30 days, sorted lowest to highest
- Cross-check each low-viewability unit's position against your page's median scroll-depth data in analytics
- Confirm lazy-load buffer settings on every below-fold unit — most defaults fire too early
- Screen-record a real page load on mobile to catch layout shift covering ad slots
- Check auto-refresh timing against viewability timers so refreshes aren't firing before the 1-second mark completes
- Compare your GAM number against your SSP or exchange's own reported viewability to gauge the buyer-facing gap
Where Most Viewability Advice Gets It Backwards
A lot of viewability guides push you toward chasing 90%+ across the board, and I think that's the wrong target for most sites. The publishers I've seen hit consistently high viewability scores usually got there by running fewer ad units, placed conservatively above the fold, which does lift the percentage but shrinks total viewable impressions and total revenue. A site running four units at 55% viewability can out-earn a site running two units at 85% viewability, because total viewable impressions — not the rate — is what actually gets monetized. Optimize the rate as a diagnostic, not as the end goal.
The other bit of advice I'd push back on is treating anchor and sticky ad units as a blanket viewability fix. They do post strong numbers, often 80%+, because they're pinned to the viewport regardless of scroll position. But stacking multiple sticky elements, or running an anchor unit alongside a sticky subscribe bar and a cookie banner, creates exactly the coverage conflicts described earlier, and it risks tripping Coalition for Better Ads density thresholds, which can get your site flagged and your inventory throttled by browsers and buyers alike. One sticky unit, used deliberately, is a fix. Three stacked sticky elements is a UX problem wearing a viewability badge.
I'd also flag refresh-triggered "viewability resets" some vendors pitch as a workaround — refreshing an ad specifically to re-trigger a fresh viewable impression once the unit has been in view for a while. It can work short-term, but most exchanges now cap refresh frequency and require genuine user interaction or a minimum time-in-view before a refreshed impression is even eligible to be sold, so treat it as a narrow, policy-constrained tactic rather than a scalable fix.
The honest fix is almost always structural — fewer units in dead zones, better lazy-load timing, cleaner layout-shift handling — not a single toggle you flip once. Anyone selling you a one-click viewability fix is selling you a number that will look good in a screenshot and mediocre in your actual revenue report three months later.
Pull your Active View report by ad unit this week, sort by viewability ascending, and fix the bottom three placements before you touch anything else — tune lazy-load timing, move units above your median scroll depth, and resolve layout-shift coverage. That alone tends to move blended viewability and realized CPM more than any new ad format you could add.
Frequently Asked Questions
Written by Ismael Inacio
Founder, Ismael Ads
15+ years helping publishers across LATAM, North America and Europe grow ad revenue through Google AdSense, Ad Manager, AdX and header bidding. Every article here comes from work inside real publisher accounts, not secondhand research.