Core Web Vitals are the three Google-defined metrics that summarise the user-perceived performance of a web page: Largest Contentful Paint (how fast does the main content show up), Interaction to Next Paint (how fast does the page respond to clicks and taps), and Cumulative Layout Shift (how stable does the page stay while it loads). They are weighted into Google’s Page Experience signal, they show up in Search Console as a per-page status, and a poor score correlates measurably with lost ranking on competitive queries in 2026. This guide covers each metric in depth: what it measures, what specifically moves the number, how to measure correctly in the lab and the field, the optimisations that actually work in 2026, and the regression budgets that protect the gains.
Table of contents
- Why the three numbers matter in 2026
- Lab vs field measurement and which one Google ranks on
- Largest Contentful Paint (LCP) in detail
- Interaction to Next Paint (INP) in detail
- Cumulative Layout Shift (CLS) in detail
- Performance budgets and CI gates
- A weekly Core Web Vitals workflow
- Common mistakes that block progress
- FAQ
Why the three numbers matter in 2026
Google has clarified its messaging over the last three years: Core Web Vitals are a ranking signal, but a relatively weak one compared to relevance, content quality and links. The reason teams still chase the green badge is that the relationship between performance and conversion is much stronger than the relationship between performance and ranking. A page that goes from a 6-second LCP to a 1.8-second LCP usually sees a 20-40 percent uplift in conversion before the SEO impact even shows up. The numbers also matter because they are easy to share with non-technical stakeholders: a single green or red badge in Search Console drives more cross-functional alignment than a flame graph ever will.
The 2026 thresholds for “Good” status are: LCP under 2.5 seconds, INP under 200 milliseconds, CLS under 0.1. All three are measured at the 75th percentile of page loads from real users in the field over a 28-day window. To earn the “Good” status on a URL, all three metrics must be in the green range at p75. One amber metric drops the entire URL to “Needs Improvement”.
Lab vs field measurement and which one Google ranks on
Two flavours of measurement exist and they often disagree. Lab data is what Lighthouse, PageSpeed Insights and DevTools produce: a single synthetic run with controlled network and CPU throttling. Field data is what the Chrome User Experience Report (CrUX) collects from real Chrome users who opted into reporting, aggregated to the 75th percentile of the past 28 days. Google ranks on field data. The lab number is a useful proxy for development iteration, but a green Lighthouse score with red CrUX numbers is the most common reason a team thinks they fixed Core Web Vitals when they actually did not.
The way out of the lab-field disagreement is to instrument the page with the web-vitals JavaScript library and send the metrics to your own analytics. That gives you a per-page distribution before CrUX shows the aggregated number 28 days later, which dramatically shortens the feedback loop:
import {onLCP, onINP, onCLS} from 'web-vitals';
function send(metric) {
navigator.sendBeacon('/perf', JSON.stringify(metric));
}
onLCP(send);
onINP(send);
onCLS(send);
Largest Contentful Paint (LCP) in detail
LCP measures when the largest above-the-fold element finishes rendering. That element is usually the hero image, the main headline block, or a video poster frame. The target is 2.5 seconds at p75. Three sub-components dominate LCP: server response time, render-blocking resources between the HTML response and the LCP paint, and the load time of the LCP element itself if it is an image or video.
Server response time
Time to First Byte (TTFB) sets the floor for LCP. A TTFB of 800 ms means LCP cannot be lower than 800 ms regardless of what happens next. Improvements come from cache hierarchies: edge cache for static pages, application cache for personalised pages, database query cache for the dynamic bits. A CDN with HTML caching for logged-out users is the single highest-leverage move. For logged-in or personalised flows, response streaming via the Streams API lets the browser start parsing HTML before the server has finished generating it.
Render-blocking resources
Every CSS file and synchronous script in the head delays the first paint. The 2026 baseline is critical-CSS inlined (under 20 KB), main stylesheet loaded with media="print" onload trick or rel="preload" as="style", and all scripts loaded with defer or async or moved to the end of body. A page that ships 100 KB of CSS in two blocking files in the head is the most common LCP killer in 2026.
LCP element load
If the LCP element is an image, three things matter: the <img> tag must be in the HTML (not injected by JavaScript, which delays discovery), the image must be served in a modern format (AVIF or WebP), and the fetchpriority="high" attribute should be set on the LCP candidate. The loading="lazy" attribute must not be set on the LCP image — that single mistake adds about 500 ms in 2026 measurements.
Interaction to Next Paint (INP) in detail
INP measures the largest interaction latency observed on the page over its lifetime. An interaction is a click, tap or key press, and the latency is the time from the input event until the next frame paints with the visual result. The target is 200 ms at p75 for “Good”, under 500 ms for “Needs Improvement”. INP replaced First Input Delay in March 2024 because FID only measured the first interaction, which was usually fine even on bloated pages; INP measures the slowest interaction, which exposes the real problem.
The dominant cause of poor INP in 2026 is long JavaScript tasks running on the main thread in response to a user event. The remediation playbook in order of impact:
- Break up long tasks with
scheduler.yield()(Chrome 129+) orawait new Promise(r => setTimeout(r, 0))between expensive chunks. - Move heavy compute to a Web Worker — see our companion guide.
- Defer non-critical event handlers: a click on “Add to cart” should update the visible cart count first, then queue the analytics call.
- Audit third-party scripts: chat widgets, A/B testing libraries and consent management platforms are common INP offenders.
- Profile with the DevTools Performance Insights panel: it now shows INP-specific call stacks since Chrome 124.
The companion piece on INP optimisation in 2026 walks through a real 480 ms to 120 ms reduction case study.
Cumulative Layout Shift (CLS) in detail
CLS measures the sum of unexpected layout shifts the user experiences while the page is open. A score above 0.1 is “Needs Improvement”, above 0.25 is “Poor”. A shift is unexpected when it happens without a user interaction in the previous 500 ms; the metric explicitly excludes shifts that follow a click because those are usually intentional (collapsible content expanding, modal opening). The 2026 calculation uses the “session window” model: shifts within 1 second of each other count as one session, the worst session wins.
The four common CLS sources
- Images and iframes without dimensions. Browsers cannot reserve space for them; when they load, the rest of the page jumps. Always set
widthandheightattributes, or use aspect-ratio CSS for responsive images. - Web fonts that swap layout.
font-display: swapshows the fallback then swaps to the web font, which can shift text size and line breaks. Usefont-display: optionalfor above-the-fold text, or pre-load the web font withrel="preload". - Dynamic content inserted above existing content. A cookie banner that appears 800 ms in pushes everything down. Render it with absolute positioning at the bottom of the viewport, or reserve its space from the initial HTML.
- Animation that uses non-composited properties. Animating
heightortoptriggers layout; animatetransformandopacityinstead.
Performance budgets and CI gates
Without a budget, every team eventually slides back. The minimum viable budget enforces two numbers in CI: JavaScript bundle size under 200 KB compressed per route, and Lighthouse performance score above 90 on the staging build. Tools like bundlewatch, size-limit and Lighthouse CI plug into GitHub Actions and refuse the PR if either threshold is broken. The cost of saying no to the 10 KB feature creep is small compared to the regression debt of saying yes ten times in a row.
The next tier adds field-data alerts: a Slack or PagerDuty alert when the LCP, INP or CLS p75 from your web-vitals instrumentation crosses the green threshold over the previous 24 hours. This catches regressions caused by content changes (a marketing team uploads a 5 MB hero image) that CI cannot see because they happen at runtime.
A weekly Core Web Vitals workflow
The cadence that works in 2026 is: every Monday, pull the CrUX 28-day rolling numbers from Search Console, compare against the previous week, and flag any URL that crossed a threshold in the wrong direction. Every Tuesday, run Lighthouse against the top 20 pages by traffic in staging and confirm the lab numbers match expectations. Friday is the deploy window for performance fixes; performance changes that ship on Monday have a full week to surface regressions before the weekend.
Performance work is iterative, not heroic. A weekly cadence of 1-2 small improvements (defer a script, compress an image, reserve a space) compounds far more reliably than a quarterly two-week “performance sprint” that nobody wants to repeat.
Common mistakes that block progress
- Optimising for Lighthouse instead of CrUX. The lab number can be 95 while the field p75 is in the red — fix what users actually experience.
- Treating LCP as image-only. Server-side rendering, render-blocking CSS and font loading often dominate; the image is the visible artefact, not the cause.
- Adding a third-party tool to fix performance. Every extra script ships more code; the tool sometimes adds more than it saves.
- Skipping field instrumentation. Waiting for CrUX (28 days) to confirm a fix worked is the slowest possible feedback loop. Ship
web-vitalsfirst. - Optimising one metric at a time. Improving LCP by inlining 200 KB of CSS often degrades INP and FCP. The trio is a system; treat it as one.
Need to spot-check your numbers?
Run a single page through our Core Web Vitals 2026 tool to see LCP, INP and CLS measurements with element identification for each metric.
FAQ
How long after a deploy does Search Console reflect the change?
CrUX uses a 28-day rolling window, so a single deploy moves the field number slowly. Expect to see the first visible delta after 7 days for high-traffic pages, full reflection at 28 days. For faster validation, instrument with web-vitals and look at your own analytics within 24 hours.
Do mobile and desktop have different thresholds?
No. The thresholds are the same for mobile and desktop (LCP 2.5s, INP 200ms, CLS 0.1). However, Search Console reports them separately and ranks them separately, so a page can be green on desktop and amber on mobile. Mobile usually drives the urgent fix because it tends to be slower.
My LCP element keeps changing — how do I optimise for it?
LCP is the largest element at the moment of measurement, so different page variants may produce different LCP elements. Use the LCP API to log which element is selected per page load, then group by URL pattern. Optimise the most common LCP element for each pattern; the long tail of “weird LCP” usually accounts for less than 5 percent of measurements.
Should I aim for the perfect score?
No. Aim for the “Good” thresholds at p75 and stop. The marginal cost of going from green to perfect is high and the SEO benefit is essentially zero. Reinvest the engineering time in content or features.
What about INP for input-heavy applications like text editors?
Text editors are a recognised hard case because every keypress is an interaction. The strategy is to make the editor synchronous work tiny (under 16 ms per keypress), batch syntax highlighting and undo-tree updates with requestIdleCallback, and run anything heavier (autosave, collaboration sync) in a Web Worker. Real-time editors like Notion and Linear achieve INP under 100 ms at p75 with that pattern.
Are Core Web Vitals going to change in 2026 or 2027?
Google has hinted at a “Smoothness” metric measuring frame rate during scroll and animation, possibly joining the trio in 2027. Plans are not finalised. The current advice is to optimise for the smoothness already implicitly required to keep INP and CLS in the green; the same patterns help.













