seo-performance — Core Web Vitals & Page Performance
Core Web Vitals Thresholds (2026)
| Metric |
Good |
Needs Improvement |
Poor |
| LCP (Largest Contentful Paint) |
≤2.5s |
2.5s–4.0s |
>4.0s |
| INP (Interaction to Next Paint) |
≤200ms |
200ms–500ms |
>500ms |
| CLS (Cumulative Layout Shift) |
≤0.1 |
0.1–0.25 |
>0.25 |
INP replaced FID on March 12, 2024. FID fully removed September 9, 2024. Never reference FID.
Key Statistics (2026)
- 77% of mobile pages now achieve "good" INP (up from 55% in 2022)
- 57.1% desktop / 49.7% mobile pass all three CWV (Oct 2025)
- December 2025 core update: Mobile CWV weighted more heavily in ranking calculations
- CWV evaluated at 75th percentile of field data — 75% of visits must meet "good"
HTTP/3 & QUIC Analysis
HTTP/3 reached 35% global adoption (2025), reducing mobile latency by 30%.
Check HTTP/3 Support
curl -sI --http3 https://example.com | grep -i "HTTP/3"
# Or check via headers:
curl -sI https://example.com | grep -i "alt-svc"
HTTP/3 Scoring
| Status |
Score |
Recommendation |
| HTTP/3 enabled (Alt-Svc header present) |
100 |
Excellent |
| HTTP/2 only |
50 |
Enable HTTP/3 at CDN level (Cloudflare: default, AWS CloudFront: opt-in) |
| HTTP/1.1 |
0 |
Upgrade immediately — significant performance penalty |
HTTP/3 is NOT a direct ranking factor but improves TTFB and LCP subparts measurably.
LCP Subpart Diagnostics (Feb 2025 CrUX Addition)
Break down LCP into 4 subparts for targeted optimization:
| Subpart |
What It Measures |
Target |
| TTFB |
Server response time |
<800ms |
| Resource Load Delay |
Time before LCP resource starts loading |
Minimize (preload) |
| Resource Load Time |
Time to download LCP resource |
Compress, CDN, modern formats |
| Element Render Delay |
Time from resource loaded to rendered |
Reduce render-blocking CSS/JS |
Performance Tooling (2025-2026)
- Lighthouse 13.0 (Oct 2025): Major audit restructuring, updated scoring weights
- CrUX Vis (Nov 2025): Replaced old Looker Studio CrUX Dashboard
- LCP subparts in CrUX (Feb 2025): TTFB, load delay, load time, render delay now available
- GSC 2025 (Dec 2025): AI-powered config suggestions, brand vs non-brand filters, hourly API data
Common Performance Issues
LCP Issues
- Unoptimized hero images → compress, WebP/AVIF,
<link rel="preload">
- Render-blocking CSS/JS → defer, async, critical CSS inline
- Slow TTFB >800ms → edge CDN, server-side caching
- Web font loading delay →
font-display: swap, preload
INP Issues
- Long JavaScript tasks >50ms → break into smaller chunks
- Heavy event handlers → debounce, requestAnimationFrame
- Excessive DOM >1,500 elements → virtualize lists
- Third-party scripts blocking main thread → async/defer
CLS Issues
- Images without width/height → always set dimensions or
aspect-ratio
- Dynamically injected content → reserve space with min-height
- Web fonts FOIT/FOUT →
font-display: optional or swap
- Ads/embeds without reserved space → explicit container sizing
Scoring
| Category |
Weight |
| LCP |
35% |
| INP |
30% |
| CLS |
15% |
| HTTP/3 |
10% |
| Resource optimization |
10% |
PageSpeed Insights API v5
Quick Test
curl -s "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&strategy=mobile&category=performance&category=seo" \
| jq '{performance: .lighthouseResult.categories.performance.score, seo: .lighthouseResult.categories.seo.score, lcp: .loadingExperience.metrics.LARGEST_CONTENTFUL_PAINT_MS, inp: .loadingExperience.metrics.INTERACTION_TO_NEXT_PAINT, cls: .loadingExperience.metrics.CUMULATIVE_LAYOUT_SHIFT_SCORE}'
Lab Data vs Field Data
| Aspect |
Lab (Lighthouse) |
Field (CrUX) |
| Source |
Simulated |
Real Chrome users |
| Metrics |
LCP, TBT, CLS, SI, FCP |
LCP, INP, CLS, FCP, TTFB |
| Use case |
Debugging, pre-launch |
Ranking signal, trend analysis |
| Availability |
Any URL |
URLs with sufficient traffic only |
Lighthouse CI for CI/CD
Set performance budgets in CI pipelines:
- LCP budget: 2500ms
- TBT budget: 200ms (lab proxy for INP)
- CLS budget: 0.1
- Fail build if budgets exceeded
CrUX API (Field Data)
Query Real User Metrics
POST https://chromeuxreport.googleapis.com/v1/records:queryRecord?key={API_KEY}
{
"url": "https://example.com/page",
"formFactor": "PHONE",
"metrics": ["largest_contentful_paint", "interaction_to_next_paint", "cumulative_layout_shift"]
}
CrUX History API (2024)
- 25 weekly data points for trend analysis
- Detect performance regressions over time
- Correlate CWV changes with ranking changes
CrUX Vis (Nov 2025)
Replaced old Looker Studio CrUX Dashboard. Provides visual performance trends.
Reference Files
Load on-demand: references/cwv-thresholds.md for detailed thresholds, SPA handling, and measurement methodology.
Cross-reference: seo-data-tools skill for comprehensive GSC/GA4/PSI/CrUX integration guidance.
Output Format
Generate performance report with:
- Performance Score (0-100)
- CWV Status (pass/fail per metric with values)
- HTTP/3 Status (enabled/disabled with Alt-Svc header)
- LCP Subpart Breakdown (identify bottleneck subpart)
- PSI Lab vs Field Comparison (if both available)
- CrUX Trend (if history data available — improving/stable/degrading)
- Prioritized Recommendations (by expected impact)
1---2name: seo-performance3description: Core Web Vitals and page performance analysis. Measures LCP, INP, CLS with current thresholds. Checks HTTP/3 adoption, Lighthouse 13.0 scoring, CrUX field data, and LCP subpart diagnostics. Use when user says "page speed", "performance", "Core Web Vitals", "CWV", "LCP", "INP", "CLS", "HTTP/3".4---56# seo-performance — Core Web Vitals & Page Performance78## Core Web Vitals Thresholds (2026)910| Metric | Good | Needs Improvement | Poor |11|--------|------|-------------------|------|12| **LCP** (Largest Contentful Paint) | ≤2.5s | 2.5s–4.0s | >4.0s |13| **INP** (Interaction to Next Paint) | ≤200ms | 200ms–500ms | >500ms |14| **CLS** (Cumulative Layout Shift) | ≤0.1 | 0.1–0.25 | >0.25 |1516**INP replaced FID** on March 12, 2024. FID fully removed September 9, 2024. Never reference FID.1718## Key Statistics (2026)1920- **77% of mobile pages** now achieve "good" INP (up from 55% in 2022)21- **57.1% desktop / 49.7% mobile** pass all three CWV (Oct 2025)22- **December 2025 core update**: Mobile CWV weighted more heavily in ranking calculations23- CWV evaluated at **75th percentile** of field data — 75% of visits must meet "good"2425## HTTP/3 & QUIC Analysis2627HTTP/3 reached **35% global adoption** (2025), reducing mobile latency by **30%**.2829### Check HTTP/3 Support30```bash31curl -sI --http3 https://example.com | grep -i "HTTP/3"32# Or check via headers:33curl -sI https://example.com | grep -i "alt-svc"34```3536### HTTP/3 Scoring37| Status | Score | Recommendation |38|--------|-------|----------------|39| HTTP/3 enabled (Alt-Svc header present) | 100 | Excellent |40| HTTP/2 only | 50 | Enable HTTP/3 at CDN level (Cloudflare: default, AWS CloudFront: opt-in) |41| HTTP/1.1 | 0 | Upgrade immediately — significant performance penalty |4243HTTP/3 is NOT a direct ranking factor but improves TTFB and LCP subparts measurably.4445## LCP Subpart Diagnostics (Feb 2025 CrUX Addition)4647Break down LCP into 4 subparts for targeted optimization:4849| Subpart | What It Measures | Target |50|---------|-----------------|--------|51| **TTFB** | Server response time | <800ms |52| **Resource Load Delay** | Time before LCP resource starts loading | Minimize (preload) |53| **Resource Load Time** | Time to download LCP resource | Compress, CDN, modern formats |54| **Element Render Delay** | Time from resource loaded to rendered | Reduce render-blocking CSS/JS |5556## Performance Tooling (2025-2026)5758- **Lighthouse 13.0** (Oct 2025): Major audit restructuring, updated scoring weights59- **CrUX Vis** (Nov 2025): Replaced old Looker Studio CrUX Dashboard60- **LCP subparts in CrUX** (Feb 2025): TTFB, load delay, load time, render delay now available61- **GSC 2025** (Dec 2025): AI-powered config suggestions, brand vs non-brand filters, hourly API data6263## Common Performance Issues6465### LCP Issues66- Unoptimized hero images → compress, WebP/AVIF, `<link rel="preload">`67- Render-blocking CSS/JS → defer, async, critical CSS inline68- Slow TTFB >800ms → edge CDN, server-side caching69- Web font loading delay → `font-display: swap`, preload7071### INP Issues72- Long JavaScript tasks >50ms → break into smaller chunks73- Heavy event handlers → debounce, requestAnimationFrame74- Excessive DOM >1,500 elements → virtualize lists75- Third-party scripts blocking main thread → async/defer7677### CLS Issues78- Images without width/height → always set dimensions or `aspect-ratio`79- Dynamically injected content → reserve space with min-height80- Web fonts FOIT/FOUT → `font-display: optional` or `swap`81- Ads/embeds without reserved space → explicit container sizing8283## Scoring8485| Category | Weight |86|----------|--------|87| LCP | 35% |88| INP | 30% |89| CLS | 15% |90| HTTP/3 | 10% |91| Resource optimization | 10% |9293## PageSpeed Insights API v59495### Quick Test96```bash97curl -s "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://example.com&strategy=mobile&category=performance&category=seo" \98 | jq '{performance: .lighthouseResult.categories.performance.score, seo: .lighthouseResult.categories.seo.score, lcp: .loadingExperience.metrics.LARGEST_CONTENTFUL_PAINT_MS, inp: .loadingExperience.metrics.INTERACTION_TO_NEXT_PAINT, cls: .loadingExperience.metrics.CUMULATIVE_LAYOUT_SHIFT_SCORE}'99```100101### Lab Data vs Field Data102| Aspect | Lab (Lighthouse) | Field (CrUX) |103|--------|-----------------|--------------|104| Source | Simulated | Real Chrome users |105| Metrics | LCP, TBT, CLS, SI, FCP | LCP, INP, CLS, FCP, TTFB |106| Use case | Debugging, pre-launch | Ranking signal, trend analysis |107| Availability | Any URL | URLs with sufficient traffic only |108109### Lighthouse CI for CI/CD110Set performance budgets in CI pipelines:111- LCP budget: 2500ms112- TBT budget: 200ms (lab proxy for INP)113- CLS budget: 0.1114- Fail build if budgets exceeded115116## CrUX API (Field Data)117118### Query Real User Metrics119```120POST https://chromeuxreport.googleapis.com/v1/records:queryRecord?key={API_KEY}121{122 "url": "https://example.com/page",123 "formFactor": "PHONE",124 "metrics": ["largest_contentful_paint", "interaction_to_next_paint", "cumulative_layout_shift"]125}126```127128### CrUX History API (2024)129- 25 weekly data points for trend analysis130- Detect performance regressions over time131- Correlate CWV changes with ranking changes132133### CrUX Vis (Nov 2025)134Replaced old Looker Studio CrUX Dashboard. Provides visual performance trends.135136## Reference Files137138Load on-demand: `references/cwv-thresholds.md` for detailed thresholds, SPA handling, and measurement methodology.139140Cross-reference: `seo-data-tools` skill for comprehensive GSC/GA4/PSI/CrUX integration guidance.141142## Output Format143144Generate performance report with:1451. **Performance Score** (0-100)1462. **CWV Status** (pass/fail per metric with values)1473. **HTTP/3 Status** (enabled/disabled with Alt-Svc header)1484. **LCP Subpart Breakdown** (identify bottleneck subpart)1495. **PSI Lab vs Field Comparison** (if both available)1506. **CrUX Trend** (if history data available — improving/stable/degrading)1517. **Prioritized Recommendations** (by expected impact)