Skip to content
AuditMe
Back to Blog
Core Web VitalsPage SpeedTechnical SEO

Core Web Vitals Explained: How LCP, CLS, and INP Affect Your Rankings

2026-09-2914 min readEduard Tymchenko
Core Web Vitals Explained - Understanding LCP, CLS, and INP for better Google rankings

What Are Core Web Vitals (And Why They Won't Shut Up About Them)

You've heard the term a thousand times by now. Core Web Vitals. CWV. Page experience signals. Your developer won't stop talking about LCP, your SEO consultant keeps mentioning CLS, and your boss forwarded you an email about INP with the subject line "WE NEED TO FIX THIS."

Here's the honest truth — and I'll be blunt about this: Core Web Vitals matter more than most people realize, but less than the hype suggests. They're not a magic ranking lever. They're a baseline. Think of it like this: a site with perfect CWV doesn't automatically rank #1. But a site with terrible CWV is fighting with one arm tied behind its back.

Since 2022, Core Web Vitals have been a direct ranking signal. That hasn't changed in 2026. What has changed is how Google measures them and how much weight they carry relative to other factors. I've spent the last two years fixing these metrics for clients, and I'm going to walk you through everything — what each metric actually measures, what scores you need, and the real-world fixes that actually move the needle.

The Three Metrics That Actually Matter

Google decided that user experience can be boiled down to three measurements. Whether you agree with that simplification or not, these are the metrics that affect your rankings:

1. LCP (Largest Contentful Paint) — Loading performance

2. INP (Interaction to Next Paint) — Interactivity

3. CLS (Cumulative Layout Shift) — Visual stability

There are supporting metrics too — FCP (First Contentful Paint) and TTFB (Time to First Byte) — but these three are the ones Google actually uses for ranking decisions. Let me break each one down.

LCP: Largest Contentful Paint

What It Measures

LCP tells you how long it takes for the largest visible element on your page to render. For most websites, that's either a hero image, a large heading block, or a background video. The clock starts when the user navigates to the page and stops when the largest contentful element finishes painting.

This is your loading metric. It answers the question: "How fast can I see the main thing on this page?"

The Score Thresholds

  • Good: Under 2.5 seconds
  • Needs Improvement: Between 2.5 and 4.0 seconds
  • Poor: Over 4.0 seconds

Here's what this looks like in practice. If a user taps a link to your product page and the main product image takes 5 seconds to appear, they're already gone. According to Google's own research, the probability of bounce increases 32% as LCP goes from 1 second to 3 seconds. At 5 seconds, the bounce probability jumps to 90%. That's not a gradual decline — that's a cliff.

What Affects LCP

From my experience, the biggest LCP killers are, in order of impact:

1. Unoptimized images. This is always number one. I've never audited a site with a bad LCP score where images weren't the primary issue. Serving a 4000px hero image to mobile users, using JPEG when WebP cuts file size by 40-80%, or missing the loading="eager" attribute on your LCP element — these are the low-hanging fruit.

2. Render-blocking resources. CSS and JavaScript files that load in your without defer or async attributes block the browser from rendering content. Every render-blocking resource adds milliseconds. I recently found a client loading three CSS files for a slider that only appeared on the homepage — those files were blocking rendering on every page.

3. Slow server response time (TTFB). If your server takes 2 seconds to send the first byte of HTML, everything else is delayed by 2 seconds. web.dev recommends TTFB under 800ms. Use a CDN, enable server-side caching, or upgrade your hosting.

4. Web fonts. Custom fonts can block text rendering until they load. Using font-display: swap tells the browser to show fallback text immediately, then swap to the custom font once it's ready. It's not pretty, but it's fast.

5. Client-side rendering. If your page depends on JavaScript to render content, Googlebot has to execute that JavaScript before it can measure LCP. Server-side rendering (SSR) or static site generation (SSG) eliminates this problem entirely.

How to Fix LCP

Here's my actual workflow when LCP is the problem:

First, I run the page through Google PageSpeed Insights and check both the lab data and the field data (more on that distinction later). The lab test shows me what Lighthouse thinks is slow. The field data — pulled from the Chrome User Experience Report (CrUX) — shows me what real users actually experience.

Then I open Chrome DevTools → Network tab and look at the waterfall. What's the biggest file? What's blocking the LCP element? Usually the answer is obvious.

For a client last quarter, their LCP was 4.8 seconds on mobile. The hero image was 2.1MB in JPEG format, served at full resolution to every device. We converted it to WebP (420KB), added srcset for responsive sizing, and preloaded it with . LCP dropped to 1.4 seconds. One change. Three hours of work.

If you want a complete breakdown of LCP optimization techniques, our core web vitals checker shows you exactly which resources are blocking your LCP element and what to change.

CLS: Cumulative Layout Shift

What It Measures

CLS measures visual stability — how much the layout of your page shifts after it starts loading. You know that moment when you're about to click a button and an ad loads above it, pushing everything down? That's CLS. And users absolutely hate it.

Google measures CLS by looking at "layout shifts" that occur during the entire lifespan of the page. A layout shift happens when an element changes position from one rendered frame to the next. Not all shifts count — only "unexpected" shifts that the user didn't trigger. Clicking a button that opens a dropdown is expected. An image loading and pushing text down is unexpected.

The Score Thresholds

  • Good: Under 0.1
  • Needs Improvement: Between 0.1 and 0.25
  • Poor: Over 0.25

A CLS score of 0.1 means that, on average, 10% of the viewport shifts during the page's lifetime. That sounds small, but imagine 10% of your screen jumping around while you're trying to read. It's disorienting.

The biggest CLS disaster I ever saw was a news site with 14 ad units loading asynchronously. The page would shift three or four times before settling. Their CLS was 0.45. We got it to 0.03 by reserving space for ads before they loaded.

What Causes CLS

1. Images and videos without dimensions. If you don't tell the browser how big an element will be, it has to guess. When the real content loads, everything shifts. Always set explicit width and height attributes on images and videos.

2. Dynamically injected content. Ads, banners, cookie notices, and chat widgets that appear after the initial page load and push content around are CLS culprits. Pre-allocate space for them using CSS.

3. Late-loading web fonts. When a custom font loads, it might be a different size than the fallback font, causing text to reflow. Using font-display: swap helps with performance but can increase CLS because the text reflows when the font swaps. A better approach: match your fallback font metrics using CSS size-adjust and font-display: optional for non-critical fonts.

4. Dynamic form inputs. Forms that expand as users type, or autocomplete dropdowns that push content down, contribute to CLS. Reserve space for expected input states.

5. Embedded content without reserved space. YouTube videos, tweets, and other embeds that load after the page creates layout shifts. Wrap them in a container with aspect-ratio: 16 / 9 and set explicit dimensions.

How to Fix CLS

CLS is usually the easiest of the three metrics to fix once you identify the source. Here's my approach:

I use Chrome DevTools → Performance panel and look for the "Layout Shift" entries in the timing track. Each one shows you exactly which element shifted and why. Then I fix the source.

For images, I add explicit dimensions or use the CSS aspect-ratio property:

.product-image {
  aspect-ratio: 1 / 1;
  width: 100%;
}

For ads and dynamic content, I use placeholder containers with fixed dimensions. The space stays reserved even when the ad hasn't loaded yet. When the ad loads, it fills the space without shifting anything.

For font-related CLS, I preload critical fonts and use font-display: optional for headings where the visual difference between fallback and custom fonts is minimal. For body text, font-display: swap is fine because the text is smaller and the reflow is less noticeable.

Our core web vitals checker identifies CLS issues and shows you which elements are shifting and by how much. It's the fastest way to find the problem without manually inspecting every element.

INP: Interaction to Next Paint

What It Measures

INP replaced First Input Delay (FID) in March 2024, and it's a fundamentally different beast. FID measured how quickly your page responded to the first interaction only. INP measures how quickly your page responds to every interaction throughout the session — clicks, taps, key presses, everything. Then it takes the worst case (the 98th percentile) as your score.

This is your interactivity metric. It answers the question: "When I tap something, does the page respond immediately or does it lag?"

The Score Thresholds

  • Good: Under 200 milliseconds
  • Needs Improvement: Between 200 and 500 milliseconds
  • Poor: Over 500 milliseconds

The 98th percentile measurement is important. Your average interaction might be fast, but if one interaction takes 800ms — say, clicking a "Buy Now" button that triggers a complex calculation — that's your INP score. One slow handler ruins everything.

What Causes Poor INP

1. Long JavaScript tasks. The browser's main thread can only do one thing at a time. If a JavaScript task takes longer than 50ms, it blocks everything — scrolling, clicking, rendering. Users feel it as jank.

2. Heavy third-party scripts. Analytics tools, chat widgets, A/B testing libraries, social media embeds — they all run JavaScript on the main thread. I've found that 60-80% of INP issues on SaaS sites come from third-party scripts the site owner didn't even write.

3. Inefficient event handlers. Every click, scroll, and keypress triggers event handlers. If those handlers do too much work — DOM manipulation, calculations, network requests — the page feels sluggish.

4. Large DOM size. A page with thousands of DOM nodes takes longer for the browser to process. Event handlers that traverse the DOM become slower as the DOM grows.

5. Excessive layout and paint operations. Reading layout properties (like offsetHeight) forces the browser to perform a synchronous layout calculation. Doing this repeatedly in event handlers tanks INP.

How to Fix INP

INP is the hardest metric to fix because the problem is often buried in JavaScript code you didn't write. Here's my approach:

First, I use Chrome DevTools → Performance panel and record a session while interacting with the page. I click buttons, scroll, type in forms. The performance recording shows me exactly which interactions are slow and what JavaScript is blocking the main thread.

Then I look at the long tasks — any task over 50ms is a candidate for optimization. I break them into smaller chunks using requestIdleCallback or setTimeout. I defer non-critical work until the browser is idle.

For third-party scripts, I audit which ones actually matter. Does the chat widget need to load on page load, or can it wait until the user clicks the chat icon? Does the analytics script need to run on every page, or just the ones you're tracking? Eliminating or deferring unnecessary scripts is the fastest INP improvement.

A client last month had an INP of 480ms. Their product page loaded a price calculator that computed tax for 12 different regions on page load — nobody was interacting with it at that point. We wrapped it in requestIdleCallback and deferred it until the browser was idle. INP dropped to 95ms.

For the complete INP optimization workflow, our core web vitals checker identifies long tasks and shows you which JavaScript is blocking the main thread.

Field Data vs. Lab Data: Why They're Different (And Which One Matters)

This is one of the most misunderstood aspects of Core Web Vitals, and it trips up even experienced SEOs.

Lab Data

Lab data comes from a controlled test environment — usually Lighthouse running on a simulated device with a throttled network connection. Google PageSpeed Insights uses Lighthouse for its lab data. The conditions are consistent: same device, same network speed, same location every time.

Lab data is useful for diagnosing problems. It tells you what's technically slow on your page under controlled conditions. But it doesn't reflect what your real users experience.

Field Data

Field data comes from real users, collected through the Chrome User Experience Report (CrUX). It reflects actual conditions — different devices, different network speeds, different locations, different usage patterns. This is the data Google uses for ranking.

The gap between lab and field data can be enormous. I checked a client's site last quarter: lab score was 92 (Lighthouse), but their CrUX data showed an LCP of 4.2 seconds. Why? Their CDN was serving images from the US to users in Asia. The Lighthouse test ran from a US-based server, so it didn't see the problem. Real users in Tokyo were waiting 4+ seconds for images to load. We switched to a global CDN and field data LCP dropped to 1.8 seconds.

Why This Matters for Rankings

Google uses field data for ranking decisions, not lab data. A perfect Lighthouse score with terrible CrUX data won't help you. I've seen sites with PageSpeed scores of 98 that have failing Core Web Vitals in the field, and sites with scores of 65 that pass all three metrics because their real users are on fast connections with powerful devices.

My advice: use lab data to identify and fix problems, but measure success by field data. Check CrUX monthly. If your field data shows "good" for all three metrics, you're fine — regardless of what Lighthouse says.

How Core Web Vitals Affect Rankings

Let me be clear about what CWV does and doesn't do:

What it does: CWV is a tiebreaker. When two pages have similar content quality, backlinks, and relevance, the page with better Core Web Vitals wins. Google has confirmed this explicitly.

What it doesn't do: CWV can't overcome bad content, weak backlinks, or poor relevance. I've seen sites with perfect CWV scores stuck on page 3 because their content was thin and their backlink profile was weak.

The practical impact depends on your niche. In competitive spaces where everyone has decent content and similar backlink profiles, CWV can be the difference between position 3 and position 8. In less competitive niches, it matters less because other factors dominate.

Here's what I've observed across 200+ client sites:

  • Sites that moved from "poor" to "good" CWV saw an average 5-15% increase in organic traffic within 3 months
  • Sites that were already "good" and optimized further saw minimal ranking changes
  • The impact was most noticeable for mobile searches, where performance constraints are tighter

The lesson: fix CWV if you're failing. If you're already passing, focus your time on content and backlinks instead.

Measuring Core Web Vitals: The Tools That Actually Work

You can't fix what you can't measure. Here are the tools I use daily, in order of importance:

1. Google Search Console → Core Web Vitals report. This is your starting point. It shows field data (CrUX) for every URL on your site, grouped by metric. It tells you which pages are failing and by how much. Check this weekly.

2. PageSpeed Insights. Combines lab data (Lighthouse) with field data (CrUX) in one report. Paste any URL and get both perspectives. The field data section is what matters for rankings. The lab data section is what matters for diagnosis.

3. Chrome DevTools → Performance panel. For deep-diving into specific interactions and identifying long tasks. This is where you find the JavaScript that's killing your INP.

4. WebPageTest. More detailed than PageSpeed Insights, with waterfall charts, filmstrip views, and the ability to test from different locations and devices. Use this when you need to understand exactly what's happening during page load.

5. AuditMe's Core Web Vitals checker. Combines automated analysis with specific fix recommendations. It doesn't just tell you what's broken — it tells you exactly what to change and in what order. Our core web vitals checker runs all five metrics and prioritizes fixes by impact.

Quick Wins: What to Fix First

If you're failing all three metrics, here's the order I recommend:

First: Fix images. This is always the highest-impact change for the least effort. Convert to WebP, add explicit dimensions, use srcset, and preload your LCP image. This fixes LCP and CLS simultaneously.

Second: Remove unused JavaScript. Open Chrome DevTools → Coverage tab. You'll probably find 60-80% of your JavaScript is never executed. Remove it or defer it. This fixes INP.

Third: Enable caching and use a CDN. If you're not using a CDN in 2026, you're leaving performance on the table. This fixes LCP and TTFB.

Fourth: Fix layout stability. Set dimensions on everything, reserve space for dynamic content. This fixes CLS.

Fifth: Optimize fonts. Subset, preload, and use font-display strategically. This fixes LCP and CLS.

If you only do one thing, fix your images. Image optimization alone can improve LCP by 2+ seconds on image-heavy sites. I've never worked on a site where image optimization didn't make a meaningful difference.

Common Mistakes I See in Every Audit

After checking 200+ sites, these are the CWV mistakes I see over and over:

Lazy-loading the LCP image. The most common LCP mistake. If you loading="lazy" your hero image, the browser waits to fetch it until the user scrolls near it. Your LCP image should load immediately — only lazy-load images below the fold.

Optimizing for Lighthouse instead of CrUX. Chasing a perfect Lighthouse score while your field data shows failing metrics is wasted effort. Fix the field data first.

Ignoring third-party scripts for INP. Most INP issues aren't from your code — they're from analytics, chat widgets, and A/B testing tools. Audit your third-party scripts quarterly.

Not setting dimensions on images and embeds. I still see production sites with images missing width and height attributes. This is a five-minute fix that eliminates a major CLS source.

Server-side rendering without caching. SSR without caching means every request hits the server. Enable page caching and use a CDN for SSR content.

The Bottom Line

Core Web Vitals aren't optional anymore. They're the baseline for a competitive website. But they're not everything — they're one piece of a larger SEO strategy that includes content quality, backlinks, technical SEO, and user experience.

Focus on getting all three metrics to "good" first. Then stop optimizing and focus on the stuff that actually differentiates your site: better content, stronger backlinks, and a better user experience. The diminishing returns on CWV optimization kick in fast once you're in the "good" range.

If you're not sure where you stand, test your Core Web Vitals for free. It takes 60 seconds and tells you exactly what needs fixing. No signup required — just paste your URL and see where you land.

FAQ

What is a good Core Web Vitals score?

For all three metrics, the thresholds are: LCP under 2.5 seconds, INP under 200 milliseconds, and CLS under 0.1. If all three pass, your site is considered "good" for page experience. These thresholds apply to both mobile and desktop, though achieving them on mobile is harder due to slower networks and less powerful devices. Google uses field data from real users (CrUX), not lab data, for ranking decisions.

Do Core Web Vitals affect my Google rankings?

Yes, but with nuance. Core Web Vitals are a direct ranking signal since 2022. They act as a tiebreaker — when two pages have similar content quality and backlink profiles, the page with better CWV wins. However, CWV cannot overcome poor content or weak backlinks. Sites that improved from "poor" to "good" CWV saw an average 5-15% increase in organic traffic within three months. The impact is most noticeable in competitive niches where content quality is similar across competitors.

Why is my Lighthouse score high but my Core Web Vitals failing?

This is the field data vs. lab data problem. Lighthouse runs in a controlled lab environment with simulated conditions. Real users (field data) experience different devices, network speeds, and locations. A common scenario: your CDN serves images quickly from US servers, but users in Asia wait much longer. Google ranks based on field data from CrUX, not your lab score. Always measure success by field data and use lab data only for diagnosis.

How do I fix a high CLS score?

The most common CLS causes are images and videos without explicit dimensions, dynamically injected content like ads and banners, and late-loading web fonts. Fix images by adding width and height attributes or using the CSS aspect-ratio property. For ads and dynamic content, pre-allocate space with placeholder containers. For fonts, use font-display: optional for non-critical text and match fallback font metrics using CSS size-adjust. Use Chrome DevTools Performance panel to identify exactly which elements are shifting.

What is the difference between INP and the old FID metric?

FID (First Input Delay) measured only the time between a user's first interaction and the browser's response. INP (Interaction to Next Paint) measures the response time for every interaction throughout the page session — clicks, taps, key presses — then reports the worst case (98th percentile) as the score. This means a single slow interaction can tank your INP even if most interactions are fast. INP replaced FID in March 2024 and gives a more complete picture of real-world interactivity.

How often should I check my Core Web Vitals?

Check your Core Web Vitals report in Google Search Console weekly for the first month after any optimization work, then monthly going forward. Use PageSpeed Insights for on-demand testing of specific pages after changes. Monitor field data trends quarterly to catch regressions early. If you launch a new feature or redesign, test Core Web Vitals immediately — third-party scripts and new components are common causes of sudden CWV degradation.

Eduard Tymchenko - SEO Expert & Founder of AuditMe

Eduard Tymchenko

SEO Expert & Founder of AuditMe

Seasoned SEO & SMM expert with 10+ years of experience. Built AuditMe to help businesses improve their search rankings through data-driven, results-oriented SEO strategies. Specializes in technical SEO, Core Web Vitals, and WordPress optimization.

Run Your Free SEO Audit

Get a complete SEO analysis of any URL in 60 seconds. No signup required.

Analyze Your Site Free