Prerequisites
- A live site you can measure in Search Console or PageSpeed Insights
- The ability to edit your templates and CSS
Core Web Vitals are three measurements of how a page feels to use. For an ad-supported site they matter twice over: they are a ranking consideration, and the thing damaging them is the thing paying your bills.
The Three Numbers
| Metric | What it measures | Google's "good" threshold |
|---|---|---|
| LCP — Largest Contentful Paint | How quickly the main content appears | Within 2.5 seconds |
| INP — Interaction to Next Paint | How quickly the page responds to input | 200 ms or less |
| CLS — Cumulative Layout Shift | How much the layout jumps around | 0.1 or less |
Two details that change how you read your own reports:
Assessment uses the 75th percentile of page loads, segmented across mobile and desktop. So you are not judged on your average visitor — you are judged on a slow-ish one. A site that feels fine on your laptop can fail comfortably.
INP replaced FID. Interaction to Next Paint became a stable Core Web Vital in 2024, superseding First Input Delay, because it measures runtime responsiveness more comprehensively. Any guide still telling you to optimise FID is out of date.
⚠️ Warning
Check whether your performance advice predates 2024. FID measured only the delay before the first interaction began processing, which was easy to score well on. INP measures the full response across the whole visit, and many sites that passed FID comfortably fail INP.
Why Ads Attack All Three
This is the part generic performance guides skip, because they assume a site with no ads.
CLS is the obvious one. An ad unit that loads without reserved space pushes everything below it down the page. That downward shove is precisely what CLS measures, and ad slots are the most common cause of a failing score on content sites.
LCP suffers because ad scripts compete for bandwidth and the main thread during the exact window when your largest element — usually the hero image or heading — is trying to paint.
INP suffers because ad libraries run JavaScript continuously: bidding, refreshing, measuring viewability. Every one of those tasks occupies the main thread and delays the response to a tap.
So the honest framing is a trade, not a free optimisation. More ad units mean more revenue per pageview and worse vitals.
The Fixes That Actually Work
Reserve space for every ad slot. The single highest-value change. Give each container an explicit minimum height matching the ad size you expect, so the space exists before the ad arrives and nothing moves when it does. If your slots are already styled with fixed dimensions, most of your CLS problem is solved.
Load ad scripts asynchronously, never blocking render. AdSense's own tag is async by default — the damage usually comes from additional tags added later.
Don't put an ad above your LCP element. A banner competing with your hero for the first paint directly worsens LCP. Below-the-fold placements cost less performance for a similar viewability outcome.
Be careful about collapsing unfilled units. AdSense lets you hide unfilled slots with CSS targeting data-ad-status="unfilled". It removes the empty gap, but it also removes the reserved space after the page rendered — which shifts content and raises CLS. If your unfilled rate is high enough to make this tempting, reducing the number of ad units is usually the better fix.
Cut ad density before you cut anything else. Six units on a 1,200-word article is both a performance problem and a poor experience. Fewer, better-placed units frequently earn more per session because readers stay.
💡 Pro Tip
There's a useful convergence here: AdSense's placement policy already tells you to keep ads away from links, buttons and navigation to avoid accidental clicks. Generous spacing around ad slots satisfies that policy and gives you room to reserve fixed dimensions. The compliant layout and the fast layout are largely the same layout.
How to Measure Honestly
Search Console's Core Web Vitals report uses field data — real visits from real users — and it's what actually counts. It's also slow to update, because it works on a rolling 28-day window.
PageSpeed Insights gives you both: field data if Google has enough, plus a lab test you can run instantly. Use the lab score to iterate on a fix and the field data to confirm it worked.
⚠️ Warning
Lab tests often understate the ad problem. Testing tools may not load the same ad inventory a real visitor gets, so your lab CLS can look healthy while field CLS fails. When the two disagree on an ad-supported site, trust the field data.
A Realistic Target
Chasing a perfect score on an ad-supported site is not a good use of your time. Google's thresholds are pass/fail bands, not a leaderboard — a page comfortably inside "good" gains nothing further from being faster.
A sensible order of work:
- Reserve space for every ad slot. Usually fixes CLS outright.
- Move ads out of the LCP region.
- Audit total ad count per page. Remove the weakest performers.
- Measure in Search Console field data, not just lab tests.
- Stop when you're inside the thresholds.
✅ Action Step
Open PageSpeed Insights on your busiest article and look only at CLS first. If it fails, check whether every ad container has an explicit height in your CSS. On most ad-supported sites that one change moves CLS from failing to passing without touching anything else.
Where to Verify Any of This
Thresholds and the INP transition come from Google's published Web Vitals documentation, and the ad placement and unfilled-unit behaviour from AdSense's own Help Centre. Both are linked below and are more current than any summary, including this one.
Frequently Asked Questions
What are the Core Web Vitals thresholds?
Google's "good" targets are LCP within 2.5 seconds, INP of 200 milliseconds or less, and CLS of 0.1 or less. Assessment uses the 75th percentile of page loads, measured separately for mobile and desktop.
Has FID been replaced?
Yes. Interaction to Next Paint replaced First Input Delay, becoming a stable Core Web Vital in 2024. INP measures runtime responsiveness more comprehensively than FID did, so guides still citing FID are out of date.
Do ads hurt Core Web Vitals?
They can hurt all three. Ad scripts compete for the main thread and delay LCP and INP, and ad units that load without reserved space push content down the page, which is exactly what CLS measures. Reserving space for every slot is the single biggest fix.
Does hiding unfilled ad units cause layout shift?
Yes. Collapsing an unfilled unit removes reserved space after the page has rendered, which shifts everything below it and raises CLS. If your unfilled rate is high, reducing the number of ad units usually beats hiding the failures.
Sources & Further Reading
Every factual claim in this guide is drawn from primary, authoritative sources. Figures reflect the referenced pages at the time of our last review and can change — always confirm current terms on the official site.
- 1Web Vitals — web.dev (Google)
- 2Understanding Core Web Vitals and Google search results — Google Search Central
- 3Ad placement policies — Google AdSense Help
- 4Use the data-ad-status parameter to hide unfilled ad units — Google AdSense Help
- 5Google Search Essentials — Google Search Central
EarnRoutes Editorial
Researched and fact-checked against primary sources
Compiled from Google's published Core Web Vitals documentation and AdSense ad placement guidance. Every threshold quoted here is stated by Google, linked in the source list below.
Last reviewed on September 2, 2026