New: AI Integration Sprints — ship your first AI feature in 14 days.

Learn more
Back to Insights
ENGINEERINGSEP 9, 20269 MIN READ

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.

MAMujtaba AsifCTO, HexaCod
Chalkboard of Core Web Vitals 2026 with LCP, INP, and CLS gauges

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
#engineering#performance#web
MAWritten by Mujtaba AsifCTO at HexaCod. He owns the technical roadmap and architecture decisions across our client builds.

Get the next build note
in your inbox.

One practical email a month. No fluff, unsubscribe anytime.

Keep reading

All insights