Publishers arrive at this question already resigned: either the page is fast or it earns. In practice, the sites that score well on Core Web Vitals and monetise well are doing the same four things.
1. Reserve the slot before the ad exists
Every ad container should have an explicit min-height that matches the largest size it can serve. A 300x250 slot that collapses to zero height until the creative arrives is a guaranteed layout shift, and CLS is the metric most sensitive to it.
The multi-size problem
If a slot can serve 300x250 or 300x600, reserve for the size that wins most often and let the rarer one shift — or split the slot. Reserving for the tallest size on every impression wastes viewport and drags viewability down.
2. Lazy-load, but not too late
Requesting ads only when the slot is 200–400px from the viewport cuts wasted requests dramatically and lifts viewability. Setting that threshold at zero, though, means the user reaches the slot before the auction finishes, and you have traded revenue for a metric.
3. Keep the wrapper off the critical path
The wrapper script belongs in the head, loaded async, with no render-blocking dependencies. Anything that must run before it — a consent manager, for example — should be the smallest possible build, served from the same origin where you can.
4. Cap the high-impact formats
Interstitials and anchors earn well and cost trust. Frequency-cap them per session, make them dismissible in one tap, and never fire one on the first pageview of a session. The revenue difference is small; the retention difference is not.
Measure the delta, not the absolute. Run the wrapper on half your traffic for a week and compare LCP, CLS and INP between the groups.
Want us to run this check on your site?
Request a review