Daylytix

Core Web Vitals in 2026: What Actually Moves the Needle

Core Web Vitals have been part of Google’s page experience signals since 2021. LCP and CLS get most of the attention, but two areas are easy to miss: INP - Interaction to Next Paint, which replaced FID in March 2024 - and the subparts of LCP. Knowing which subpart is slow is the difference between a targeted fix and weeks of guesswork.

The LCP Subpart Breakdown

Google’s LCP guidance on web.dev breaks LCP into four subparts, and Chrome DevTools shows the same breakdown in a performance trace. Understanding which subpart is responsible for your score determines exactly where to focus optimization effort:

  • Time to First Byte (TTFB): Server response time before any content is delivered. If this is high, the problem is infrastructure - CDN coverage, server processing time, or database query latency.
  • Resource Load Delay: The gap between when the browser receives the first byte and when it starts loading the LCP resource. Usually caused by render-blocking scripts that delay the browser discovering the image or hero element.
  • Resource Load Duration: How long it takes the LCP resource itself to download. The most common culprit here is an unoptimised hero image - a file several times heavier than it needs to be, or an image served without appropriate srcset for mobile.
  • Element Render Delay: The time between the resource finishing its download and the element actually appearing on screen. This is almost always the problem on JavaScript-heavy SPAs, where the framework's render cycle sits between the asset being ready and it being painted.

Most site owners optimise images (resource load duration) and ignore element render delay entirely. For React, Next.js, or Vue sites, element render delay can be the biggest slice. The fix involves reducing main-thread blocking during the initial render cycle - lazy hydration, component code-splitting, and deferring non-critical third-party scripts.

INP Is the New FID - and It’s Harder to Fix

FID only measured the delay before the browser started processing an interaction. INP measures the full interaction latency: from pointer down (or key press) to the next visual frame being painted. That includes all the JavaScript that runs in response to the event, plus any layout recalculations triggered by DOM changes.

A poor INP (above 500ms) almost always means one or more of these patterns:

  • Long tasks on the main thread: Any task that blocks the main thread for more than 50ms can delay INP if the user interacts while it runs. Use the Long Tasks API or Chrome DevTools Performance panel to find them.
  • Unoptimised event handlers: Click and input handlers that do too much synchronous work. Break expensive work into smaller chunks and yield with scheduler.yield() between chunks. It is not yet available in every major browser, so keep a setTimeout fallback.
  • Layout thrashing in response to clicks: Reading computed styles and then writing DOM changes in the same synchronous block forces the browser to recalculate layout multiple times. Batch reads and writes separately.
  • Third-party scripts responding to events: Analytics, chat widgets, and tag managers that attach their own listeners can add noticeable interaction latency without any trace in your own code.

The scheduler.yield() API deserves a specific mention. It allows you to break a long task into smaller pieces that yield control back to the browser between them, preventing input delay without restructuring your code into web workers. Use it wherever you have loops processing large datasets in response to user actions.

CLS: The Fixes Nobody Actually Ships

Cumulative Layout Shift is conceptually simple but surprisingly hard to eliminate entirely at scale. The technical fixes are well documented. The problem is they require discipline across every content creator, developer, and third-party integration touching the page.

Track Core Web Vitals across every audit - with score history and budget alerts. Get an alert when a scheduled audit finds LCP or CLS over your budget.
Try it free →
  • Reserved space for images and ads: Every <img> element needs explicit width and height attributes (or a CSS aspect-ratio container). Ad slots need a minimum reserved height. It sounds obvious, but images without dimensions remain a common cause of layout shift.
  • Font fallback metrics: The size-adjust, ascent-override, and descent-override CSS descriptors let you match the dimensions of your fallback font to your web font, so the layout doesn’t shift when the custom font loads. The font-display: optional strategy can also eliminate font-swap CLS entirely for returning visitors.
  • DOM injections above the fold: Cookie consent banners, notification prompts, and dynamic content injected at the top of the page are among the most common CLS culprits. Reserve space for them, or inject below-fold content first.

Tip: Check for redirects before the page itself loads. Each hop (for example http to https, then to www, then to a trailing slash) adds a round trip before the browser receives any HTML, and web.dev lists redirects as a common contributor to high TTFB, which is the first subpart of LCP. Link straight to the final URL in ads, emails and internal links.

What Google Actually Weights

Lab data (Lighthouse, or the lab section of PageSpeed Insights) is useful for diagnosing problems but it is not what Google uses for ranking. Google uses field data from CrUX - real Chrome user experiences - aggregated at the 75th percentile. This has several practical implications:

  • A perfect Lighthouse score with poor real-user data (due to geography, device mix, or slow connections in your user base) will not help your rankings.
  • CrUX is a 28-day rolling window. A bad deploy - a 3MB JavaScript bundle pushed to production - can weigh on your field data for up to 28 days even if you fix it the next day, because the bad days stay in the window.
  • If a site does not have enough real-user traffic, CrUX has no field data for it and the Core Web Vitals report in Search Console shows “No data available”. Lab scores do not fill that gap - use them for debugging, and collect your own real-user data if you need numbers.
  • Score at the 75th percentile means 25% of your users can have a poor experience and it still counts as “good.” So optimise for your slower visitors and devices, not for your own fast laptop - that is where the 75th percentile sits.

Tooling That Actually Helps

Chasing Core Web Vitals without structured tracking is a losing game. You need to know your scores per device (mobile and desktop differ significantly), see how they change over time, and get alerted when a deploy or third-party change causes a regression.

Daylytix captures CWV scores per audit using live PageSpeed Insights API data, separated by mobile and desktop. Score history tracking lets you see the delta between audits over weeks or months. On scheduled audits you can set budgets for LCP, CLS and the mobile and desktop performance scores, and get an alert by email or Slack when a run crosses one - so you notice regressions before your clients do.

7-day free trial

See exactly what's slowing your site down.

Daylytix runs a full Core Web Vitals audit across mobile and desktop, tracks scores over time, and alerts you when performance drops below your custom thresholds.

Start your free audit

No credit card needed for the trial. Plans from €9.99 a month.