Three thresholds define a page that Google's web.dev documentation calls good. Largest Contentful Paint, the loading metric, should occur within 2.5 seconds of when the page first starts loading. Interaction to Next Paint, the responsiveness metric, should be 200 milliseconds or less. Cumulative Layout Shift, the visual-stability metric, should be 0.1 or less.1 The same page adds that the figure to measure is the 75th percentile of page loads, split between phones and desktops.1 A page passes only when three readers in four get the good experience.
The published record names ads as a cause for two of the three metrics
The web.dev page on optimizing Cumulative Layout Shift states that ads are one of the largest contributors to layout shifts on the web.2 Embedded widgets, it says, often do not know how large their contents are before they load, so the platforms offering them do not always reserve space.2 Its remedy is to reserve the space in the initial layout, with a minimum height or an aspect ratio on the slot.2 Content injected near the top of the viewport, it adds, usually causes the greater shift.2 Each remedy assumes the ad is a rectangle whose size is unknown until it arrives.
Interaction to Next Paint measures the other cost. It observes the latency of every click, tap, and keyboard interaction across a reader's visit, and an INP at or below 200 milliseconds counts as good responsiveness.3 The documentation attributes part of that latency to long tasks on the main thread.3 The HTTP Archive's 2024 Web Almanac grouped long animation frames on desktop computers by script category.4 Advertising was among the categories where the majority of INP fell into the poor range.4
An ad attached to a word on the page has no slot to reserve
An ad attached to a word already in the paragraph needs no rectangle, and that is the format AdBubbles sells. A publisher adds one script, adbubbles.js, and bought words in their articles receive a light dotted underline. Hovering or tapping the word opens a small bubble holding an "Ad" label, a short headline and body, the advertiser's domain, and one link. The script is one static file of plain JavaScript with no dependencies, and it loads after the page's DOM is ready. Before a reader acts, the page holds no bubble and no empty slot.
AdBubbles sets no cookie, stores no identifier, and collects no personal data from readers. The embed sends three beacons: one view per page load, one open when a bubble has stayed visible for one second, and one click when a link is followed. Nothing else leaves the page. What AdBubbles does, as the how-it-works page sets out, is match words on a page to the advertiser who bought them. It does not choose which people see an ad, does not follow a reader between pages or sites, and does not promise a result. What the embed does to a site's metrics is something only that site's own measurements can show.
The definition of Cumulative Layout Shift matters for how a bubble opens. The metric counts unexpected shifts, and a shift within 500 milliseconds of a discrete input, such as a tap, click, or keypress, is flagged and can be excluded.5 On a phone a tap opens the bubble, and on a keyboard Enter opens it; both are discrete inputs. On a desktop the bubble opens after a short hover delay, and whether anything moves when it does is a question for the site's field data.
The publisher decides how much of a page the embed may read. The scope is the element it scans, for example the article element, and inside it the embed skips headings, links, code, form controls, navigation, header, footer, and anything marked data-noads. It underlines the first occurrence of each bought word, never places two bubbles in one paragraph, and stops at the maximum the publisher set. The configuration options are the scope, the per-page maximum, and the advertiser categories to exclude.
A score of 90 comes from a laboratory and a pass comes from readers
The 90 in a performance target names a Lighthouse band, not a Core Web Vitals result. Chrome's documentation on Lighthouse performance scoring colors a score of 90 to 100 green and labels it Good; 50 to 89 is orange and 0 to 49 is red.6 PageSpeed Insights produces that score by running Lighthouse in a simulated environment, and it calls the result lab data.7 Field data from real readers sits beside it in the same report.7
The score is a weighted average of five metric scores.6 In the table for Lighthouse 10, Total Blocking Time carries 30 percent, Largest Contentful Paint and Cumulative Layout Shift 25 percent each, and First Contentful Paint and Speed Index 10 percent each.6 Interaction to Next Paint is not among the five. A page can therefore sit in the green band while its readers wait longer than 200 milliseconds for a tap to register.
The Core Web Vitals assessment is built from the field side. PageSpeed Insights takes its real-user data from the Chrome User Experience Report and covers the previous 28-day collection period.7 A page with sufficient data passes the assessment when the 75th percentiles of all three metrics are Good.7 Google Search Central says that good Core Web Vitals, with other page experience aspects, align with what its core ranking systems seek to reward.8 A pass is a statement about three field figures, and a score of 90 is a statement about a weighted lab average.
Chrome unloads an ad that uses too much of a reader's device
Chrome also enforces a limit on ads that consume too much of a reader's bandwidth and processor. Its documentation on heavy ad interventions gives three conditions.9 The first is more than four megabytes of network bandwidth, and the second is more than 15 seconds of main-thread time in any 30-second window. The third is more than 60 seconds of main-thread time in total. An ad frame that crosses any of them is unloaded.9
Those figures describe an ad that runs in a frame of its own, with its own network traffic and main-thread work. A bubble is rendered in a Shadow DOM within the page's own document, not in an ad frame. The per-site data the embed reads is a static file, regenerated when a campaign changes and cached at the edge. A page view therefore costs the ad server nothing, and the only dynamic request is the small beacon.
The figure to compare is the site's own 75th percentile, not a score
The 2024 Web Almanac gives the baselines a publisher can set their own origin against. It reports that 72 percent of websites achieved good CLS scores and 11 percent had poor ones.4 Good INP stood at 74 percent of websites on phones and 97 percent on desktop computers.4 Good Core Web Vitals as a whole, measured with INP, stood at 43 percent on phones and 54 percent on desktop computers.4
A publisher account and the embed cost nothing to set up. The figure to read afterward is not the green band. For an origin with sufficient data, PageSpeed Insights shows the 75th-percentile Interaction to Next Paint and Cumulative Layout Shift for the previous 28 days.7 The Core Web Vitals report in Search Console shows how the site's pages perform.8 Those two field figures, read before a script is added and again 28 days after, are the numbers a score of 90 cannot supply.