Core Web Vitals Optimization Checklist for SEO
Pass Core Web Vitals with this optimization checklist. Covers LCP, INP, and CLS with specific thresholds, diagnostic steps, and fix priorities.
Overview
Core Web Vitals are Google’s page experience metrics that directly influence search rankings. This checklist covers all three metrics — LCP, INP, and CLS — with specific diagnostic steps, fix priorities, and validation procedures.
Metric Thresholds
| Metric | Good | Needs Improvement | Poor |
|---|---|---|---|
| Largest Contentful Paint (LCP) | ≤ 2.5s | 2.5s – 4.0s | > 4.0s |
| Interaction to Next Paint (INP) | ≤ 200ms | 200ms – 500ms | > 500ms |
| Cumulative Layout Shift (CLS) | ≤ 0.1 | 0.1 – 0.25 | > 0.25 |
Target: All three metrics must be in the “Good” range at the 75th percentile of page loads (field data).
LCP Optimization Checklist
Server Response
- TTFB (Time to First Byte) is under 800ms
- Server-side rendering or static generation is in place
- CDN is configured for all geographic regions
- HTTP/2 or HTTP/3 is enabled
- Server compression (gzip/Brotli) is active
Resource Loading
- LCP element is identified (usually hero image or heading)
- LCP image has
fetchpriority="high"attribute - LCP image is NOT lazy loaded
- LCP image uses
<link rel="preload">if not in initial HTML - LCP image is in modern format (WebP/AVIF) with appropriate compression
- LCP image
srcsetprovides correctly sized variants
Render Blocking
- Critical CSS is inlined in
<head> - Non-critical CSS is deferred with
mediaattribute or loaded async - JavaScript is deferred or async (no render-blocking scripts)
- Third-party scripts are loaded after LCP
- Web fonts use
font-display: swaporfont-display: optional - Font files are preloaded:
<link rel="preload" as="font">
INP Optimization Checklist
JavaScript Performance
- Total JavaScript bundle size under 300 KB (compressed)
- Long tasks (50ms+) are identified and broken up
- Heavy computations use Web Workers
- Event handlers are debounced/throttled where appropriate
-
requestAnimationFrameis used for visual updates -
requestIdleCallbackis used for non-urgent work
Input Responsiveness
- Click handlers respond within 200ms
- Form inputs have no perceptible lag
- Dropdown menus open instantly
- Navigation transitions are smooth
- No JavaScript errors blocking interaction
Third-Party Scripts
- Analytics scripts are loaded async
- Chat widgets are lazy loaded
- Ad scripts are deferred
- Social embeds are loaded on interaction
- Total third-party script impact is measured and acceptable
CLS Optimization Checklist
Images and Media
- All
<img>elements have explicitwidthandheightattributes - All
<video>and<iframe>elements have explicit dimensions - CSS
aspect-ratiois set for responsive media containers - No images load without reserved space
Fonts
- Web fonts use
font-display: swap(or better,optional) -
size-adjustis configured for fallback fonts to match web font metrics - Font files are preloaded to minimize swap time
Dynamic Content
- No content injected above existing content after load
- Cookie consent banners use fixed positioning (not push content)
- Ad slots have reserved space with min-height
- Lazy-loaded content has placeholder dimensions
- No dynamically resizing elements in the viewport
Animations
- CSS animations use
transformandopacityonly (no layout-triggering properties) - No
top,left,width,heightanimations on visible elements - Transitions use
will-changesparingly and appropriately
Diagnostic Tools
| Tool | What It Measures | Data Type |
|---|---|---|
| Google PageSpeed Insights | All CWV | Lab + Field |
| Chrome UX Report (CrUX) | All CWV | Field (28-day) |
| Chrome DevTools Performance | All CWV | Lab |
| Web Vitals JS library | All CWV | Real User Monitoring |
| Google Search Console | All CWV | Field |
| Auditite | All CWV + page-level detail | Lab + monitoring |
Page-Level Audit Worksheet
| URL | LCP (s) | LCP Element | INP (ms) | CLS | Pass/Fail | Priority Fix |
|---|---|---|---|---|---|---|
Fix Priority Order
| Priority | Fix Category | Typical Impact |
|---|---|---|
| 1 | Server response time (TTFB) | Improves LCP across all pages |
| 2 | LCP image optimization | Directly improves LCP |
| 3 | Render-blocking resources | Improves LCP |
| 4 | Image dimension attributes | Directly fixes CLS |
| 5 | Font loading strategy | Fixes CLS + improves LCP |
| 6 | JavaScript optimization | Improves INP |
| 7 | Third-party script management | Improves INP + LCP |
| 8 | Dynamic content handling | Fixes CLS |
Validation Process
- Implement fixes on staging environment
- Test with Chrome DevTools (lab data) — verify improvements
- Deploy to production
- Monitor field data in CrUX / Search Console (takes 28 days for full cycle)
- Verify at 75th percentile threshold
- Re-audit with Auditite to confirm all pages pass
Auditite monitors Core Web Vitals across every page on your site, alerting you when pages fall below thresholds and providing specific fix recommendations.
Related templates
Core Web Vitals Optimization Framework for SEO
Systematic framework for diagnosing and fixing Core Web Vitals issues. Covers LCP, INP, and CLS with prioritized action steps.
TemplateImage Optimization Audit Template with Auditite
Audit and optimize images across your entire site with this template. Covers format selection, compression targets, alt text, and lazy loading.
WorksheetAI SEO Automation Worksheet with Auditite
Plan and track AI-powered SEO automation across auditing, content, and fixes. Identify automation opportunities and measure time savings.
Want the how-to behind this template?
Check out our playbooks for step-by-step audit process guides.