Better Ads Standards Reference
Coalition for Better Ads — All 19 Standards

Coalition for Better Ads

The Coalition for Better Ads (CBA) is an industry group that identified the ad experiences most likely to drive consumers to install ad blockers. Their research, conducted with over 66,000 consumers across North America and Europe, established the Better Ads Standards — a set of ad experiences that fall beneath a threshold of consumer acceptability.

These standards are enforced by major browsers. Google Chrome filters ads on sites that repeatedly violate them. Our monitoring system tests all CNC sites against every applicable standard.

View official standards at betterads.org

6
Desktop Web Standards
10
Mobile Web Standards
3
Short-Form Video Standards

How We Test

Our Playwright-based monitor runs automated tests against all 19 standards. Each test loads real site pages, handles cookie consent, waits for ads to render, then measures specific ad behaviors against the official thresholds. Results are indexed to OpenSearch and visualized in Grafana dashboards.

Daily sentinel: ~183 risk-weighted tests covering the 4 highest-risk standards across all sites. Weekly audit: Full 789 tests covering all standards on all URLs.

D1
Pop-up Ads
Desktop
Pop-up ads are a type of interstitial ad that pop up and block the main content of the page. They appear after content on the page begins to load and are among the most commonly cited annoyances for visitors to a website. Pop-up ads come in many varieties — they can take up part of the screen, or the entire screen.
Violation Threshold
Any pop-up ad
Both countdown and non-countdown variants are violations. Appears after content begins to load (distinguishes from prestitial).
Detection Method
AdDetector.findPopupAds() scans for overlay elements that appear after page load, checking z-index, position:fixed/absolute, and viewport coverage. Also uses consent handler integration to distinguish CMP modals from ad pop-ups.
D2
Auto-playing Video Ads with Sound
Desktop
Auto-playing video ads play sound without any user interaction. These experiences are especially disruptive because they catch readers off guard, and often compel them to quickly close the window or tab to stop the sound.
Violation Threshold
Any autoplay with sound
Sound plays without user interaction = violation. Click-to-play-sound is OK. Pre-roll/mid-roll on video content pages are excluded.
Our threshold: 5000ms wait for autoplay detection
Detection Method
VideoDetector.findAutoplayingVideosWithSound() monitors all <video> and <audio> elements for 5 seconds, checking muted and autoplay attributes plus actual playback state via media events.
D3
Prestitial Ads with Countdown
Desktop
Prestitial “Countdown” ads appear before the content of the page has loaded, forcing the user to wait a number of seconds before they can dismiss the ad or the ad closes on its own. On desktop, only countdown variants are violations — immediately-dismissible prestitials are acceptable.
Violation Threshold
Any prestitial with countdown
Desktop only: prestitials that can be dismissed immediately are OK. Only countdown variants violate. Appears before content loads.
Detection Method
AdDetector.findPopupAds() + timing analysis. Detects full-page overlays present before DOMContentLoaded, then checks for countdown text patterns (e.g., "3s", "close in") and dismiss button delay.
D4
Large Sticky Ads
Desktop
Large Sticky Ads stick to the bottom edge of a page, regardless of scrolling. They take up more than 30% of the screen’s real estate, continuing to obstruct a portion of the page view regardless of where the user moves on the page.
Violation Threshold
>30% of viewport
Sticks to bottom edge. Persists regardless of scrolling. More than 30% of screen real estate = violation.
Our threshold: >30% (matches standard exactly)
Detection Method
AdDetector.findStickyAds() scrolls the page and identifies elements with position:fixed or position:sticky that remain visible, then calculates their viewport height percentage.
D5
Ad Density Higher Than 50%
Desktop
Ads that take up more than 50% of the vertical height of a page. Ad density is determined by summing the heights of all ads within the main content portion of a desktop page, then dividing by the total height of the main content portion of the page.
Violation Threshold
>50% ad density
Measured against main content portion, not viewport. Excludes headers, footers, navigation. Siderail ads ARE included. Sticky ad height counted once.
Our thresholds: warn at 45%, critical at 50%
Detection Method
DensityCalculator.measureViewportDensity() uses AdDetector.findAllAds() + findBrandingAds() to sum all ad heights within the main content region and compute the ratio.
D6
Ad Density >30% with Sticky Video
Desktop
Ads that take up more than 30% of the vertical height of a page when combined with a sticky video ad. The stricter 30% threshold applies whenever a sticky video ad (dismissible or non-dismissible) is also present on the page.
Violation Threshold
>30% density + sticky video
Combined standard: both conditions must be present. Same measurement rules as D5 but threshold drops to 30% when sticky video ad exists.
Our threshold: >30% when sticky video present
Detection Method
DensityCalculator first checks for sticky video ads via AdDetector.findStickyAds(), then applies the stricter 30% threshold if any are found. Uses the same density measurement pipeline as D5.
M1
Pop-up Ads
Mobile
Pop-up ads are a type of interstitial ad that pop up and block the main content of the page. They appear after content on the page begins to load. Both countdown and non-countdown variants are violations.
Violation Threshold
Any pop-up ad
Same concept as desktop (D1). Both countdown and non-countdown variants violate.
Detection Method
AdDetector.findPopupAds() — same detector as desktop, running on mobile viewport (iPhone 14, 390×844).
M2
Prestitial Ads
Mobile
Mobile prestitial ads appear before content has loaded, blocking the user from continuing to the content. Unlike desktop (D3), on mobile BOTH countdown AND non-countdown prestitials are violations.
Violation Threshold
Any prestitial ad
Key difference from desktop: all prestitials violate on mobile, not just countdown variants. Can be full-screen or partial.
Detection Method
AdDetector.findPopupAds() + page load timing analysis. Detects overlays present before DOMContentLoaded on mobile viewport.
M3
Ad Density Higher Than 30%
Mobile
Ads that take up more than 30% of the vertical height of a mobile page. Stricter than desktop’s 50% threshold. All ad formats count, including sticky and inline ads. Sticky ad height is counted once.
Violation Threshold
>30% ad density
Measured against main content, not viewport. Excludes headers, footers, navigation. 20 percentage points stricter than desktop.
Our thresholds: warn at 25%, critical at 30%
Detection Method
DensityCalculator.measureViewportDensity() with mobile thresholds. Same pipeline as desktop density but with 30% critical threshold.
M4
Flashing Animated Ads
Mobile
Ads that animate and “flash” with rapidly changing background, text, or colors are highly aggravating for consumers. Smooth, non-flashing animations are acceptable — only rapid flashing violates. This standard is mobile-only; no desktop equivalent exists.
Violation Threshold
>3 flashes/second
Rapidly changing background, text, or colors = violation. Smooth animations that do not flash are OK.
Our threshold: >3 flashes/sec over 3s monitoring
Detection Method
Canvas-based pixel sampling monitors ad elements for 3 seconds, counting color transitions that exceed a luminance delta threshold. Flags ads exceeding 3 flashes per second.
M5
Auto-playing Video Ads with Sound
Mobile
Auto-playing video ads with sound automatically play without any user interaction. Especially disruptive on mobile devices in public places. Same rules as desktop (D2): click-to-play-sound is acceptable.
Violation Threshold
Any autoplay with sound
Sound without user interaction = violation. Same as desktop D2 but with additional mobile context.
Our threshold: 5000ms wait for autoplay detection
Detection Method
VideoDetector.findAutoplayingVideosWithSound() — same as desktop, running on mobile viewport.
M6
Postitial Ads with Countdown
Mobile
Postitial ads with countdown timers appear after the user follows a link. They force the user to wait before they can dismiss the ad or be redirected. This is a mobile-only standard; no desktop equivalent exists. Immediately-dismissible postitials are acceptable.
Violation Threshold
Any postitial with countdown
Appears after link navigation. Immediately-dismissible postitials are OK. Distinct from prestitial (before content) vs. postitial (after link click).
Detection Method
Navigation interstitial detector: navigates between pages and checks for full-screen overlays with countdown text that appear during the transition. Tests multiple internal link navigations per site.
M7
Full-screen Scrollover Ads
Mobile
Full-screen scrollover ads force users to scroll through an ad that appears on top of content, taking up more than 30% of the page and floating over main content. Ads that scroll inline with content are acceptable. This is a mobile-only standard.
Violation Threshold
>30% of viewport
Floats on top of content (overlay behavior). User must scroll through it. Inline-scrolling ads are OK.
Our threshold: >30% of viewport
Detection Method
Scrollover detector scrolls the page and identifies ad elements with overlay behavior (z-index above content, position:fixed) that cover more than 30% of the viewport during scroll.
M8
Large Sticky Ads
Mobile
Large sticky ads stick to a side of a mobile page regardless of scrolling, taking up more than 30% of the screen’s real estate. They have an impeding effect by continuing to obstruct the page view no matter where the user scrolls.
Violation Threshold
>30% of viewport
Sticks to page edge (typically bottom). Persists regardless of scrolling. Same threshold as desktop D4.
Our threshold: >30% (matches standard exactly)
Detection Method
AdDetector.findStickyAds() — same as desktop D4, running on mobile viewport. Scrolls page and checks for fixed-position ad elements exceeding 30% viewport height.
M9
Sticky, Pop-Out Video Ads
Mobile
Autoplaying video ads that appear initially as inline ads. Once the inline player scrolls out of view, the ad moves to the bottom of the viewport and follows the user. Both dismissible and non-dismissible variants are violations. Mobile-only standard.
Violation Threshold
Any sticky pop-out video
Both dismissible and non-dismissible variants violate. Starts inline, transitions to sticky when scrolled out of view.
Detection Method
Scrolls page to move inline video players out of viewport, then checks for newly-appearing position:fixed video elements at the bottom of the screen. Correlates with previously-visible inline video ads.
M10
Sticky Video Ad with Large Inline Ad
Mobile
The combination of an autoplaying sticky video ad at the bottom of the screen with a large inline static ad unit (300×600 or greater). This is a combination standard — both elements must be present simultaneously. Mobile-only; newest mobile standard.
Violation Threshold
Sticky video + large inline (≥300×600)
Both conditions must be present: sticky video fixed to bottom + inline ad 300×600 or larger visible simultaneously.
Detection Method
Combines sticky video detection (M9 pipeline) with AdDetector.findAllAds() size filtering. Checks if a large inline ad (≥300×600) is visible while a sticky video ad is present.
V1
Long Pre-Roll Ads that Can’t be Skipped
Video
Pre-roll ads with a combined length over 31 seconds that do not allow the user to skip within the first 6 seconds. Both conditions must be met for a violation: long duration (>31s) AND no skip option within 6 seconds. Applies to short-form video content (typically 8 minutes or less).
Violation Threshold
>31s combined + no skip in 6s
Both conditions required: combined ad length >31 seconds AND skip button not available within first 6 seconds. Short or skippable pre-rolls are OK.
Our thresholds: maxDuration 31s, maxTimeToSkip 6s
Detection Method
Video test suite plays the page video, detects pre-roll ads via player state changes, measures total ad duration, and checks for skip button appearance within the first 6 seconds.
V2
Mid-Roll Ads
Video
Mid-roll ads play in the middle of a selected short-form video, interrupting the content. All mid-roll ads in short-form video are violations regardless of duration, type, or dismissibility. No exceptions.
Violation Threshold
Any mid-roll ad
Absolute ban in short-form video. No duration threshold — any interruption of content is a violation.
Detection Method
Video test suite monitors player state during playback. Detects ad insertion events (player state changes, ad markers, VAST events) that occur after initial content playback has begun.
V3
Large Display Ads
Video
Non-linear ad experiences (overlays) that are superimposed over more than 20% of the video player OR appear in the middle third of the video player. Static or animated messages/images that are smaller than 20% and positioned outside the middle third are acceptable.
Violation Threshold
>20% of player OR in middle third
Two paths to violation: covers >20% of video player area, OR positioned in the middle third of the player (regardless of size).
Our threshold: >20% of video player area
Detection Method
During video playback, scans for overlay elements positioned within the video player bounds. Calculates overlay area as percentage of player area and checks vertical position against the middle third region.

Standards by Threshold Type

Threshold Desktop Mobile Video
>50% ad density D5
>30% ad density D6 (with sticky video) M3
>30% of screen (sticky) D4 M7 M8
>20% of video player V3
>31s + no skip in 6s V1
Absolute ban (any instance) D1 D2 D3 M1 M2 M4 M5 M6 M9 M10 V2

Our Threshold Configuration

Standard Official Threshold Our Warning Our Critical
D5. Desktop Ad Density >50% 45% 50%
D6. Desktop Density + Sticky Video >30% 30%
M3. Mobile Ad Density >30% 25% 30%
D4 / M8. Large Sticky Ads >30% of viewport 30%
M7. Full-screen Scrollover >30% of viewport 30%
M4. Flashing Animated Ads Rapid flashing >3 flashes/sec
D2 / M5. Autoplay Video with Sound Any autoplay with sound 5000ms detection window
V1. Long Pre-Roll >31s + no skip in 6s 31s / 6s
V3. Large Display Overlay >20% of player 20%

Key Differences: Desktop vs Mobile

  • 1. Prestitial ads: Desktop only bans countdown variants (D3). Mobile bans ALL prestitials — with or without countdown (M2).
  • 2. Ad density threshold: Desktop allows up to 50% (D5). Mobile is stricter at 30% (M3) — a 20 percentage point difference.
  • 3. Postitial ads: Mobile-only standard (M6). No desktop equivalent exists in the Better Ads Standards.
  • 4. Full-screen scrollover: Mobile-only (M7). Ads that float over content while scrolling — not tested on desktop.
  • 5. Flashing animated ads: Mobile-only (M4). Rapidly changing colors/backgrounds are banned only on mobile.
  • 6. Sticky pop-out video: Mobile-only (M9). Inline videos that become sticky when scrolled out of view.
  • 7. Sticky video + large inline ad: Mobile-only (M10). The combination of both ad types simultaneously.

Ad Density Measurement Rules

Shared rules across D5, D6, and M3 density standards:

  • 1.Measured against main content portion, not the viewport
  • 2.Main content excludes headers, footers, navigation, related articles
  • 3.Ads below main content are excluded from calculation
  • 4.Desktop: siderail ads ARE included in calculation
  • 5.All formats count (sticky, inline). Sticky ad height counted once
  • 6.Pre-roll/mid-roll video ads on video content pages are excluded
Better Ads Standards Reference — CNC Ad Monitor Source: betterads.org/standards