Any vendor who tells you their wrapper is free in performance terms is either not measuring or not telling you. The useful question is not whether header bidding costs something — it does — but which metrics it touches and how much of the cost is avoidable.
What it costs, metric by metric
- LCP (Largest Contentful Paint) — affected indirectly. Ad requests compete with your hero image and fonts for bandwidth and connections. If your LCP element is content rather than an ad, the fix is prioritisation, not removing the auction.
-
CLS (Cumulative Layout Shift) — the big one, and almost entirely avoidable. Reserve space for every slot with explicit dimensions or
aspect-ratiobefore anything loads. An ad that appears in unreserved space pushes content down and CLS is unforgiving about it. - INP / TBT — affected by the wrapper bundle and every bidder adapter you add, which all parse and execute on the main thread. This is the cost that scales with bidder count.
- FCP — mostly unaffected if the auction is asynchronous and does not block rendering. If FCP moves when you install a wrapper, something is blocking that should not be.
What actually helps
- 1 Reserve slot space. Non-negotiable, costs nothing, and eliminates most ad-driven CLS on its own.
- 2 Lazy-load below-the-fold placements. Do not request an ad the user may never reach.
- 3 Defer the whole auction until the first user interaction or scroll on pages where that is acceptable. The content path gets the network to itself during the critical window.
- 4 Cut bidders that do not earn. Every adapter is bytes downloaded, parsed and executed for every user, including the ones who never see an ad.
- 5 Use adaptive timeouts so slow devices are not punished with a wait they cannot afford.
- 6 Preconnect to the domains that will definitely be used, so the TLS handshake is not on the critical path.
- 7 Serve the tag from a CDN edge, compiled and minified, as one file rather than a chain of dependent script loads.
What deferral is worth
On ssm.codes, deferring the auction until the first scroll typically moves FCP by roughly 50–200 ms, LCP by 100–300 ms and TBT by 30–100 ms, depending on how heavy the page already is. Those are meaningful numbers if you are close to a Core Web Vitals threshold.
The trade-off is real and you should hear it plainly: users who bounce without scrolling never trigger an auction, so you lose those impressions. On article pages where nearly everyone scrolls, that is a good trade. On a single-screen landing page, it is not.
Measure in field data, not just Lighthouse. Chrome User Experience Report and your own RUM tell you what your users experience; a lab test on a fast machine tells you what a fast machine experiences.
Related questions
Do ads affect Core Web Vitals scores?
Yes, and CLS is where they do the most damage — ads appearing in unreserved space shift content and are heavily penalised. Ad scripts also contribute to INP and TBT through main-thread work. LCP is affected indirectly through bandwidth contention. Reserving slot space fixes the largest share of the problem for free.
How do I stop ads from causing layout shift?
Reserve the space before anything loads: set explicit width and height, or a CSS aspect-ratio, on every ad container. If you use collapse-on-empty, collapse it out of flow or reserve a minimum height, otherwise the collapse itself becomes a shift. Never let an ad container size itself from the creative.
Is it worth removing bidders to improve page speed?
Often yes. Each adapter adds bundle size and main-thread parse time for every user. Pull win rate and revenue per bidder; anything winning a negligible share of auctions is a pure cost. Trimming a bidder list from ten to five frequently improves both INP and net revenue.
Does lazy loading ads reduce revenue?
It reduces measured impressions and usually increases viewability and revenue per impression. Net revenue typically holds or improves, because you stop paying latency for slots users never reach. The risk is loading too late — the ad must be requested before the slot enters the viewport, not as it arrives.
Try it on your own site
Free up to 1 million ad impressions a month. You keep your Ad Manager account and your SSP contracts.
Start free