Uncompressed text responses

Whether any text response shipped uncompressed.

Field data PhoneDesktopAll Scope All sites Q2 2026 edition · Phone 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 CLS)
Without (median CLS)
The State of Web Vitals · Q2 2026 · 189,915 sites · phone 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: CLS —, 0.0% pass. Without: CLS —, 0.0% pass. computed

The State of Web Vitals · Q2 2026 · 189,915 sites · phone 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: 22.9 ms
SELECT m.headers.has_uncompressed_text AS val, COUNT(*) AS n,
            quantile_disc(crux."phone".cls, 0.5) AS median,
            COUNT(*) FILTER (WHERE crux."phone".cls IS NOT NULL AND crux."phone".cls <= 0.1) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."phone".cls IS NOT NULL), 0) AS good,
            COUNT(*) FILTER (WHERE crux."phone".cls IS NOT NULL AND crux."phone".cls > 0.1 AND crux."phone".cls <= 0.25) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."phone".cls IS NOT NULL), 0) AS ni,
            COUNT(*) FILTER (WHERE crux."phone".cls IS NOT NULL AND crux."phone".cls > 0.25) * 1.0 / NULLIF(COUNT(*) FILTER (WHERE crux."phone".cls 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 0.79 ms
20260625/loaf-scripts.json 0.59 ms
20260625/menu.json 0.18 ms