Core Web Vitals Failing? Here's How to Pass
Google marks your site as “Poor” in Core Web Vitals? Here's what LCP, CLS, and INP actually mean — and how to fix each one.
Google now uses Core Web Vitals as a ranking factor. If your site fails them, you're quietly losing search traffic to competitors who pass. Here's what each metric means in plain English — and the real fixes.
The three metrics
1. LCP (Largest Contentful Paint) What it measures: How long until the biggest visible element (usually a hero image or heading) finishes loading. Target: Under 2.5 seconds.
Fails when: Hero images are huge, CSS blocks rendering, or the server is slow.
2. INP (Interaction to Next Paint) — replaced FID in 2024 What it measures: How fast the page responds when a user clicks or taps. Target: Under 200ms.
Fails when: JavaScript is doing too much on the main thread, especially on button clicks.
3. CLS (Cumulative Layout Shift) What it measures: How much the page jumps around while loading (annoying!). Target: Under 0.1.
Fails when: Images have no declared dimensions, ads load and push content down, fonts swap mid-render.
Fixing LCP
- Find your LCP element: Chrome DevTools → Performance panel → record a reload
- Optimize it: If it's an image — compress, use WebP, serve the right size
- Preload it:
<link rel="preload" as="image" href="/hero.webp"> - Remove render-blocking resources: Move JS to end of body, inline critical CSS
- Upgrade to a faster host if TTFB is slow
Fixing INP
- Find slow interactions: DevTools → Performance Insights → "Interactions"
- Break up long tasks: Split JS work into chunks with
setTimeoutorrequestIdleCallback - Remove heavy third-party scripts: Chat widgets, analytics, ad scripts are common culprits
- Debounce input handlers: Especially on search bars and form fields
- Use web workers for heavy computation
Fixing CLS
- Set width and height on every image:
<img src="..." width="800" height="600"> - Reserve space for ads: Fixed-size containers, not “expand to fit”
- Use `font-display: swap` with
size-adjustCSS to match fallback font metrics - Avoid injecting content above existing content after page load
- Never animate layout properties — use
transforminstead oftop/left
How to test
- PageSpeed Insights — gives you Core Web Vitals scores + specific recommendations
- Chrome DevTools → Lighthouse — run locally on staging
- Search Console → Core Web Vitals report — real user data from Chrome
The easy wins
- Most sites can pass Core Web Vitals with:
- Image optimization (WebP, proper sizing, lazy loading)
- A CDN (Cloudflare free tier is enough)
- Removing unused JavaScript
- Adding width/height to images
- Proper font loading
Need help?
I run full Core Web Vitals audits and make the specific fixes needed to pass — usually in a day or two. If your site is failing, send me the URL and I'll tell you exactly what's wrong.
Need Help With Your Website?
I fix these problems every day. Send me a message and I'll take a look.
Get Help Now