Core Web Vitals: How to Fix LCP, CLS, and INP Issues on Your Website

2026-05-28 · Abby SEO

If your website feels slow or janky to visitors, Google notices — and so does your ranking. Core Web Vitals are Google's way of measuring real-world user experience, and poor scores can quietly drag down your organic traffic even when your content is solid. The good news? Learning how to fix Core Web Vitals doesn't require a computer science degree. This guide breaks down the three metrics that matter most — LCP, CLS, and INP — and gives you practical steps to improve each one, starting today.


What Are Core Web Vitals (and Why Should You Care)?

Core Web Vitals are three specific performance signals that Google uses as ranking factors:

  • LCP (Largest Contentful Paint) — How fast your main content loads
  • CLS (Cumulative Layout Shift) — How stable your page looks as it loads
  • INP (Interaction to Next Paint) — How quickly your page responds when someone clicks or taps

Google's target thresholds are:
- LCP: under 2.5 seconds
- CLS: under 0.1
- INP: under 200 milliseconds

Missing these benchmarks doesn't just hurt user experience — it directly affects where you show up in search results. If you're trying to figure out how to fix Core Web Vitals, the first step is knowing which metric is causing the problem.

Quick check: Open PageSpeed Insights and paste your URL. You'll see a score and a breakdown of which vitals need attention.


Fixing LCP: Make Your Page Load Faster

LCP measures how long it takes for the largest visible element on screen to load — usually a hero image, banner, or large heading. A slow LCP is often the biggest culprit behind poor Core Web Vitals scores.

Step 1: Optimize Your Hero Image

Large, uncompressed images are the #1 LCP killer. Here's what to do:

  • Convert images to WebP format (smaller file size, same quality)
  • Set explicit width and height attributes on your <img> tags
  • Add fetchpriority="high" to your hero image so the browser loads it first
<img
  src="hero-image.webp"
  width="1200"
  height="600"
  fetchpriority="high"
  alt="Your descriptive alt text here"
/>

Step 2: Enable Lazy Loading — But Not on Your Hero Image

Lazy loading is great for images below the fold, but if it's accidentally applied to your hero image, it will tank your LCP.

<!-- ✅ Correct: lazy load images lower on the page -->
<img src="team-photo.webp" loading="lazy" alt="Our team" />

<!-- ❌ Wrong: never lazy-load your hero -->
<img src="hero-image.webp" loading="lazy" alt="Hero" />

Step 3: Use a CDN and Enable Caching

If your hosting is slow, even a perfect image won't load fast enough. Consider:
- Switching to a CDN (Cloudflare has a free plan)
- Enabling browser caching through your .htaccess file or a plugin like WP Rocket (for WordPress users)


Fixing CLS: Stop Your Page From Jumping Around

CLS measures unexpected layout shifts — those annoying moments when text moves right as you're about to click it, or an ad pops in and pushes content down. This is a major frustration for mobile users.

Step 1: Always Set Image Dimensions

When a browser doesn't know how big an image is before it loads, it can't reserve space for it. This causes everything to shift when the image appears.

<!-- Always include width and height -->
<img src="product.webp" width="400" height="300" alt="Product name" />

If you're using responsive images with CSS, use the aspect-ratio property instead:

img {
  width: 100%;
  height: auto;
  aspect-ratio: 4 / 3;
}

Step 2: Reserve Space for Ads and Embeds

If you run display ads or embed third-party content (YouTube videos, social media widgets), reserve their space in your layout before they load.

.ad-container {
  min-height: 250px; /* Reserve space for a standard ad unit */
  width: 300px;
}

Step 3: Avoid Injecting Content Above the Fold

Cookie banners, notification bars, and popups that appear after the page loads are common CLS culprits. Either:
- Load them before the page renders
- Use position: fixed so they don't push other content around


Fixing INP: Make Your Page Feel Responsive

INP replaced the old FID metric in 2024 and measures how quickly your page reacts after a user interaction — a click, tap, or keypress. A sluggish INP often comes from too much JavaScript blocking the main thread.

Step 1: Defer Non-Critical JavaScript

If JavaScript doesn't need to run on page load, tell the browser to wait.

<!-- Load third-party scripts after the page is interactive -->
<script src="analytics.js" defer></script>
<script src="chat-widget.js" defer></script>

Step 2: Audit and Remove Unused Plugins

If you're on WordPress, each plugin adds JavaScript. Run a PageSpeed audit and look at the "Reduce unused JavaScript" recommendation — you might be surprised how much dead weight you're carrying.

Step 3: Break Up Long Tasks

If you have custom JavaScript functions that run on click events, make sure they're not doing too much work at once. Use setTimeout to break heavy tasks into smaller chunks so the browser can respond to user input in between.

// Instead of one blocking function, break work into chunks
function processLargeData(items) {
  let index = 0;
  function processChunk() {
    const end = Math.min(index + 50, items.length);
    for (; index < end; index++) {
      // process item
    }
    if (index < items.length) {
      setTimeout(processChunk, 0); // yield to the browser
    }
  }
  processChunk();
}

A Simple Audit Checklist

Before you dive into fixes, run through this quick checklist to prioritize your work:

  • [ ] Run PageSpeed Insights on your homepage, a blog post, and a product/service page
  • [ ] Note which of the three vitals is failing
  • [ ] Check if your hero image has fetchpriority="high" and is in WebP format
  • [ ] Confirm all images have explicit width and height attributes
  • [ ] Look for third-party scripts that could be deferred
  • [ ] Test on mobile — CLS and INP issues are often worse on phones

You Don't Have to Figure This Out Alone

Knowing how to fix Core Web Vitals is half the battle — the other half is knowing which specific issues exist on your site and fixing them in the right order. Every website is different, and the problems on a WordPress blog look very different from those on a Shopify store or a custom-built site.

The fastest way to get clarity? Run a free SEO scan at abbyseo.com and see exactly where your site stands. For just $8.99, you'll get a personalized remediation guide that tells you exactly what to fix and how — no guesswork, no wasted hours. Let Abby sniff out the issues so you can spend your time growing your business.

Share X LinkedIn Copy link

Related articles

Ready to fix your SEO?

Run a free SEO audit and get a platform-specific remediation guide for $8.99.

Scan your site free

See a sample fix · View pricing · Compare SEO tools

Free SEO tools

Try our free tools: SEO checker to grade your pages, free website audit for a full technical crawl, and keyword research to find search volume for your keywords.