Google's ranking signals keep evolving. Here's exactly what you need to optimise for INP, LCP, and CLS in 2025 — with real code examples.

The 2025 Core Web Vitals Landscape


With INP (Interaction to Next Paint) fully replacing FID as a ranking signal, the performance battleground has shifted to responsiveness under real user conditions.


LCP (Largest Contentful Paint) — Target: < 2.5s


The most impactful optimisations:


  • Preload the LCP resource with <link rel='preload'> — typically saves 300-600ms
  • Use a CDN — origin response time is usually the bottleneck
  • Avoid lazy-loading LCP images — this is the #1 mistake we see

INP (Interaction to Next Paint) — Target: < 200ms


INP measures responsiveness across the entire user session, not just load. Key fixes:


  • Yield to the main thread — break long tasks with scheduler.yield()
  • Avoid layout thrashing — batch DOM reads and writes
  • Code-split heavy components — don't load what users haven't requested

CLS (Cumulative Layout Shift) — Target: < 0.1


  • Always set explicit width and height on images
  • Reserve space for late-loading ads and embeds
  • Avoid inserting content above existing content