Core Web Vitals put numbers on how a page actually feels to a real visitor — how fast it shows content, how quickly it responds, and how stable it is while loading. Google measures them from real Chrome users, so they reflect field experience, not just a lab test. Here is what each one means and how they have evolved.
The three metrics
Largest Contentful Paint (LCP)
LCP measures loading performance — specifically, how long it takes for the largest visible element (usually a hero image or headline block) to render. Google considers 2.5 seconds or less "good". Slow LCP usually comes from slow servers, render-blocking resources, or large unoptimised images. Improving it is mostly about faster hosting, efficient images and removing what blocks the first paint.
Interaction to Next Paint (INP)
INP measures responsiveness: how quickly the page reacts when a user interacts with it, across the whole visit. It replaced First Input Delay (FID) as a Core Web Vital in March 2024, because FID only measured the first interaction and was too easy to pass — INP is a stricter, more representative measure. A "good" INP is 200 milliseconds or less. Heavy JavaScript is the usual culprit, so the fix is trimming and deferring scripts and breaking up long tasks.
Cumulative Layout Shift (CLS)
CLS measures visual stability — how much the page content unexpectedly moves around while it loads, the annoyance of tapping a button that jumps. A "good" CLS is 0.1 or less. It is usually caused by images and ads without reserved space, or fonts that swap and reflow the layout. Reserving dimensions for media and being careful with injected content keeps it low.
How to improve Core Web Vitals
Measure with PageSpeed Insights and the Search Console Core Web Vitals report, using field data (real users) as the source of truth rather than the lab score alone. Then work the common wins: faster hosting and optimised images for LCP, lighter JavaScript for INP, and reserved space for media and fonts for CLS. Fix by template, since Vitals usually vary by page type, not by individual URL.