Something is usually added to a page before anyone calls it monetized: a leaderboard above the headline, a sticky unit at the foot of the screen. That way of speaking assumes that revenue comes from area, and that a page with no area to spare has no revenue to spare. The industry's own standards share that assumption: they measure ads by the share of the page they occupy and say nothing about any other inventory.

Published standards cap ads as a share of page height

Two published rules state the area assumption. The Coalition for Better Ads lists the ad experiences that fall below its Better Ads Standards. On mobile the list includes "Ad Density Higher Than 30%", and on desktop "Ad Density Higher than 50%".1 The definition is arithmetic: the heights of all ads in the main content portion of a page are summed and divided by that portion's total height.2 Google's publisher policies set a similar limit in words: Google-served ads are not allowed "on screens with more ads or other paid promotional material than publisher-content."3

A publisher near either limit who wants more from units has two choices. The first is to add content below the units so that the ratio falls. The second is to redesign, moving or shrinking what is there to make room. Neither choice removes the requirement that a unit occupy height.

The words already on the page are inventory those rules never measured

What a publisher has not yet sold, on a page built of text, is not the blank area around the text. It is the words themselves: the product names, tool names, place names, and services the article already discusses. They are inventory in the plain sense: an advertiser can buy them, and they already sit in their final position.

That is what an in-text bubble sells. The embed is one script, adbubbles.js, and once it is in the site, words that already appear in the articles receive a light dotted underline. A hover or a tap opens a bubble from the word. The bubble holds an "Ad" label, a headline of at most 40 characters, a body of at most 90, the advertiser's display domain, one link, and an "Ads by AdBubbles" mark. The word stays where it was, and the bubble closes on mouse-out, on Escape, or on a tap outside it.

Reading text this way is ordinary browser work: MDN Web Docs describes the TreeWalker object as one that "represents the nodes of a document subtree and a position within them".4 A script that steps through those nodes reads words and adds nothing to the layout. The embed scans only the scope the publisher configured.

The publisher decides where the embed reads and how much it shows

Three settings belong to the publisher. The first is the scope, the part of the page the embed may scan, such as the article element. The second is the maximum number of bubbles on a page. The third is the list of advertiser categories to exclude, beyond those AdBubbles prohibits everywhere: gambling, adult, weapons, cryptocurrency, supplements, and political. Inside the scope the embed skips headings, links, code, preformatted text, form controls, navigation, header, footer, and anything marked data-noads.

The embed underlines the first occurrence of each bought word and opens at most one bubble per word. Two bubbles never share a paragraph, and a page never carries more than the maximum. The publisher dashboard reports page views with bubbles, opens, clicks, and earnings, where an open is a bubble that stayed visible for one second.

The account and the embed are free. A publisher who has verified a site can request a crawl of it and read the list of currently sellable words before deciding anything else. The publisher page describes the steps, and the documentation shows where the scope and the per-page cap are set.

A new display unit changes the template before it earns anything

A display unit changes the page before it loads. Google's guidance on Cumulative Layout Shift, the Core Web Vital for content that moves, names ads, embeds, and iframes among the causes of content shifting down the page. The recommended fix is to reserve space in the initial layout, with a minimum height or an aspect ratio in CSS.5 Reserving space is a template edit. The IAB Tech Lab's New Ad Portfolio describes the standard units as "based on aspect ratio and size range rather than fixed pixel sizes".6 The box therefore has to fit a range.

A unit usually also brings a script. The HTTP Archive's 2024 Web Almanac found that 92 percent of pages load at least one third party. Nearly one-third of those serve advertising, analytics, or consent management.7 A display unit therefore tends to bring a request to another domain, a box sized before the request returns, and a stylesheet rule. That is a redesign in three small parts, and the unit's revenue still counts against the height limits.

The bubble's stylesheet and the site's stylesheet cannot affect each other

A redesign usually begins in the stylesheet, and an ad format that could break the site's CSS would force edits there. The bubble is rendered inside a Shadow DOM. MDN Web Docs describes the effect in one sentence: "The page CSS does not affect nodes inside the shadow DOM." Styles defined inside the shadow tree are, in turn, scoped to that tree.8 The site's stylesheet is untouched.

Relevance without obtrusiveness is the combination the research favors

In a field experiment reported in Marketing Science in 2011, Goldfarb and Tucker found that matching an ad to site content and making it more obtrusive each raised purchase intent on its own. In combination the two were ineffective: ads that did both did worse at raising purchase intent than ads that did only one or the other. The authors relate the result to privacy concerns; the effect was strongest among privacy-conscious consumers and in privacy-sensitive categories.9 A bubble is matched to the content by construction, because the word is the content, and the bubble occupies no space until the reader hovers or taps.

AdBubbles pairs a word on a page with the one advertiser who bought that word on that site for the month. We do not choose who sees the bubble, do not follow a reader between pages or sites, and do not promise a result. AdBubbles sets no cookie, stores no identifier, and collects no personal data from readers. The embed sends a view beacon per page load, an open beacon when a bubble opens, and a click beacon when a link is followed; nothing else leaves the page. Publishers keep 70 percent of what advertisers pay for the campaigns that run on their pages.

The sellable words on a site can be counted by hand

Counting that inventory needs no software. Suppose a site's three busiest articles run to 1,500 words each and between them name eleven products, four software tools, six places, and three kinds of professional service. Those twenty-four nouns are the words an advertiser could buy, and each already sits where a bubble would open. A publisher can read the busiest pages with one question in mind: which of these words names something a business sells. The height of the page, and the units already on it, do not enter the count.