Overview

Core Web Vitals are three field-measured metrics: LCP, INP, and CLS. Pass them at the 75th percentile of real page loads, not on a lab run. Google says they align with what its core ranking systems seek to reward; they are one input among many, and relevance still wins. For TTFB, FCP, fonts, and render-blocking resources, see page-speed; for the fix loop, see optimize-core-web-vitals.

Hit the “good” threshold on all three metrics

MetricGoodNeeds improvementPoor
LCP (Largest Contentful Paint)2.5 s or lessup to 4.0 sover 4.0 s
INP (Interaction to Next Paint)200 ms or lessup to 500 msover 500 ms
CLS (Cumulative Layout Shift)0.1 or lessup to 0.25over 0.25

INP replaced FID as a Core Web Vital in March 2024. A page passes when all three are good at the 75th percentile; field data from CrUX covers a trailing 28-day window.

Fix LCP at the hero element

LCP is almost always the hero image, the H1, or a video poster. Make that one element arrive early.

  • Preload it with <link rel="preload" as="image" href="/hero.avif" fetchpriority="high"> and set fetchpriority="high" on the <img>. Never lazy-load it.
  • Serve AVIF or WebP through <picture> with a fallback. See image-seo.
  • Render the hero in HTML, not in a client-only React tree. See javascript-seo.
  • Cut TTFB with a CDN such as cloudflare; LCP cannot beat it. Font fixes are in page-speed.

Fix INP by breaking up long tasks

INP reports roughly the worst interaction on the page across the whole visit, not just the first.

  • Split tasks over 50 ms with scheduler.yield() where supported, falling back to setTimeout(fn, 0).
  • Load third-party scripts with async or defer, or gate them behind interaction.
  • Apply content-visibility: auto to off-screen sections so the browser skips their layout. See css.
  • Avoid hydrating the whole page on load; islands and server components cut the work.

Fix CLS by reserving space

  • Give every <img> and <iframe> width and height attributes, or a CSS aspect-ratio.
  • Reserve a fixed-height container for ads and embeds; a late-inserted ad slot is the most common CLS source.
  • Animate transform and opacity only. Animating top, left, width, or height shifts neighbors.
  • Match fallback font metrics with size-adjust, ascent-override, and descent-override.

Measure field data first, lab data second

Lab tools (Lighthouse, WebPageTest) drive the fix loop; field data is what counts.

  • Field sources: CrUX, surfaced in PageSpeed Insights, the Search Console Core Web Vitals report, and the CrUX API.
  • Ship the web-vitals library to your analytics for near-real-time numbers.
  • Read the 75th percentile, not the average. A 1.8 s median LCP can still fail at p75.