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
widthandheighton images - Reserve space for late-loading ads and embeds
- Avoid inserting content above existing content