Technical pillar / check core-web-vitals

Core Web Vitals (LCP, INP, CLS)

LCP under 2.5 seconds, INP under 200 milliseconds, and CLS under 0.1, Google's public thresholds at the 75th percentile of real-user traffic. We report both CrUX real-user field data and Lighthouse lab data, clearly separated, and only the real-user field data affects the score.

By Shimon Carroll, Founder, SEO for AI Agents · Last updated

What this check measures

Two clearly separated kinds of data. FIELD data comes from the Chrome User Experience Report (CrUX) at the 75th percentile of real users: Largest Contentful Paint (perceived load), Interaction to Next Paint (perceived responsiveness, replaced FID in March 2024), and Cumulative Layout Shift (visual stability). This is what real visitors actually experienced, and it is the data Google ranks on. LAB data comes from Lighthouse: a single controlled run in a simulated environment, reported separately and clearly labeled as lab. We surface both side by side so you can see the real-user picture and the lab diagnostic without confusing them. The score is based on FIELD data only; lab data is shown for diagnosis and never affects the score.

Why it matters

Core Web Vitals are a documented Google ranking factor (since the May 2021 page-experience update, with INP replacing FID in March 2024). Beyond ranking, the three metrics correlate strongly with conversion: every additional second of LCP measurably increases bounce rate, every INP regression past 200ms measurably reduces form-completion rate. For high-intent verticals (MCA, lawyers, doctors, real estate) where the click is expensive (paid or organic), CWV is the lowest-effort highest-ROI technical lever.

How we score it

We compare your real-user field metrics against Google's public thresholds at the 75th percentile: LCP at or under 2500ms, INP at or under 200ms, and CLS at or under 0.1. Those are Google's own documented Core Web Vitals thresholds, not ours. Whether the result affects your score depends entirely on what real-user data exists, and the rule is honest by construction: when CrUX has field data for the specific URL, the result is high confidence and affects the score; when CrUX has field data only at the origin level (the URL itself lacks coverage), the result is medium confidence and still affects the score, because it is still real-user evidence; when there is no field data at all and we have only Lighthouse lab data, the result is low confidence, reported as informational, and does NOT affect the score. A single controlled lab run is a useful diagnostic, but it is not real-user evidence, so we never penalize a site on lab data alone.

Confidence-flag rules

Confidence tracks where the real-user data came from, not how good the numbers look. URL-level CrUX field data means high confidence and the finding affects the score. Origin-level field data only (the page itself has too little traffic for its own CrUX record, so we fall back to the site-wide origin numbers) means medium confidence, and it still affects the score because it is still real-user evidence. No field data at all, with only Lighthouse lab data available, means low confidence: the finding is informational, surfaces the lab numbers for diagnosis, and does not affect the score. This is deliberate. Lab data is one controlled run in a simulated environment, not what your real visitors experienced, so it never docks your score on its own.

Common mistakes

  • Optimizing for Lighthouse lab scores while ignoring CrUX field data; the two often disagree, and Google ranks on field data.
  • Treating LCP as an image-only metric; LCP can also be a text element, a video poster, or a background image (per the Web Performance Working Group spec).
  • Ignoring INP for the first six months after the FID-to-INP migration; many sites that passed FID fail INP because long input-handlers were tolerated by FID but not INP.
  • Setting an aspect-ratio on the image element but not on the wrapping container, leaving CLS unfixed.

How to fix it

For LCP: pre-load the hero image, use next/image with priority, ensure the LCP element is server-rendered. For INP: shorten input handlers, defer non-critical hydration, prefer CSS transitions over JavaScript animations. For CLS: declare width and height on images, reserve space for ads, avoid injecting content above existing content. Verify with the Chrome User Experience Report dashboard or PageSpeed Insights.

Primary sources

Changelog

  • · Initial publication. INP replaced FID as a Core Web Vital on March 12, 2024 (Google Search Central announcement).
  • · Now reports both CrUX real-user FIELD data and Lighthouse LAB data, clearly separated, and tightens the confidence rule: only real-user field data affects the score; lab-only data is informational and does not penalize.