Core Web Vitals have matured considerably since Google made them a ranking signal in 2021. Most established sites have their LCP and CLS scores under reasonable control. The real competitive battlefield in 2026 is INP โ Interaction to Next Paint, which replaced FID in March 2024 โ and the often-overlooked subparts of LCP. Getting precise about which subpart is failing you is the difference between a meaningful fix and three weeks of wasted engineering time.
The LCP Subpart Breakdown
Google now exposes LCP as four measurable subparts in Chrome User Experience Report (CrUX) data. 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 1.2MB WebP that should be 140KB, or an image served without appropriate
srcsetfor 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 is frequently 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 blocking the main thread for more than 50ms will delay INP. 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()(now broadly supported) between chunks. - 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 100-300ms to 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.
- Reserved space for images and ads: Every
<img>element needs explicitwidthandheightattributes (or a CSS aspect-ratio container). Ad slots need a minimum reserved height. This sounds obvious โ and still fails on 60% of sites we audit. - Font fallback metrics: The
size-adjust,ascent-override, anddescent-overrideCSS 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. Thefont-display: optionalstrategy 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: The fastest win we’ve seen in practice: switching from server-side redirects on the root URL to preloading the destination URL directly. A single 301 at the origin that the browser can’t preload adds 200–500ms to LCP on first visit. Cut the redirect chain and you often close the gap on a poor LCP in one deploy.
What Google Actually Weights
Lab data (Lighthouse, 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 โ will tank your field data for a full month even after you fix it the next day.
- For small sites (under roughly 1,500 monthly Chrome visitors), Google may not have sufficient field data to assess CWV, and falls back to lab data. This is a rare case where lab scores have more weight.
- Score at the 75th percentile means 25% of your users can have a poor experience and it still counts as “good.” But optimize for the median first; the tail usually improves proportionally.
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. Custom performance budget alerts fire when your LCP, CLS, or INP crosses a threshold you define โ so you find out about regressions before your clients do.