Core Web Vitals
Core Web Vitals are Google's standardized metrics for measuring real-world page experience — specifically how fast a page loads, how quickly it responds to input, and how visually stable it is as it loads. They matter for two reasons: they're a (modest) ranking signal, and, more importantly, they directly reflect the user experience that drives bounce rate, engagement, and conversion. A page that loads slowly, jumps around, or lags when tapped frustrates users regardless of how good its content is.
There are three vitals, each capturing a distinct facet of experience: LCP (loading), INP (interactivity), and CLS (visual stability). They're measured from real users (field data), not just lab tests, and each has a clear "good" threshold. For engineers, they translate the vague goal of "make the site feel fast" into concrete, measurable targets — and most fixes connect directly to web performance work.
TL;DR
- Three user-centric metrics: LCP (loading), INP (interactivity), CLS (visual stability).
- "Good" targets: LCP < 2.5s, INP < 200ms, CLS < 0.1.
- They're a ranking signal and reflect real UX (bounce, conversion).
- Measured from real users (field data) — optimize for the 75th percentile.
Quick Example
The three vitals and their "good" thresholds (at the 75th percentile):
The Three Vitals
LCP — Largest Contentful Paint (loading)
Measures when the largest visible element (usually the hero image or main heading) finishes rendering — a proxy for "when does the page look loaded?" Good: < 2.5s. Poor LCP usually comes from slow servers, render-blocking resources, large unoptimized images, or slow-loading fonts.
INP — Interaction to Next Paint (interactivity)
Measures the responsiveness to user interactions — the delay between a tap/click and the page visibly responding, across the whole visit. (It replaced First Input Delay in 2024.) Good: < 200ms. Poor INP comes from heavy JavaScript blocking the main thread when users interact.
CLS — Cumulative Layout Shift (visual stability)
Measures unexpected layout shifts — content jumping around as the page loads (the classic "I tapped the button but an ad loaded and I tapped the wrong thing"). Good: < 0.1. Caused by images/ads without reserved space, late-injected content, and fonts that reflow text.
How They're Measured
- Field data (real users) — the official scores Google uses, gathered from real Chrome users (CrUX). Optimize for the 75th percentile (most users have a good experience).
- Lab data — synthetic tests (Lighthouse, PageSpeed Insights) for debugging; useful but not the official measurement.
- Tools — PageSpeed Insights, Search Console's Core Web Vitals report, and the web-vitals JS library for your own monitoring.
Improving Each Vital
These overlap heavily with general web performance — fast, lean pages tend to score well across all three.
Best Practices
- Optimize for the 75th-percentile field data — that's what Google scores, and it reflects real users.
- Fix LCP by optimizing the hero element and removing render-blocking resources.
- Fix INP by reducing and breaking up main-thread JavaScript.
- Fix CLS by reserving space for images, ads, and embeds (set dimensions).
- Monitor continuously — Search Console + real-user monitoring catch regressions.
Common Mistakes
Optimizing only lab scores, ignoring field data
Images and ads with no reserved space (CLS)
FAQ
What are the three Core Web Vitals and their thresholds?
LCP (Largest Contentful Paint) measures loading — when the largest visible element renders; "good" is under 2.5 seconds. INP (Interaction to Next Paint) measures responsiveness — the delay between user interactions and the page responding; "good" is under 200 milliseconds (it replaced First Input Delay in 2024). CLS (Cumulative Layout Shift) measures visual stability — how much content unexpectedly jumps as the page loads; "good" is under 0.1. Each is assessed at the 75th percentile of real users, and a page needs all three in the "good" range to pass.
Do Core Web Vitals actually affect SEO rankings?
Yes, but modestly. They're a confirmed ranking signal as part of Google's page-experience signals, but they're a relatively minor factor compared to relevance and content quality — a fast page with poor content won't outrank a slow page with great content. Their bigger value is in user experience: poor vitals increase bounce rate and hurt conversion regardless of rankings. So treat them as both a small ranking benefit and, more importantly, a direct measure of the experience that affects engagement and revenue. Good vitals are worth pursuing for users first, SEO second.
What's the difference between field data and lab data?
Field data (real-user monitoring, from the Chrome User Experience Report) measures actual visitors' experiences across their real devices and networks — this is what Google uses to assess your Core Web Vitals. Lab data (synthetic tests like Lighthouse) measures a single simulated load in a controlled environment, useful for debugging and reproducing issues but not the official score. The two often diverge because your test machine is faster than many real users' devices. Always validate against field data (Search Console's Core Web Vitals report) — optimizing only lab scores can leave real users with poor experiences.
How do I fix a poor INP score?
INP measures responsiveness, and poor scores almost always trace to JavaScript blocking the main thread when users interact. Fix it by reducing the amount of JavaScript you ship, breaking up long tasks into smaller chunks (so the browser can respond to input between them), deferring or lazy-loading non-critical scripts, and minimizing expensive work in event handlers. Avoid heavy synchronous computation on interaction. Because INP samples the worst interactions across a visit, also look for specific slow interactions (a heavy filter, an expensive re-render) and optimize those. It's fundamentally a main-thread-work problem.
Related Topics
- Web Performance — The broader performance discipline
- Structured Data & Schema — Other search signals
- Crawlability & Indexing — Getting indexed first
- Performance Optimization — General optimization
- SEO for SPAs — Vitals in JavaScript apps