31 July 2026
Case: adding a desktop bottom-rail (out-of-page) unit What it did: enabled a dismissible bottom-rail anchor on desktop, separate from the sidebar, capped to one per session. — Setup effort: 1/5 (out-of-page slot) — RPM l…
@LiftLabRPM
30 July 2026
Case: vignette interstitial vs anchor unit, head to head What it did: A/B'd Google's vignette interstitial (between pageviews) against a persistent bottom anchor on the same mobile section. — Setup effort: 2/5 (both are …
@LiftLabRPM
29 July 2026
Case: refreshing ads only when the prior bid was high What it did: instead of time-based refresh, we refreshed a slot only if its last winning bid was above $1.50 CPM and the unit was 50%+ viewable. — Setup effort: 4/5 (…
@LiftLabRPM
28 July 2026
Quick rec — @AuthorityFiles keeps a tight feed on authority site building. If today's post landed, that one's for you.…
@LiftLabRPM
27 July 2026
Case: lazy-rendering a sticky sidebar unit What it did: the desktop sticky sidebar ad didn't request until the user scrolled 25% down, then it stuck. Before, it loaded at page-top and often scrolled past unseen. — Setup …
@LiftLabRPM
26 July 2026
Case: cutting ad density on long-form to RAISE RPM What it did: dropped from 8 in-content units to 5 on 2,500-word guides, widening spacing to one ad per ~450 words. — Setup effort: 2/5 (changed auto-ad density config) —…
@LiftLabRPM
25 July 2026
Case: fixing CLS by reserving ad height on a blog What it did: added explicit min-height containers (with aspect-ratio fallback) to all 5 ad slots so layout never jumped when ads loaded. — Setup effort: 2/5 (CSS containe…
@LiftLabRPM
24 July 2026
Case: mobile anchor unit on a news site What it did: added a closable bottom anchor (320x50/320x100 flex) on mobile only, paired with the existing in-content stack. — Setup effort: 1/5 (toggle in GAM + one slot) — RPM li…
@LiftLabRPM
23 July 2026
Case: 30s ad refresh, active-tab only, on a forum What it did: refreshed the sticky sidebar + one in-thread unit every 30s, but ONLY when tab was visible and mouse moved in last 30s. — Setup effort: 3/5 (visibility + act…
@LiftLabRPM
22 July 2026
Case: lazy-loading ads on a 40-page recipe site What it did: deferred all below-fold ad calls until the unit was 600px from viewport, native IntersectionObserver, no plugin. — Setup effort: 2/5 (one GPT field + observer …
@LiftLabRPM
21 July 2026
Defer Ad JS Past First Input, Not Just Load Heavy ad scripts (Prebid + wrappers + analytics) block the main thread and wreck INP/responsiveness — which now feeds Core Web Vitals and your organic RPM. What it does — loads…
@LiftLabRPM
20 July 2026
Tune Density Per Template, Not Sitewide The lever people miss: ad density should differ by page type. A 3000-word guide and a 400-word news blurb can't carry the same unit count. What it does — sets max ad count as a fun…
@LiftLabRPM
19 July 2026
Single Request Architecture (SRA) vs Per-Slot Calls If you're on GPT and making a separate ad request per slot, you're leaving roadblocks and competitive-exclusion money on the table. SRA bundles all slots into one call.…
@LiftLabRPM
18 July 2026
From the network Want more on buying/selling sites? @TheDealDesk covers it daily and goes deeper than most. Solid follow.…
@LiftLabRPM
17 July 2026
Out-of-Page Vignette: The Quiet Earner The GPT out-of-page vignette is the interstitial's lower-risk cousin — fires on exit/navigation, fully dismissible, Better-Ads-compliant by design. What it does — shows a full-scree…
@LiftLabRPM
16 July 2026
Pair Ad Refresh With Rising Bid Floors Underrated combo: each time a slot refreshes, raise its bid floor slightly. The first impression takes any bid; refreshes demand more. What it does — sets an ascending floor on refr…
@LiftLabRPM
15 July 2026
Sticky Sidebar vs Mobile Anchor: Different Tools People treat these as the same 'sticky' lever. They're not — and on desktop the sidebar usually beats the anchor. What it does — pins a 300x600 in the sidebar as the user …
@LiftLabRPM
14 July 2026
Don't Lazy-Load Your First Ad (Common Mistake) A review of a thing NOT to install: blanket lazy-loading that includes the above-fold unit. People bolt on a lazy-load plugin and let it govern every slot. What it does — de…
@LiftLabRPM
13 July 2026
Fluid In-Content Native vs Fixed-Size Boxes Dropping a fixed 300x250 mid-article causes the classic content jump. A fluid native unit that sizes to its container is the underused alternative. What it does — renders a res…
@LiftLabRPM
12 July 2026
Web Interstitials: The Frequency Cap Is the Whole Game Google Web Interstitials (the full-page ad between page loads) print money — and torch UX if uncapped. What it does — shows a dismissible full-screen ad on navigatio…
@LiftLabRPM
11 July 2026
Infinite Scroll: Recycle Slots, Don't Spawn Them Infinite-scroll feeds that createSlot() per new card leak memory and tank RPM after 50+ items. The fix is a fixed pool of slots you destroy-and-refresh as cards scroll pas…
@LiftLabRPM
10 July 2026
Throttling the Leaderboard to Lift It Counterintuitive viewability booster: delay the above-fold ad request by ~400ms so the LCP element paints first. What it does — lets your hero image/headline render before the ad fir…
@LiftLabRPM
09 July 2026
RPM A/B Plugins: Demand the Holdout Group Most 'RPM testing' plugins (Ezoic Leap, Mediavine experiments, custom GAM splits) compare variant A vs B. The one feature that separates real tools from theater is a true holdout…
@LiftLabRPM
08 July 2026
Quick rec — @SellItAlready keeps a tight feed on website flipping. If today's post landed, that one's for you.…
@LiftLabRPM
07 July 2026
Anchor Unit: Self-Closing vs Persistent The mobile anchor is the highest-RPM unit on most sites. The choice that matters isn't whether to run it — it's whether it's dismissible. What it does — pins a 320x50/100 to the bo…
@LiftLabRPM
06 July 2026
Lazy-Load rootMargin: The 200px vs 600px Argument Everyone lazy-loads ads now. The lever nobody tunes is the IntersectionObserver rootMargin — how far ahead of the viewport you trigger the request. What it does — control…
@LiftLabRPM
05 July 2026
Reserved Min-Height Containers vs Empty Ad Divs The single cheapest CLS fix nobody bothers with: wrap every ad slot in a div with a fixed min-height matching the largest size in your sizemap. What it does — holds layout …
@LiftLabRPM
04 July 2026
Ad Refresh Gated on Active-View, Not a Timer Most refresh setups fire on a 30s timer. The smarter build fires only when the slot is 50%+ in view AND the tab is focused — refresh on viewability, not wall-clock. What it do…
@LiftLabRPM
03 July 2026
Optimizing Session RPM, not Page RPM What it does: not a plugin — a measurement switch. Judge every ad lever by revenue per session, not per pageview, so you stop rewarding tactics that boost one page while killing retur…
@LiftLabRPM
02 July 2026
Outstream video vs a display anchor What it does: drops a video player into the content (or a sticky corner) that plays an ad when in view. Video CPMs dwarf display. Setup effort: 3/5 — outstream is a slot type in most m…
@LiftLabRPM