Core Web Vitals aren’t optional anymore — they’re a direct Google ranking factor, and in 2026 the bar has risen significantly. Google’s algorithm now weights real-user experience data more heavily than ever, pulling from the Chrome User Experience Report (CrUX) to assess every page on your site. If you’re still optimizing for the 2021 thresholds, you’re already behind.
This checklist covers every technical SEO element that matters for Core Web Vitals in 2026 — from the three original metrics (LCP, FID/INP, CLS) to the newer additions Google rolled in quietly. Work through it systematically and you’ll have a site that outperforms 90% of competitors on every speed-related signal.
Understanding Core Web Vitals in 2026
Google’s Core Web Vitals set has evolved. The original trio — Largest Contentful Paint (LCP), First Input Delay (FID), and Cumulative Layout Shift (CLS) — has been updated. FID was replaced by Interaction to Next Paint (INP) in March 2024, and Google continues to refine what “good” means for each metric as hardware and network benchmarks shift.
Here are the current thresholds you need to hit:
- LCP (Largest Contentful Paint): Good = under 2.5 seconds. Needs Improvement = 2.5–4.0s. Poor = over 4.0s.
- INP (Interaction to Next Paint): Good = under 200ms. Needs Improvement = 200–500ms. Poor = over 500ms.
- CLS (Cumulative Layout Shift): Good = under 0.1. Needs Improvement = 0.1–0.25. Poor = over 0.25.
To pass Google’s Core Web Vitals assessment, 75% or more of your page’s real-user sessions must hit “Good” for all three. Not median — 75th percentile. That’s a harder target than most realize.
LCP Optimization: The 80-Point Checklist Starts Here
LCP is what users see first — the largest image or text block above the fold. Everything that slows down rendering of that element tanks your score.
Server-Side Optimizations
- ☐ Time to First Byte (TTFB) under 800ms measured from field data (CrUX)
- ☐ Use a CDN with edge nodes close to your primary audience
- ☐ Enable HTTP/2 or HTTP/3 (QUIC) on your origin server
- ☐ Configure server-side caching (Redis, Varnish, or static file cache)
- ☐ Use Brotli compression (not just gzip) for HTML/CSS/JS
- ☐ Set cache-control headers: max-age=31536000 for static assets
- ☐ Eliminate unnecessary redirects on primary URLs
- ☐ Verify hosting tier isn’t CPU-throttled at peak traffic
LCP Element Targeting
- ☐ Identify your LCP element on mobile and desktop separately (use PageSpeed Insights)
- ☐ If LCP is an image: serve in WebP or AVIF format
- ☐ Add
fetchpriority="high"attribute to the LCP image - ☐ Add
<link rel="preload">for the LCP image in the<head> - ☐ Remove lazy-loading (
loading="lazy") from LCP images - ☐ Ensure LCP image is not loaded via CSS background (use
<img>tag instead) - ☐ If LCP is text: minimize render-blocking CSS and fonts
Resource Loading
- ☐ Preconnect to critical third-party origins (
<link rel="preconnect">) - ☐ DNS-prefetch for secondary third parties
- ☐ Defer non-critical JavaScript (
deferorasyncattributes) - ☐ Inline critical CSS (above-the-fold styles) in
<head> - ☐ Remove unused CSS — target under 50KB of render-blocking CSS
- ☐ Bundle and minify JavaScript — eliminate main-thread blocking over 50ms
INP Optimization: The New Metric Most Sites Fail
INP replaced FID because FID only measured the first interaction. INP measures every interaction throughout the page lifecycle — clicks, taps, keyboard input. It’s significantly harder to pass.
JavaScript Execution
- ☐ Audit Long Tasks (over 50ms) in Chrome DevTools Performance tab
- ☐ Break long tasks into smaller chunks using
scheduler.yield()orsetTimeout - ☐ Offload heavy computation to Web Workers
- ☐ Remove or defer third-party scripts that execute on interaction
- ☐ Use
requestAnimationFramefor visual updates triggered by user input - ☐ Avoid layout thrashing (reading then writing DOM in loops)
- ☐ Minimize JavaScript bundle size — aim for under 300KB total (uncompressed)
Event Handler Optimization
- ☐ Ensure event handlers return in under 100ms
- ☐ Move expensive work after the visual update completes
- ☐ Avoid synchronous XHR calls inside event handlers
- ☐ Use passive event listeners for scroll and touch events
- ☐ Debounce high-frequency input events (search boxes, resize handlers)
Third-Party Impact
- ☐ Audit every third-party script for INP impact using WebPageTest
- ☐ Load chat widgets, analytics, and tag managers asynchronously
- ☐ Use Partytown for moving third-party scripts to Web Workers
- ☐ Remove abandoned or redundant tag manager tags
CLS Optimization: Stop Your Page From Jumping
CLS measures unexpected layout shifts — ads that pop in, fonts that swap, images that load without reserved space. In 2026, with more dynamic content and AI-generated page elements, CLS has become harder to control.
Image and Media
- ☐ Set explicit
widthandheightattributes on all<img>tags - ☐ Use CSS
aspect-ratiofor responsive images - ☐ Reserve space for dynamically loaded images
- ☐ Set dimensions on video embeds and iframes
- ☐ Avoid injecting content above existing content after load
Font Loading
- ☐ Use
font-display: optionalfor non-critical fonts - ☐ Use
font-display: swapwithsize-adjustto reduce layout shift from font swap - ☐ Preload critical fonts:
<link rel="preload" as="font"> - ☐ Self-host fonts instead of relying on Google Fonts DNS lookup
- ☐ Use
font-synthesis: noneto prevent synthetic bold/italic rendering
Ads and Dynamic Content
- ☐ Reserve space for ad units — use min-height containers
- ☐ Load ads into placeholder containers (not injected above content)
- ☐ Use
content-visibility: autocarefully — it can cause CLS if height isn’t reserved - ☐ Test sticky headers and nav elements for shift triggers
- ☐ Audit cookie consent banners — they’re a top CLS offender
TTFB and Server Performance
TTFB is upstream of all three Core Web Vitals. A slow server makes LCP, INP, and CLS all harder to fix. Google now includes TTFB in its technical recommendations even though it’s not a direct ranking signal (yet).
- ☐ Measure TTFB from real users via CrUX (not just lab tools)
- ☐ Target TTFB under 800ms for 75th percentile
- ☐ Enable full-page caching for anonymous users (WordPress: WP Rocket, W3 Total Cache)
- ☐ Move to edge/CDN-based rendering for static pages
- ☐ Optimize database queries — audit slow queries with
EXPLAIN - ☐ Enable object caching (Redis/Memcached) for dynamic pages
- ☐ Review hosting plan — shared hosting cannot consistently hit TTFB targets
Mobile-Specific Optimizations
Google’s ranking is mobile-first. Your Core Web Vitals score on mobile is what counts. The thresholds are the same, but mobile devices have slower CPUs, higher latency, and less memory — making the targets harder to hit.
- ☐ Test with real mobile devices, not just desktop DevTools throttling
- ☐ Reduce Total Blocking Time (TBT) under 200ms on mid-range Android devices
- ☐ Avoid large DOM sizes — target under 1500 nodes
- ☐ Minimize main thread work under 4 seconds total
- ☐ Remove mobile-only pop-ups and interstitials (Google penalty risk)
- ☐ Use responsive images with
srcsetandsizesattributes - ☐ Ensure tap targets are 48×48px minimum with 8px spacing
- ☐ Test on 3G/4G throttled network in Chrome DevTools
Monitoring and Ongoing Measurement
Core Web Vitals are field data — they change as your audience, content, and third-party tools change. One audit isn’t enough. You need continuous monitoring.
Tools to Use
- Google Search Console: Core Web Vitals report — groups pages by URL pattern
- PageSpeed Insights: Lab + field data per URL
- Chrome User Experience Report (CrUX): Real user data at origin and URL level
- WebPageTest: Deep waterfall analysis with INP tracing
- Lighthouse CI: Automated lab tests in your CI/CD pipeline
- SpeedCurve / Calibre: Continuous real-user monitoring with alerting
Process
- ☐ Run weekly automated Lighthouse CI on your top 20 URLs
- ☐ Review Search Console Core Web Vitals report monthly
- ☐ Set alerts for CrUX degradation (SpeedCurve or custom BigQuery queries)
- ☐ Re-test after every major deployment or third-party script change
- ☐ Track Core Web Vitals by template type (home, category, post, product)
Quick Wins: The 20% That Gets 80% of the Improvement
If you’re starting from scratch, these five changes deliver the most improvement for the least effort:
- Add
fetchpriority="high"to your LCP image. This alone can cut LCP by 0.5–1.5 seconds on image-heavy pages. - Self-host your web fonts. Eliminates the external DNS lookup and reduces font render delay.
- Set image dimensions. One attribute change that eliminates most CLS on content pages.
- Defer tag manager loads by 2 seconds. Most analytics fires don’t need to block the initial render.
- Upgrade your hosting or enable full-page caching. If TTFB is over 1.5 seconds, nothing else matters until you fix this.
Run this checklist quarterly. Core Web Vitals aren’t a set-and-forget optimization — they require the same attention as your content and link strategy. The sites that dominate search results in 2026 aren’t necessarily the ones with the best content. They’re the ones with the best content and the fastest, most stable user experience.
Our team has optimized 400+ sites for Core Web Vitals. We identify exactly what’s slowing you down and fix it.
Frequently Asked Questions
How often does Google update Core Web Vitals thresholds?
Google typically reviews and updates thresholds annually, though major changes (like the FID-to-INP switch) come with 12+ months of notice. Stay current with Google’s Web.dev blog for official announcements.
Do Core Web Vitals affect all pages equally?
Yes — Google evaluates each URL individually and groups similar templates together in Search Console. A slow checkout page hurts your e-commerce rankings even if your homepage is fast.
Can I pass Core Web Vitals with a page builder like Elementor or Divi?
It’s harder but possible. These builders add significant JavaScript and CSS overhead. You’ll need aggressive optimization — object caching, CSS minification, and removing unused builder scripts from non-page-builder pages.
What’s more important: lab scores or field data?
Field data (from real users via CrUX) is what Google uses for ranking. Lab scores (Lighthouse) are diagnostic tools. Optimize for field data; use lab scores to debug specific issues.
How does INP differ from FID and why does it matter more?
FID only measured the delay before the browser processed the first user input. INP measures the full time from input to next visual update, across all interactions on the page. It’s a much more complete picture of responsiveness — and much harder to game.
Does a CDN alone fix Core Web Vitals?
A CDN primarily improves TTFB and LCP by serving static assets from edge locations. It won’t fix INP issues (those are JavaScript execution problems) or CLS issues (those are layout stability problems). It’s one piece of the puzzle, not the whole solution.



