Core Web Vitals in 2026: the fixes that still matter
The timing checks we still run on every launch, and the fixes that move them.

Three numbers, one page
Core Web Vitals are still the timing checks we run before we call a launch finished. The names have settled. Largest Contentful Paint for the main content. Interaction to Next Paint for how the page feels when someone actually uses it. Cumulative Layout Shift for whether the page stays still while it loads.
The useful part is not a perfect lab score. It is knowing which of the three is late, on the page a customer actually opens, on a phone that is not the one in the office. A 100 in a synthetic run and a late tap on a mid-range Android are different facts. We treat the field number as the one that counts.
2.5s
LCP, Google’s good bar
200ms
INP, Google’s good bar
0.1
CLS, Google’s good bar
These are Google’s published “good” thresholds, not a score we claim on every build. Measure the page you shipped, on a device your customer owns.
Largest Contentful Paint
LCP is almost always the hero. A font that blocks, an image that arrives late, or a client component that waits for JavaScript before it can paint the thing the user came to see. The fix is usually dull: decide what the largest element is, give it a size, and let the browser fetch it early.
head.tsx
<link
rel="preload"
as="image"
href="/hero.avif"
fetchPriority="high"
/>We also stop decorating the hero with a second framework’s worth of motion before first paint. Animation can start after the content is on screen. It should not be the reason the content is late.
Interaction to Next Paint
INP replaced the older first-input measure because the first tap is not the only one that matters. A page can feel fine until a filter, a menu, or a cart update locks the main thread. The fixes that still work are the old ones: less JavaScript on the first load, work moved off the click, and lists that do not re-render the world.
We split bundles by route, and we are suspicious of a “small” client component that imports a charting library the user has not asked for yet. If a click handler awaits a network call before it paints anything, we paint the pending state first. The user should see the page respond before the server has agreed.
Cumulative Layout Shift
Layout shift is a reservation problem. Images without a ratio, ads or banners injected above the fold, and fonts that swap and reflow the headline. We reserve the box before the asset arrives. If we do not know the height, we do not put the slot above the content the user is trying to read.
“A fast page that jumps is still a slow page. Reserve the space, then load the picture.”Mujtaba Asif, CTO
Get the next build note
in your inbox.
One practical email a month. No fluff, unsubscribe anytime.


