NavTech Solution is currently accepting new Next.js and AI development projects.Get in touch

SEOJune 29, 2026 · 4 min read

Core Web Vitals in 2026: What Actually Moves the Needle

A practical breakdown of LCP, CLS, and INP — what tends to cause each one, and the fixes that make a measurable difference versus the ones that don't.

By NavTech Solution

Core Web Vitals get treated as a checkbox — run Lighthouse, see a red score, apply whatever the report suggests. That approach fixes symptoms without necessarily fixing the thing actually causing the score. Here's what tends to matter in practice, per metric.

Largest Contentful Paint (LCP)

LCP measures how long it takes the largest visible element — usually a hero image, a heading, or a large text block — to render. The most common cause of a bad LCP isn't "the page is slow" in some vague sense; it's one of a few specific things:

  • The LCP element is an image loaded without priority. In Next.js, the fix is literal: add priority to the next/image component rendering your hero image, so it isn't lazy-loaded and isn't competing with lower-priority requests.
  • Render-blocking resources delay first paint. Large synchronous JavaScript bundles or render-blocking CSS in the <head> push everything back, including the LCP element.
  • The LCP element depends on a client-side data fetch. If your hero content only renders after a useEffect fetch resolves, you've guaranteed a slow LCP no matter how fast your server is. Server-render that content instead.
import Image from "next/image";

<Image src={hero} alt="" priority sizes="100vw" />;

Fix the actual bottleneck — usually one of the three above — rather than generically "optimizing images" across the whole site when only one image is on the critical path.

Cumulative Layout Shift (CLS)

CLS measures unexpected layout movement after initial render. It's almost always one of these:

  • Images and embeds without explicit dimensions. The browser doesn't know how much space to reserve until the image loads, so content shifts down once it does. Always set width/height (or use next/image, which handles this automatically).
  • Web fonts causing a flash of unstyled/different text. A fallback font renders first, then swaps to the real font at a different size, shifting everything below it. font-display: swap with a fallback font metrically similar to your web font (or next/font's automatic fallback matching) minimizes the jump.
  • Content injected above existing content — a cookie banner, an ad slot, or an async-loaded announcement bar that pushes the page down after the user has already started reading. Reserve the space up front with a fixed min-height, even before the content loads.

CLS is the one users notice most viscerally, because it's the one that makes them mis-click a button that just moved.

Interaction to Next Paint (INP)

INP replaced First Input Delay as the responsiveness metric, and it measures the full cost of an interaction — not just when the browser starts responding, but when the next paint actually reflects that response. Long tasks on the main thread are the usual cause:

  • Heavy client-side JavaScript execution blocking the main thread when a user clicks or types. Code-split aggressively, and audit what's actually running on interaction, not just on load.
  • Expensive re-renders triggered by a single state update cascading through a large component tree. This is where React DevTools' profiler earns its keep — find the component re-rendering far more than the interaction warranted.
  • Synchronous work that could be deferred. Analytics calls, non-critical state updates, and logging don't need to block the paint the user is waiting on; move them to requestIdleCallback or defer them past the interaction.

What doesn't move the needle much

A few common "SEO performance" fixes that look productive but rarely change the score meaningfully on their own: minifying HTML further than a modern build tool already does, switching CDNs when your existing one is already reasonably fast, or endlessly tweaking a Lighthouse score in isolation (a lab test) without checking real Core Web Vitals field data from actual users (Chrome UX Report / Search Console), which is what search ranking actually uses.

Measure field data first — it tells you which metric is actually failing for real users, on real devices and networks — then fix the specific cause above, rather than applying every generic optimization checklist item to a metric that was never the problem.

Structured data and clean semantic markup matter for how search engines and AI-powered answer engines understand your content, but they don't substitute for genuinely fast, stable pages — the two are complementary parts of technical SEO, not alternatives to each other. If you're also considering an interactive Three.js visual for a hero section, the LCP guidance above applies there too — don't let a 3D scene become the thing blocking your largest contentful paint.

SEOPerformanceCore Web Vitals