How to Fix Core Web Vitals Issues Step by Step
Your LCP is slow, INP is lagging, or your layout keeps shifting. Here is exactly how to diagnose each metric with free tools and apply real fixes — no performance budget needed.
The Three Metrics That Actually Matter (in 2026)
Google's Core Web Vitals are not arbitrary benchmarks. They measure real user experience signals that correlate with engagement, conversion, and return visits. As of 2026, the three metrics are:
INP replaced FID (First Input Delay) as the responsiveness metric in 2024, so if you are still optimizing for FID, you are measuring the wrong thing.
Step 1: Diagnose — Find Out Exactly What Is Broken
Do not guess. Use these free tools to get real field data:
- Google Search Console → Core Web Vitals report. This shows real-user data grouped by URL group. It tells you which pages fail and which metric is the culprit.
- PageSpeed Insights. Enter a specific URL to see both lab data (simulated) and field data (real users). The diagnostics tab often points directly to the root cause.
- Chrome DevTools → Performance panel. Record a page load while throttling to "Slow 4G" to see exactly which resource blocks LCP or which JavaScript task delays INP.
- Our free SEO audit tool. Run a quick check at MintShovels — it flags missing compression, render-blocking resources, and oversized images that commonly drag down all three metrics.
Step 2: Fix LCP (Largest Contentful Paint)
LCP measures when the largest visible element finishes rendering — usually a hero image, heading block, or video poster. Common causes and fixes:
Slow Server Response Time (TTFB > 600ms)
- Use a CDN to serve static assets from edge locations near your visitors.
- Cache dynamic responses aggressively. Set appropriate Cache-Control headers for static files.
- If you use server-side rendering, optimize database queries and reduce third-party API calls on the critical path.
Unoptimized Hero Images
- Compress images before uploading. Aim for under 200 KB for hero images at typical viewport sizes.
- Use modern formats like WebP or AVIF with JPEG/PNG fallbacks via
<picture>. - Add explicit
widthandheightattributes so the browser reserves space immediately. - Preload the hero image:
<link rel="preload" as="image" href="hero.webp">.
Render-Blocking CSS or JavaScript
- Defer non-critical JavaScript with
deferorasync. - Inline critical CSS (the above-the-fold styles) and load the rest asynchronously.
- Remove unused CSS entirely — tools like PurgeCSS can automate this.
Step 3: Fix INP (Interaction to Next Paint)
INP measures how quickly the page responds to user interactions (clicks, taps, key presses). A poor INP usually means heavy JavaScript is blocking the main thread.
Main Causes of Bad INP
- Heavy event handlers. Click handlers that do complex DOM manipulation, run expensive calculations, or make synchronous fetch calls.
- Third-party scripts. Analytics widgets, chat widgets, ad scripts that inject heavy code onto the main thread.
- Long tasks. Any JavaScript execution over 50 milliseconds contributes to poor INP.
Real Fixes You Can Apply Today
- Break up long tasks. Use
setTimeout(fn, 0)orscheduler.postTask()to yield back to the browser between chunks of work. - Debounce input handlers. For scroll, resize, or keystroke handlers that fire rapidly, batch updates using requestAnimationFrame or a debounce utility.
- Load third-party scripts with async or after interaction. Do not let a chat widget block the main thread before the user even interacts with it.
- Use web workers for CPU-heavy calculations (data processing, sorting, filtering) so they never touch the main thread.
Step 4: Fix CLS (Cumulative Layout Shift)
CLS measures visual stability. A layout shift happens when an element moves after the user has already started reading or interacting. It is arguably the easiest of the three metrics to fix once you know where to look.
The Usual Suspects
- Images without dimensions. An image loads and pushes content below it down. Fix: always set
widthandheight, or use CSSaspect-ratio. - Dynamically injected content. Ads, embeds, or widgets that appear above existing content after initial render. Fix: reserve space with a placeholder container of fixed height.
- Fonts causing FOIT/FOUT. A web font swaps in and reflows text. Fix: use
font-display: optionalor preload critical fonts with size adjustments. - Animations that change layout properties. Transitions that animate
width,height, ortop/leftinstead oftransform. Fix: always animatetransformandopacity— they are GPU-composited and do not trigger layout.
width and height to every image on your page typically cuts CLS by 50–80% on most sites. It takes minutes and costs nothing.Step 5: Verify Your Fixes Worked
After applying changes:
- Re-run PageSpeed Insights on the affected URLs. Compare before/after numbers.
- Check Chrome DevTools Performance panel again with the same throttle settings.
- Wait 3–7 days for Google Search Console Core Web Vitals report to update with fresh field data. Lab data and field data can differ, so trust the GSC report as the final source of truth.
- If a metric improved in lab but not in field data, the issue may be device-specific (mobile vs desktop) or network-dependent. Check the GSC breakdown by device category.
When to Call It Good Enough
You do not need perfect scores across every page. Google evaluates CWV at the page level, not the site level. Focus your effort on:
- Your highest-traffic pages (they affect the most users).
- Landing pages with conversion goals (speed directly impacts revenue).
- Pages that already show "Needs Improvement" or "Poor" in Search Console.
Aim for the green threshold on these priority pages first. Once they pass, move to the next batch. Iterative improvement beats perfectionism.
Use Our Free Audit Tool as a Starting Point
Before diving into individual metrics, run a free MintShovels audit on your site. Our tool checks 70+ items including render-blocking resources, image optimization, caching headers, and security basics — many of which are root causes of poor Core Web Vitals. No signup, no email, results in seconds.