Core Web Vitals are Google's metrics for page experience. They're a ranking signal, and they measure what users actually care about: how fast content appears, how stable the layout is, and how responsive the page feels to interaction.
The three metrics
LCP — Largest Contentful Paint
How long until the largest visible element (usually a hero image or heading) renders. Target: under 2.5 seconds on mobile. Fix: optimize images (AVIF/WebP, priority on above-fold), reduce server response time, eliminate render-blocking scripts.
CLS — Cumulative Layout Shift
How much the page layout shifts as it loads. Target: under 0.1. Fix: set explicit dimensions on images and embeds, use font display: swap, reserve space for dynamic content (ads, carousels, lazy-loaded components).
INP — Interaction to Next Paint
How long between a user interaction (click, tap, key press) and the visual response. Target: under 200ms. Fix: avoid long JavaScript tasks on the main thread, defer non-critical scripts, use React concurrent features.
Common fixes in Next.js
- Images: use next/image with priority on the hero image. Set formats to AVIF/WebP in next.config.
- Fonts: load via next/font/google with display: swap. This prevents font-swap CLS.
- Scripts: load GTM and third-party scripts with strategy="lazyOnload" — never beforeInteractive.
- DNS: add dns-prefetch and preconnect for external domains (image CDNs, analytics).
- Static generation: use SSG for marketing pages. Static HTML from a CDN is the fastest possible LCP.
How to measure
- Lab data: PageSpeed Insights, Chrome DevTools Lighthouse panel.
- Field data: Chrome UX Report (CrUX), Google Search Console Core Web Vitals report.
- Continuous monitoring: Vercel Analytics, Sentry Performance, or web-vitals npm package reporting to your analytics.