Uncompressed text responses

Whether any text response shipped uncompressed.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · All devices field outcomes
Metric LCP INP CLS
1

At a glance the headline numbers for Uncompressed text responses

Whether any text response shipped uncompressed.

0.0%
Adoption
0 of 0
With (median LCP)
Without (median LCP)
The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
2

Uncompressed text responses sites that have it vs sites that don't

Uncompressed text responses
0%

0.0% of sites serve uncompressed text resources (0 of 0). With serve: LCP —, 0.0% pass. Without: LCP —, 0.0% pass. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · all devices field datacorewebvitals.io/state-of-cwv
3

Why this matters for the Core Web Vitals, and where to start fixing it

One uncompressed text response is usually a configuration gap, not a decision. A server that compresses HTML but forgets SVG. An API endpoint that bypasses the CDN. The cost lands wherever the file sits: an uncompressed stylesheet delays rendering and the LCP, an uncompressed JSON response delays whatever waited for it.

Compression is a server or CDN switch. Find the response, find why it bypassed the rule, turn it on. The compression mix page shows how the rest of the fleet does.

Related signals Cacheable responses → Requests via CDN → HTML size (kB) → Main CDN → Chrome field data from 189,915 sites, representing millions of real page loads · How we measured
Live queries (1) — admin only
Query #1: 18.2 ms
SELECT m.headers.has_uncompressed_text AS val, COUNT(*) AS n,
            quantile_disc(crux."all".lcp, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL AND crux."all".lcp <= 2500) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL), 0) AS good,
            COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL AND crux."all".lcp > 2500 AND crux."all".lcp <= 4000) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL), 0) AS ni,
            COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL AND crux."all".lcp > 4000) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."all".lcp IS NOT NULL), 0) AS poor
            FROM sites WHERE 1=1 GROUP BY m.headers.has_uncompressed_text;
JSON file lookups (4)
20260625/meta.json 0.04 ms
20260625/types.json 2.80 ms
20260625/loaf-scripts.json 0.54 ms
20260625/menu.json 0.16 ms