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
| Metric | Good | Needs improvement | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | 2.5 s or less | up to 4.0 s | over 4.0 s |
| INP (Interaction to Next Paint) | 200 ms or less | up to 500 ms | over 500 ms |
| CLS (Cumulative Layout Shift) | 0.1 or less | up to 0.25 | over 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 setfetchpriority="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 tosetTimeout(fn, 0). - Load third-party scripts with
asyncordefer, or gate them behind interaction. - Apply
content-visibility: autoto 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>widthandheightattributes, or a CSSaspect-ratio. - Reserve a fixed-height container for ads and embeds; a late-inserted ad slot is the most common CLS source.
- Animate
transformandopacityonly. Animatingtop,left,width, orheightshifts neighbors. - Match fallback font metrics with
size-adjust,ascent-override, anddescent-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-vitalslibrary 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.