Direct answer: the 36 article pages hold 4.22 MB of raw HTML. Recompressed locally, gzip -9 gives 663 KB (15.7%) and brotli -q11 gives 493 KB (11.7%). A live probe of one article URL per site across the same 10 sites found 10/10 returning gzip and 0/10 using brotli; the median wire/decoded ratio was 26.9% (14.4%–45.8%).
So the 4.22 MB in study 89 is document size, not transfer size. But "gzip is on" does not mean the better codec is in use: in this probe no site returned brotli.
Method: local recompression plus live encoding probe
Local: the 36 cached article pages from study 83 (the same files as study 89) are compressed with gzip.compress(data, 9) and brotli.compress(data, quality=11), then raw, gzip and brotli sizes are compared. This is a laboratory ceiling, not a server default.
Live: for the 10 sites that own those 36 pages, one status-200 article URL per site was requested once with Accept-Encoding: gzip, br. We recorded HTTP status, Content-Encoding, Content-Type, wire bytes, decoded bytes, errors and time; 1.5 s between sites and a 25 s timeout.
| Item | Local recompression | Live probe |
|---|---|---|
| Sample | 36 cached HTML pages | One URL per site, 10 sites |
| Compared | raw / gzip / brotli bytes | wire / decoded bytes |
| Level | gzip 9, brotli quality 11 | Server's actual choice |
| Represents the site? | No; only this HTML's compressibility | No; one URL is a probe |
Result: gzip 15.7%, brotli 11.7%
| Codec | Raw | Compressed | Of raw | Saved |
|---|---|---|---|---|
| gzip -9 | 4,220,772 | 663,075 | 15.7% | 84.3% |
| brotli -q11 | 4,220,772 | 493,187 | 11.7% | 88.3% |
| brotli vs gzip | 663,075 | 493,187 | 74.4% | 25.6% |
Per page, the median gzip share was 15.9% (10.0%–34.9%) and the median brotli share 11.3% (7.1%–27.4%). The best compression came from pages dominated by SVG/template markup; the weakest from pages with more text and less repetition.
| Compressed share | gzip pages | brotli pages |
|---|---|---|
| Below 12% (brotli below 9%) | 6 | 11 |
| 12%–16% (brotli 9%–12%) | 12 | 8 |
| 16%–20% (brotli 12%–16%) | 10 | 9 |
| Above 20% (brotli above 16%) | 8 | 8 |
Live: all 10 sites use gzip, none use brotli
| Site | Status | Content-Encoding | Wire bytes | Decoded bytes | Wire/decoded |
|---|---|---|---|---|---|
| E03 | 200 | gzip | 14,859 | 55,494 | 26.8% |
| E06 | 200 | gzip | 10,890 | 37,682 | 28.9% |
| E09 | 200 | gzip | 16,639 | 85,423 | 19.5% |
| E14 | 200 | gzip | 13,673 | 72,143 | 19.0% |
| E16 | 200 | gzip | 8,716 | 19,026 | 45.8% |
| E19 | 200 | gzip | 5,034 | 22,160 | 22.7% |
| E22 | 200 | gzip | 22,530 | 156,701 | 14.4% |
| E23 | 200 | gzip | 83,342 | 308,340 | 27.0% |
| E26 | 200 | gzip | 11,816 | 37,100 | 31.8% |
| E28 | 200 | gzip | 8,573 | 26,928 | 31.8% |
Live pages may differ from the 2026-11-03 cache (for example, E03 decoded to 55,494 bytes while the cached raw was 155,211 bytes), so this table compares wire and decoded within the same response and never subtracts live bytes from the cached raw.
Across the 10 URLs, wire totalled 196,072 bytes and decoded 820,997 bytes, or 23.9%. Those are current live pages, not the cached 4.22 MB; the two sets must not be mixed.
More SVG, better compression
Pairing the inline-SVG share from study 89 with this study's gzip share on the same page gives a Pearson correlation of -0.568 across 36 pages: a higher SVG/template share goes with a lower gzip share. This is an association, not causation; it fits the intuition that repeated structure compresses well, but it does not make SVG free — it still adds parsing, memory and bytes before compression.
Why local 15.7% differs from live 26.9%
The two numbers are not directly comparable. Local uses gzip -9 / brotli -q11 on the cached document; live uses whatever level the server picks for the current page, whose content and size may differ from the 3 November cache. The higher live median could come from a lower gzip level, different content or dynamic pages, but this study did not inspect server configuration and does not attribute a cause.
What this means for acceptance
- Record document size and transfer size separately. 4.22 MB of HTML becomes about 663 KB under gzip; reporting raw size alone overstates transfer pressure.
- Check Content-Encoding, not just page size. All 10 sites returned gzip and none returned brotli; enabling a codec is a server/CDN decision.
- Ask about brotli as an option. In this sample it was 25.6% smaller than gzip; the real gain depends on content and server level.
- One URL is not the whole site. Paths, content types and edge nodes can differ; acceptance should cover the home page, article pages and key landing pages.
- Compression is not a performance score. This study does not measure TTFB, LCP, parsing or CrUX; it is one transfer-size proxy.
Limits
- Local is a ceiling: gzip 9 / brotli 11 are not server defaults; the result only shows compressibility.
- Only 10 live URLs: one per site; not the whole site or all paths.
- Content may have changed: live decoded bytes differ from the 2026-11-03 cache and are not subtracted from it.
- HTML only: images, CSS, JS, fonts and HTTP headers are excluded.
- One time window: 2026-11-06 20:42; no cross-day recheck.
- Pilot: 10 sites, 36 pages; not an industry estimate.
Data and reproduction
Local: equipment-article-html-compression-2026.csv (36 rows × 9 columns: raw/gzip/brotli bytes and shares, saved percentage). Live: equipment-live-content-encoding-2026.csv (10 rows × 10 columns: status, Content-Encoding, Content-Type, wire/decoded bytes and shares, error, time). In-repo copies: docs/research/2026-11-article-html-compression.csv and 2026-11-live-content-encoding.csv.
Probe: scripts/article_html_compression_probe.py (local and live subcommands); tests: scripts/test_article_html_compression_probe.py (no network, 7 tests covering gzip/brotli compression, decoding, percentages and unknown encodings). Run:
python -m unittest scripts.test_article_html_compression_probe
Related: the article HTML weight composition pilot, the article image-delivery pilot, and the homepage resource inventory.
Sources and definitions
- Cached pages: study 83, 10 sites and 36 pages (2026-11-03 08:40–08:41).
- Local compression: 2026-11-06, gzip -9 and brotli quality 11 on UTF-8 raw bytes.
- Live probe: 2026-11-06 20:42, one URL per site, Accept-Encoding: gzip, br.
- Statuses and encodings are recorded as returned; no inference is made about unreturned codecs.
Related: the article inline-SVG duplication pilot.