Complete Guide to Core Web Vitals Optimization
- March 13, 2019
- Core Web Vitals and Performance, Technical SEO

AI Summary
Core Web Vitals are Google's three user experience metrics: LCP for loading (2.5s or less), INP for responsiveness (200ms or less), and CLS for visual stability (0.1 or less). Rankings respond to field data from real Chrome users at the 75th percentile, so optimize the metric each template fails, using lab tools only to debug.
- LCP: cut server response time and preload or compress the largest element.
- INP: break up long JavaScript tasks and split bundles by route.
- CLS: give images explicit width and height or an aspect ratio box.
- Rankings use field data (CrUX) at the 75th percentile, not a single lab score.

Understanding Core Web Vitals
Core Web Vitals are Google's standardized metrics for measuring user experience quality, forming part of the Page Experience ranking signals. The three current metrics are Largest Contentful Paint (LCP) measuring loading performance, Interaction to Next Paint (INP) measuring interactivity, and Cumulative Layout Shift (CLS) measuring visual stability. These metrics use real-world field data from Chrome users, meaning optimization must improve actual user experience, not just lab test scores.
Metric Thresholds and Measurement
Each Core Web Vital has Good, Needs Improvement, and Poor thresholds. Google uses the 75th percentile of page loads to determine if a page passes, meaning 75% of visits must meet the threshold for a "Good" assessment. Field data from Chrome User Experience Report (CrUX) determines ranking impact, while lab tools like Lighthouse help diagnose issues. Focus on field data performance while using lab data for debugging.
| Metric | Good | Needs Improvement | Poor | Measures |
|---|---|---|---|---|
| LCP | ≤2.5s | 2.5s to 4s | >4s | Loading speed of largest element |
| INP | ≤200ms | 200ms to 500ms | >500ms | Responsiveness to all interactions |
| CLS | ≤0.1 | 0.1 to 0.25 | >0.25 | Visual stability (layout shifts) |
LCP Optimization Strategies
LCP measures when the largest content element (typically hero image, headline, or video thumbnail) becomes visible. Optimization focuses on four areas: server response time (reduce TTFB with faster hosting, CDN, caching), render-blocking resources (defer non-critical CSS/JS, inline critical CSS), resource load time (optimize and compress images, use modern formats like WebP/AVIF, implement responsive images), and client-side rendering (minimize JavaScript that delays content rendering, consider server-side rendering). Identify your LCP element using DevTools Performance panel and prioritize loading that specific resource.
INP Optimization Strategies
INP replaced FID in March 2024 and measures responsiveness across all interactions, not just the first. Poor INP typically results from long JavaScript tasks blocking the main thread. Solutions include: breaking long tasks into smaller chunks using requestIdleCallback or scheduler.yield(), reducing JavaScript execution time through code splitting and tree shaking, minimizing main thread work by offloading processing to Web Workers, and optimizing event handlers to avoid expensive operations during interactions. Profile interactions using DevTools to identify specific handlers causing delays.
CLS Optimization Strategies
CLS measures unexpected layout shifts during page load and interaction. Common causes include images without dimensions (always specify width and height attributes), ads and embeds without reserved space, dynamically injected content above existing content, and web fonts causing flash of invisible text (FOIT) or flash of unstyled text (FOUT). Reserve space for dynamic content using aspect-ratio boxes or min-height. Use font-display: optional or preload fonts to minimize font-related shifts. Avoid inserting content above existing content except in response to user interaction.
Monitoring and Continuous Improvement
Google Search Console's Core Web Vitals report shows URL-level performance grouped by status. PageSpeed Insights provides both field data (if available) and lab data with specific recommendations. Set up Real User Monitoring (RUM) using the web-vitals JavaScript library to track metrics for all users, not just Chrome users. Create dashboards tracking performance over time, and establish alerting for regressions. Remember that Core Web Vitals are measured at the page level, so prioritize high-traffic pages and templates that affect many URLs.
Fixing CLS with Explicit Dimensions
The most common CLS culprit is an image that loads without reserved space, pushing content down as it arrives. The fix costs nothing: give every image explicit width and height attributes so the browser reserves the box before the file loads. For responsive images, a CSS aspect ratio keeps the reserved box proportional. Both patterns are shown below.
<img src="/hero.webp" width="1600" height="900" alt="product hero" />
/* reserve space responsively in CSS */
.media {
aspect-ratio: 16 / 9;
width: 100%;
}Apply the same discipline to ads, embeds, and any slot filled after load: reserve the space up front with a min height or aspect ratio box, and never inject content above existing content unless the user asked for it.
Diagnose, Then Fix
Each metric has a small set of high leverage causes. Match the symptom to the cause before you touch code, so effort lands where it moves the field score.
| Metric | Most common cause | First fix to try |
|---|---|---|
| LCP | Slow server response or heavy hero image | Cut TTFB with caching or a CDN, then compress and preload the hero |
| LCP | Render blocking CSS or JavaScript | Inline critical CSS and defer the rest |
| INP | Long JavaScript tasks blocking the main thread | Break tasks up and split bundles by route |
| CLS | Images and embeds without reserved space | Set width and height or an aspect ratio box |
| CLS | Web fonts swapping late | Preload fonts and use font-display: optional |
Measure the Field, Debug in the Lab
Rankings respond to field data from real Chrome users at the 75th percentile, not to a single lab score. Use PageSpeed Insights and the Search Console Core Web Vitals report to read field performance, and use Lighthouse only to reproduce and debug a specific issue. To capture the users PageSpeed cannot see, add Real User Monitoring with the web-vitals library and pipe the results into your own dashboard.
A desktop crawler makes this scalable: connect the PageSpeed API and sort templates by their worst metric, our Screaming Frog advanced usage guide shows the exact API setup, and you can automate the recurring performance report itself with the scripts in our Python for SEO guide.
Frequently Asked Questions
What are the three Core Web Vitals in 2026?
The three metrics are Largest Contentful Paint (LCP) for loading, Interaction to Next Paint (INP) for responsiveness, and Cumulative Layout Shift (CLS) for visual stability. INP replaced First Input Delay in March 2024 and measures all interactions, not just the first.
What are good Core Web Vitals thresholds?
A page is Good when LCP is 2.5 seconds or less, INP is 200 milliseconds or less, and CLS is 0.1 or less, measured at the 75th percentile of real user visits. Passing all three requires 75 percent of visits to meet each threshold.
Does field data or lab data affect rankings?
Field data does. Google uses real Chrome User Experience Report data at the 75th percentile to assess ranking impact, while lab tools like Lighthouse only help you reproduce and debug issues. Always optimize for field performance and use lab data for diagnosis.
How do I fix a poor CLS score?
Give every image explicit width and height attributes or a CSS aspect ratio so the browser reserves space before the file loads. Reserve space for ads and embeds, preload fonts with font-display: optional, and never inject content above existing content unless the user triggered it.
What causes poor INP and how do I improve it?
Poor INP usually comes from long JavaScript tasks blocking the main thread. Break long tasks into smaller chunks, split bundles by route, offload heavy work to Web Workers, and keep event handlers light so interactions stay responsive.
How can I monitor Core Web Vitals across all users?
Add Real User Monitoring with the web-vitals JavaScript library to capture metrics from every visitor, not just those in the CrUX sample. Pipe the data into a dashboard, track it over time, and set alerts so regressions surface quickly.
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.







