Core Web Vitals Diagnostic Guide
Input your LCP, INP, CLS, and TTFB values. Get instant scoring, optimization recommendations, a priority matrix, and a performance budget. No data leaves your browser.
Enter Your Web Vitals
LCP
INP
CLS
TTFB
Vitals Score Card
Priority Matrix
| Metric | Current | Target | Gap | Impact | Priority |
|---|
Before / After Impact Estimator
Optimization Recommendations
Performance Budget
Understanding Core Web Vitals in 2026
Core Web Vitals (CWV) are a set of standardized metrics that quantify the real-world user experience of loading, interactivity, and visual stability on web pages. Google introduced them in May 2020 and incorporated them as a ranking signal in June 2021. Since then, they have become the primary technical SEO benchmark for page experience. The current three Core Web Vitals are Largest Contentful Paint (LCP), Interaction to Next Paint (INP), and Cumulative Layout Shift (CLS). Time to First Byte (TTFB) is an additional diagnostic metric that directly impacts LCP.
What makes CWV unique among performance metrics is that they are measured from real users in the field, not just in lab conditions. Google collects CWV data through the Chrome User Experience Report (CrUX), which aggregates anonymized performance data from Chrome users who have opted in. This means your CWV scores reflect actual user experience across different devices, network conditions, and geographies. A page passes the CWV assessment when at least 75% of real user page loads meet the "Good" threshold for all three core metrics simultaneously.
The distinction between field data (real users) and lab data (synthetic tests like Lighthouse) is critical. Lighthouse runs tests on a single simulated device and network, producing consistent but narrow results. CrUX field data captures the full distribution of user experiences, including users on slow 3G phones in rural areas and users on fast fiber connections with powerful laptops. A page can score 100 in Lighthouse but still fail CWV in the field if a significant percentage of users have poor connections or old devices.
Largest Contentful Paint (LCP): Loading Performance
LCP measures the time from when the user initiates a page load to when the largest visible content element finishes rendering in the viewport. The "largest element" is typically a hero image, a large heading, or a video poster frame. Google's thresholds are: Good under 2.5 seconds, Needs Improvement between 2.5 and 4.0 seconds, and Poor above 4.0 seconds.
LCP is decomposed into four sub-parts, each of which can be optimized independently. First, Time to First Byte (TTFB): the time the server takes to respond to the initial HTML request. Optimize with CDN edge caching, server-side caching (Redis, Varnish), and efficient server code. Target under 800ms. Second, resource load delay: the time between TTFB and when the LCP resource starts downloading. Reduce by preloading the LCP image with <link rel="preload"> and removing render-blocking resources from the critical path. Third, resource load time: how long the LCP resource itself takes to download. Minimize by compressing images (WebP/AVIF), using responsive srcset, and serving from a CDN. Fourth, element render delay: the time after the resource loads until it actually paints. Reduce by minimizing DOM size, avoiding layout-triggering JavaScript, and eliminating CSS that blocks rendering.
The single highest-impact LCP optimization for most sites is adding fetchpriority="high" to the LCP image element. This tells the browser to prioritize downloading that resource above other images, fonts, and non-critical scripts. Combined with a preload link in the head, this can reduce LCP by 500ms-1.5 seconds on typical pages. If your LCP element is text-based (a heading), inline the critical CSS required to render it and preload the web font.
Interaction to Next Paint (INP): Responsiveness
INP replaced First Input Delay (FID) as the official responsiveness metric in March 2024. While FID only measured the delay before processing the very first user interaction, INP measures the full input-to-paint latency of every interaction throughout the page's lifecycle, then reports the worst (or near-worst) interaction. This makes INP a far more comprehensive measure of how responsive a page feels during actual use.
An interaction's total latency consists of three phases: input delay (time the browser waits because the main thread is busy), processing time (time spent running the event handler code), and presentation delay (time to commit the visual update to the screen). Google's thresholds are: Good under 200ms, Needs Improvement between 200ms and 500ms, and Poor above 500ms.
The most common cause of poor INP is long tasks that block the main thread. A "long task" is any JavaScript execution that runs for more than 50ms without yielding control. If a user clicks a button while a 300ms JavaScript task is running, the browser cannot start processing the click until the task finishes, adding 300ms of input delay. The fix is to break long tasks into smaller chunks. The scheduler.yield() API (available in Chrome and polyfillable) is the modern way to explicitly yield the main thread between task segments. Older approaches include setTimeout(fn, 0) and requestIdleCallback.
Reducing DOM size below 1,500 nodes significantly improves presentation delay, because the browser must calculate layout and paint for fewer elements after each state change. Similarly, using CSS content-visibility: auto on off-screen sections lets the browser skip rendering work for elements the user has not scrolled to yet, reducing the paint phase of interactions.
Cumulative Layout Shift (CLS): Visual Stability
CLS measures how much the page layout shifts unexpectedly during its entire lifespan. A "layout shift" occurs when a visible element moves from its rendered position without being triggered by user input. CLS is calculated by multiplying the impact fraction (how much of the viewport is affected) by the distance fraction (how far the element moved), summed across all unexpected shifts. Google's thresholds are: Good under 0.1, Needs Improvement between 0.1 and 0.25, and Poor above 0.25.
The five most common causes of CLS are well-documented. First, images and iframes without dimensions: when an image loads, the browser reserves space for it only if explicit width and height attributes or CSS aspect-ratio are provided. Without them, the browser allocates zero height initially, then reflows the layout when the image loads. The fix is always including width and height attributes: <img width="800" height="600">. Second, late-loading web fonts: when a web font downloads and replaces the fallback font, different metrics cause text to reflow. Use font-display: swap combined with size-adjust on the fallback font to match metrics closely.
Third, dynamically injected content above existing content: ads, banners, and cookie notices that push content down. Reserve space with CSS min-height before the dynamic content loads. Fourth, animations that trigger layout: properties like top, left, width, and height trigger layout recalculations. Use transform and opacity instead, which run on the compositor thread without affecting layout. Fifth, late-loading CSS that changes previously-rendered elements: inline critical CSS in the HTML head and load non-critical CSS asynchronously.
TTFB: The Foundation Metric
Time to First Byte measures how long the browser waits after sending the HTTP request until it receives the first byte of the response. While not a Core Web Vital itself, TTFB is the foundation of LCP: a 2-second TTFB makes it mathematically impossible to achieve a 2.5-second LCP. Google considers TTFB "Good" under 800ms, "Needs Improvement" at 800-1800ms, and "Poor" above 1800ms.
TTFB is composed of DNS lookup time, TCP connection time, TLS negotiation time, and server processing time. For most sites, server processing is the dominant factor. The optimization playbook starts with CDN deployment: serving content from edge servers geographically close to users eliminates long-distance round trips and can reduce TTFB from 1-2 seconds to 50-200ms. Next, implement server-side caching for dynamic pages: full-page cache for anonymous users, fragment caching for personalized pages. Finally, optimize database queries and application code to reduce server processing time.
A common mistake is assuming TTFB issues are purely server-side. Client-side redirects (HTTP to HTTPS, www to non-www, marketing redirects) each add a full round trip. Three redirect hops can add 300-600ms to TTFB on mobile networks. Minimize redirect chains and use HSTS preloading to eliminate the HTTP-to-HTTPS redirect entirely.
Using This Diagnostic Tool
Enter your actual CWV values from Chrome DevTools (Performance panel), PageSpeed Insights, or the CrUX API. Click "Diagnose Web Vitals" to receive an instant assessment. The tool scores each metric as Good, Needs Improvement, or Poor using Google's official thresholds. The priority matrix ranks each metric by the gap between your current value and the Good threshold, combined with its SEO impact weight, producing a clear fix-first order.
The before/after impact estimator shows what your metrics would look like after applying the recommended optimizations. These estimates are based on typical improvement ranges observed across thousands of sites: image optimization typically reduces LCP by 30-50%, JavaScript splitting reduces INP by 40-60%, and explicit image dimensions reduce CLS by 60-80%. Your actual results will vary based on your specific codebase, hosting, and traffic patterns.
The performance budget section translates your CWV targets into concrete resource budgets: maximum page weight, JavaScript size, image count, and font files. These budgets represent the resource constraints that, when enforced, typically produce CWV scores in the Good range. Integrate these limits into your build pipeline for continuous enforcement.
All calculations run entirely in your browser. No metric data, URLs, or any other information is transmitted to any server. The tool uses Google's published threshold values and industry-standard optimization impact estimates to generate its recommendations and projections.
Frequently Asked Questions
What are Core Web Vitals and why do they matter for SEO?
Core Web Vitals are three specific metrics Google uses to measure user experience: Largest Contentful Paint (LCP) measures loading speed, Interaction to Next Paint (INP) measures responsiveness, and Cumulative Layout Shift (CLS) measures visual stability. Google made these a ranking signal in 2021, meaning pages that fail CWV thresholds may rank lower than faster competitors. In 2024, INP replaced First Input Delay (FID) as the responsiveness metric. TTFB (Time to First Byte) is a diagnostic metric that directly affects LCP.
What are good Core Web Vitals scores?
Google defines three tiers for each metric. LCP: Good is under 2.5 seconds, Needs Improvement is 2.5-4.0 seconds, Poor is over 4.0 seconds. INP: Good is under 200ms, Needs Improvement is 200-500ms, Poor is over 500ms. CLS: Good is under 0.1, Needs Improvement is 0.1-0.25, Poor is over 0.25. TTFB: Good is under 800ms, Needs Improvement is 800-1800ms, Poor is over 1800ms. A page passes CWV assessment when the 75th percentile meets Good for all three core metrics.
How do I fix a poor LCP score?
The four main causes of poor LCP are slow server response (TTFB over 800ms), render-blocking resources, slow resource load time, and client-side rendering delays. Fix TTFB first by using a CDN and caching. Then optimize the LCP element: convert images to WebP/AVIF, add fetchpriority="high" and preload it. Remove render-blocking scripts from the head. Typical improvement: 1-3 seconds reduction.
What causes high CLS and how do I fix it?
CLS is caused by elements that shift position after rendering starts. Common causes: images without width/height attributes, late-loading fonts, dynamically injected content (ads, banners), and CSS animations triggering layout. Fix by setting dimensions on images, using font-display: swap, reserving space for dynamic content, and using CSS transform instead of layout-triggering properties.
How is INP different from FID and how do I improve it?
FID only measured the delay before processing the first interaction. INP measures the full latency of all interactions throughout the page lifecycle. To improve INP: break long tasks using scheduler.yield(), debounce rapid events, use web workers for heavy computation, reduce DOM size under 1500 nodes, and avoid forced synchronous layouts in event handlers.