Core Web Vitals in 2026: What Actually Moves the Needle
Core Web Vitals have been part of the ranking picture long enough that everyone knows the acronyms and almost nobody knows which fixes matter. After a few hundred optimization jobs, the pattern is unmistakable: a short list of changes produces most of the improvement, and the rest is fussing.
LCP: it is almost always the hero image
Largest Contentful Paint measures when the biggest thing above the fold finishes rendering. On a typical business site that's the hero image or the headline behind it.
What actually works, in order of impact:
- Serve the right file. A 2.4 MB JPEG scaled down by the browser is the single most common cause of a bad LCP. Modern format, correctly sized, and you're often halfway there.
- Preload it. The browser doesn't know your hero image matters until it has parsed CSS. A
<link rel="preload">tells it immediately. - Stop hiding it behind fonts. If your headline waits on a web font, your LCP waits too.
font-display: swapcosts you a flash and buys you a second. - Kill the render-blocking chain. Every stylesheet and synchronous script in the head delays everything after it.
What doesn't work: shaving 8 KB off a stylesheet, switching CSS frameworks, or arguing about image formats past the first conversion.
INP: it is almost always a third-party script
Interaction to Next Paint measures how long the page takes to respond when someone taps something. Bad INP is a main-thread problem, and the main thread on a small business site is rarely busy with the site's own code.
It's busy with the chat widget, the heatmap recorder, the tag manager container holding nine tags, and the popup library waiting to ask for an email address.
The fix is unglamorous: open the tag manager, list what's loading, and ask each one what it earned last quarter. Most sites can remove half and lose nothing measurable. Load the survivors after interaction rather than on page load.
CLS: it is almost always missing dimensions
Cumulative Layout Shift is the metric with the most straightforward fix and the most stubborn recurrence. Content jumps because the browser didn't know how much room to leave.
- Width and height on every image and iframe.
- Reserved space for ad slots and embeds.
- Banners and cookie notices that overlay rather than push.
- Fonts whose fallback metrics roughly match the real thing.
The part people skip
Field data, not lab data. A perfect Lighthouse score on your laptop tells you about your laptop. What matters is the Chrome UX Report data from actual visitors — often on mid-range Android phones on ordinary connections, which is a different website than the one you've been testing.
Optimize for that visitor and the scores follow. Optimize for the score and you'll get a good score.