Scripts and stylesheets are sent without compression
What this check looks for
‹count› text file(s) this page loads — JavaScript, CSS, JSON or SVG — arrived uncompressed. Compressing them would save an estimated ‹savings bytes› on every visit.
Why it matters
Text compresses by roughly 70–90%. This is a server setting, not a code change, and it is the largest saving per minute of work available on most sites.
When the check passes, your report says: “Scripts and stylesheets arrive compressed”.
What it costs your score
When this check fails it removes 8 points from your Performance score, before the status, confidence and repeat multipliers are applied. Performance carries a weight of 8 in the overall score.
It shares the performance.assets family ceiling of 25 points: however many findings that family produces, together they cannot remove more than that from Performance. One underlying problem showing up in several places is still one problem.
- Severity
- medium
- Default confidence
- high
- Status when triggered
- warn
- Deduction
- 8 points
- Family cap
- performance.assets · 25
- Category
- Performance
- Module
- Perf lab
- Fix owned by
- user
- In the ruleset since
- 2026.09
How to fix it
Turn on gzip or Brotli compression for text responses on whatever serves your static assets.
An estimated ‹savings bytes› of compressible text is being sent in full on every visit, for the sake of one server setting.
Find out what actually serves these files. The paths in this finding will tell you whether it is your web server, a CDN, or an object store — the setting lives wherever that is.
Enable compression for
text/*,application/javascript,application/jsonandimage/svg+xml. Do not compress images, video or WOFF2 fonts; they are already compressed.Prefer Brotli where the server supports it, with gzip as the fallback for clients that do not ask for
br.Make sure
Vary: Accept-Encodingis sent, or a shared cache may hand a compressed body to a client that cannot read it.If the assets are on an object store that cannot compress on the fly, pre-compress at build time and upload both variants with the right
Content-Encoding.
How to confirm it worked
Re-run this scan and confirm the uncompressed count has dropped.
curl -sSI -H 'Accept-Encoding: br, gzip' https://‹host›/path/to/app.js | grep -i 'content-encoding' — expect
brorgzip
A named slot like ‹domain› — and the braces left in the configuration below — is filled in with your own values when this rule appears on a report.
Remediation by platform
gzip on;
gzip_vary on;
gzip_min_length 256;
gzip_types text/css application/javascript application/json image/svg+xml;
# Brotli, only if the ngx_brotli module is compiled in:
# brotli on;
# brotli_types text/css application/javascript application/json image/svg+xml;<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/css application/javascript application/json image/svg+xml
</IfModule>
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/css application/javascript application/json image/svg+xml
</IfModule>encode zstd gziptext/htmlis compressed by nginx unconditionally and must not appear ingzip_types— listing it logs a duplicate-MIME warning. Brotli is not in a stock nginx build;nginx -Vwill tell you whetherngx_brotliis present before you uncomment those lines.mod_deflate adds
Vary: Accept-Encodingitself. mod_brotli ships with Apache 2.4.26 and later but is off by default —a2enmod brotli— and the IfModule guard keeps the config valid until it is enabled.Caddy's
encodenegotiates the encoding and setsVary: Accept-Encodingon its own. A stock build offers gzip and zstd, not Brotli, so do not writeencode brand expect it to take effect.
Technical detail
Uncompressed text subresources: ‹count›, estimated saving **‹savings bytes›**.
‹detail›
This came from **one page load we performed**, not from your visitors. A lab measurement is reproducible and tells you exactly which bytes and which resources are responsible — which is why the numbers below are byte counts and resource lists rather than a score. What real visitors experience is in the field-data section, which is the evidence this report scores Core Web Vitals on.
**This finding is about the files the page loads, not about the page itself.** The main document's compression is checked separately by http.headers.compression-not-applied, which fetches that response directly and reports on it there. If you see both findings, they are two different responses and both need fixing; if you see only this one, the HTML is compressed and the assets are not — which usually means a separate asset host, a CDN or a storage bucket that was configured independently of the web server.
Brotli beats gzip on text by a further 15–20% and every current browser supports it, but the negotiation is per-server: check what your asset host actually offers before assuming. Compressing already-compressed formats (images, video, fonts in WOFF2) wastes CPU for no gain and should stay off.
Standards and references
Test this on your domain
Run the check that produces this finding, on its own, against any domain.
Other perf lab checks
- The page ships more JavaScript than it uses
- Images are served in older, heavier formats
- Images are much larger than the space they are shown in
- Lab measurement of one page load
- Stylesheets and scripts stop the page from rendering
- This report never publishes a headline performance score
- Static files are re-downloaded because they are barely cached
- The page was not measured in a browser