Panduan Compression (Gzip, Brotli, Zstd)
Bagaimana HTTP text compression berfungsi — Gzip vs Brotli vs Zstd, apa Googlebot sebenarnya mendukung, bagaimana ini feeds Core Web Vitals dan crawler fetch limits, dan cara enable dan verify ini oleh server. web-performa deep dive pada shrinking bytes pada wire.
Bahasa
Compression (HTTP konten encoding) shrinks text-based respons — HTML, CSS, JS, JSON, SVG, sitemap XML — sebelum mereka cross network, negotiated per permintaan melalui Accept-Encoding / konten-Encoding, dengan Vary: Accept-Encoding needed untuk pertahankan cached variants straight. Brotli biasanya melakukan better daripada Gzip pada text (sering cited sekitar 15–20% lebih kecil, tetapi itu's directional, tidak sebuah guaranteed ratio) dan adalah Google's stated preference ketika client mendukung ini; Gzip adalah universal fallback; Zstd adalah sebuah registered tetapi tidak universally didukung ketiga codec, dan Google's crawler docs jangan state Zstd mendukung untuk Googlebot. Googlebot explicitly mendukung gzip, deflate, dan Brotli (br) — stated plainly di Google's saat ini crawler docs, informally confirmed oleh Gary Illyes di 2020, dan rooted di Google's 2008 'pertama date dengan Googlebot' post. Compression tidak sebuah peringkat factor dan tidak jaminan sebuah TTFB/LCP atau Penelusuran improvement pada -nya own; ini reduces transfer size, yang dapat help TTFB dan LCP jika itu's sebenarnya Anda bottleneck, dan ini helps halaman stay di bawah Google's fetch limit (2 MB untuk HTML per Illyes' 2026 'Di dalam Googlebot' post). jangan blanket-exclude formats oleh extension alone — decide dari MIME jenis dan diukur output; sudah-compressed formats (images, video, WOFF2, sebagian besar PDFs) rarely benefit. gunakan lebih tinggi compression untuk static/pre-compressed assets dan sebuah lebih rendah/mid-range tingkat untuk dynamic konten, benchmarked terhadap Anda own traffic dan CPU headroom — Tidak single tingkat adalah universally best. BREACH-style risk adalah scoped untuk respons itu mix sebuah secret dengan attacker-reflected konten, tidak sebuah alasan untuk disable compression sitewide. dan Ya — Sitemaps protocol explicitly memungkinkan gzip-compressed sitemaps.
Evidence for this claim HTTP content coding compresses transferred representations and is negotiated with Accept-Encoding and Content-Encoding. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP compression Evidence for this claim Brotli is an HTTP content coding supported through the br encoding token. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 7932: BrotliTL;DR — Compression shrinks Anda text files — HTML, CSS, JavaScript — sebelum mereka’re dikirim di atas internet, so browser downloads fewer bytes dan halaman memuat lebih cepat (assuming itu’s sebenarnya Anda bottleneck). dua Anda’ll hear tentang adalah Gzip (berfungsi di mana-mana) dan Brotli (biasanya lebih kecil, dan Google’s preference) — persis bagaimana banyak lebih kecil varies oleh file, so jangan treat apa pun satu percentage sebagai sebuah promise. jika PageSpeed Insights ever told Anda untuk “Enable text compression,” (terjemahan) “aktifkan kompresi teks,” ini adalah perbaiki.
Apa compression adalah
Ketika seseorang memuat Anda halaman, mereka browser memiliki untuk download semua files itu membuat ini up. Compression adalah sebuah cara untuk membuat itu files lebih kecil sementara mereka travel, lalu memiliki browser unpack them di lainnya end. Tidak ada apa pun tentang halaman perubahan untuk pengunjung — mereka hanya mendapatkan ini lebih cepat.
ini berfungsi like sebuah quick handshake pada setiap permintaan:
- browser says, “di sini’s apa I dapat unpack” (terjemahan) “di sini’s apa I dapat unpack” — ini mengirim sebuah header called
Accept-Encodinglisting algorithms ini understands (likegzipdanbr). - server picks satu, compresses file dengan ini, dan mengirim back sebuah
Content-Encodingheader saying yang satu ini digunakan. - browser unpacks ini dan menampilkan halaman.
itu’s ini. ini happens secara otomatis, per file, dan Anda turn ini pada setelah di Anda server atau hosting settings.
dua Anda perlu know
- Gzip — old reliable. setiap browser dan mesin pencari mendukung ini. ini adalah safe default.
- Brotli — newer, developed di Google, dan biasanya membuat text files sebuah bit lebih kecil daripada Gzip. Ketika sebuah browser mendukung Brotli, Google says untuk gunakan ini — dengan Gzip sebagai fallback untuk apa pun itu tidak.
Anda’ll juga mulai seeing Zstandard (Zstd), sebuah ketiga option itu’s fast untuk unpack, tetapi ini adalah masih early dan tidak widely digunakan namun.
Apa compression adalah tidak
- ini adalah tidak minification. Minifying strips out spaces dan comments dari Anda code; compression re-packs bytes untuk transfer. mereka’re berbeda jobs, dan Anda melakukan keduanya — minify pertama, lalu compress.
- ini adalah tidak caching. Caching saves sebuah copy so sebuah file tidak memiliki untuk menjadi dikirim again. Compression membuat file lebih kecil ketika ini adalah dikirim. (See caching untuk itu side.)
Apa untuk compress — dan apa untuk skip
Compress Anda text: HTML, CSS, JavaScript, JSON, SVG, dan XML files (including sitemaps).
jangan bother compressing files itu adalah sudah compressed — JPGs, PNGs, GIFs, sebagian besar videos, WOFF2 web fonts, dan sebagian besar PDFs. mereka tidak akan mendapatkan lebih kecil, dan squeezing them again hanya wastes effort. Google dibuat ini tepat poin back di 2008.
melakukan ini help SEO?
Indirectly. Compression adalah tidak sebuah peringkat factor pada -nya own. tetapi lebih kecil files berarti lebih cepat memuat, dan speed feeds Core Web Vitals, yang adalah bagian dari bagaimana Google judges pengalaman halaman. So Anda enable compression karena ini membuat Anda situs lebih cepat — tidak karena Google memberikan Anda poin untuk setting itself.
ingin nyata versi — Gzip vs Brotli angka, persis apa Googlebot mendukung dan bagaimana kami know, PageSpeed audit thresholds, compression tingkat, dan cara enable dan verify ini pada Anda server? Switch untuk Advanced tab.
Evidence for this claim HTTP content coding compresses transferred representations and is negotiated with Accept-Encoding and Content-Encoding. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP compression Evidence for this claim Brotli is an HTTP content coding supported through the br encoding token. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 7932: BrotliTL;DR — Compression adalah HTTP konten-encoding negotiation: client mengirim
Accept-Encoding(yang dapat carryqweights danidentity), server replies denganContent-Encoding, per permintaan, per resource — dan sebuah cacheable respons itu varies oleh coding perluVary: Accept-Encoding. Brotli biasanya beats Gzip pada yang sama text (sering cited sekitar 15–20%, though tepat margin bergantung pada konten, codec versi, dan tingkat) dan adalah Google’s stated preference ketika didukung; Gzip adalah universal fallback; Zstd adalah sebuah registered tetapi tidak universally didukung ketiga codec (Google’s crawler docs jangan state Zstd mendukung untuk Googlebot). Googlebot mendukung gzip, deflate, dan Brotli (br) — plainly terdokumentasi hari ini, informally confirmed oleh Gary Illyes di 2020, dan rooted di Google’s 2008 “Pertama date dengan itu Googlebot” (terjemahan) “pertama date dengan Googlebot” post. Compression tidak sebuah peringkat factor dan tidak jaminan sebuah TTFB/LCP atau Penelusuran perubahan pada -nya own; ini shrinks transfer size, yang dapat help TTFB → LCP jika itu’s Anda sebenarnya bottleneck, dan ini helps halaman stay di bawah Google’s fetch limit (2 MB untuk HTML per 2026 “Di dalam Googlebot” (terjemahan) “Di dalam Googlebot” post) — sebuah crawl-efficiency win, tidak hanya sebuah speed satu. Decide apa untuk (tidak) compress dari MIME jenis dan diukur output, tidak sebuah blanket extension list; BREACH-style risk adalah scoped untuk respons mixing sebuah secret dengan attacker-reflected konten, tidak sebuah alasan untuk disable compression sitewide. gunakan lebih tinggi compression untuk static/pre-compressed assets, sebuah lebih rendah/mid-range tingkat untuk dynamic konten — benchmarked terhadap Anda own traffic dan CPU, since Tidak single tingkat adalah universally best. dan Sitemaps protocol explicitly memungkinkan gzip-compressed sitemaps.
Apa compression sebenarnya adalah
Compression — properly, HTTP konten encoding — shrinks sebuah text-based respons
body sebelum ini crosses network, so client downloads fewer bytes dan
decompresses them locally. ini adalah negotiated per permintaan. sebagai Google’s Lighthouse docs
deskripsikan ini: “When a browser requests a resource, it will use the Accept-Encoding
HTTP request header to indicate what compression algorithms it supports.” (terjemahan) “Saat browser meminta resource, browser menggunakan header permintaan HTTP Accept-Encoding untuk menyatakan algoritma kompresi yang didukungnya.” sebuah header tipikal
terlihat seperti Accept-Encoding: gzip, deflate, br. server picks satu dan
sinyal -nya pilihan back di Content-Encoding respons header.
Dua boundaries worth menjadi precise tentang, straight dari HTTP specification
(RFC 9110): konten coding adalah sebuah transformation dari representation
data — respons body — dan itu’s sebuah berbeda hal dari transfer coding,
yang operates pada message sebagai ini moves di seluruh sebuah connection. Compression sebagai
discussed pada ini halaman adalah konten coding, identified oleh Content-Encoding.
negotiation itself tidak hanya sebuah flat list — Accept-Encoding dapat carry weights
(q nilai) peringkat sebuah client’s preference among codings ini adalah willing untuk
accept, dan ini dapat juga express sebuah refusal (q=0); identity adalah token untuk “Tidak
coding applied.” (terjemahan) “Tidak
coding applied.” (RFC 9110, §8.4 dan §12.5.3.) dan jika sebuah cacheable respons’s body
sebenarnya differs oleh negotiated coding — sebuah gzip variant dan sebuah Brotli variant dari
yang sama URL, say — respons perlu Vary: Accept-Encoding so sebuah cache tidak
sajikan wrong variant untuk sebuah client itu dapat’t decode ini (RFC 9110, §12.5.5; Apache’s
mod_deflate docs deskripsikan ini tepat Vary requirement untuk compressed cache
variants).
ini applies untuk text: HTML, CSS, JavaScript, JSON, SVG, dan XML (sitemaps disertakan). Keduanya Gzip dan Brotli dapat shrink text assets substantially — Google’s own PageSpeed guidance cites sebuah ceiling: “Enabling gzip compression dapat reduce itu size dari itu transferred response oleh up untuk 90%.” (terjemahan) “Enabling gzip compression dapat reduce size dari transferred respons oleh up untuk 90%.” Treat itu sebagai sebuah ceiling, tidak sebuah typical angka — sebenarnya savings pada apa pun diberikan respons bergantung pada konten’s redundancy, -nya size, apakah ini adalah sudah minified, codec/versi dan dictionary digunakan, dan compression tingkat, so mereka dapat’t menjadi generalized dari satu situs’s angka untuk lainnya’s.
Dua hal ini adalah tidak, dan keduanya penting:
- Tidak minification. Minification menghapus characters dari sumber (whitespace, comments); compression re-encodes resulting bytes untuk transfer. mereka stack — minify pertama, lalu compress — dan skipping either leaves savings pada table.
- Tidak caching. Compression adalah tentang encoding (shrinking bytes pada wire);
caching adalah tentang storage dan reuse (
Cache-Control,ETag, CDNs). mereka’re complementary “bagaimana bytes mendapatkan untuk itu browser efficiently” (terjemahan) “bagaimana bytes mendapatkan untuk browser efficiently” levers. See caching untuk storage side.
ini halaman adalah compression deep dive di bawah critical rendering path hub, yang lists “compress text” (terjemahan) “compress text” sebagai satu bullet di -nya lebih luas critical-bytes checklist. ini adalah di mana itu bullet mendapatkan -nya penuh treatment.
Gzip vs Brotli vs Zstd
Compression ratio
Brotli umumnya melakukan better pada text, tetapi jangan treat apa pun spesifik angka sebagai
universal. Google’s Lighthouse doc adalah jelas itu audit’s reported savings
adalah computed dengan Gzip, dan “jika Brotli adalah digunakan, even lebih savings adalah possible.” (terjemahan) “jika Brotli adalah digunakan, bahkan lebih savings adalah mungkin.”
Google’s own
web.dev Brotli codelab
menampilkan satu concrete contoh: sebuah main.bundle.js itu adalah 225 KB uncompressed came down
untuk roughly 61,6 KB dengan Gzip dan tentang 53,1 KB dengan Brotli — tentang 14% lebih kecil dengan
Brotli pada itu satu file. angka like itu (dan “~15–20%” (terjemahan) “~15–20%” figure Anda’ll see
elsewhere) adalah directional, tidak sebuah jaminan — nyata margin pada apa pun diberikan asset
bergantung pada codec/library versi, compression tingkat chosen, konten’s
redundancy, dan apakah ini adalah sudah minified. Tidak codec atau quality tingkat adalah
“selalu best” (terjemahan) “selalu best” independent dari apa Anda’re compressing; benchmark Anda own assets
alih-alih porting seseorang else’s percentage.
Gzip adalah universal fallback. ini adalah didukung di mana-mana, yang adalah persis mengapa Google recommends ini sebagai safety net: “Use GZIP as a fallback to Brotli. GZIP is supported in all major browsers, but is less efficient than Brotli.” (terjemahan) “Gunakan GZIP sebagai fallback untuk Brotli. GZIP didukung di semua browser utama, tetapi kurang efisien daripada Brotli.”
Zstd adalah sebuah ketiga registered codec, belum sebuah safe default. IANA’s HTTP konten
coding registry lists gzip, br, dan zstd — tetapi registration di itu list tidak
yang sama sebagai universal client, crawler, origin, atau CDN mendukung, so hanya advertise
apa sebuah diberikan permintaan memiliki sebenarnya ditanyakan untuk dan pertahankan sebuah berfungsi fallback path.
untuk HTTP interoperability secara khusus, RFC 9659 (yang memperbarui sebelumnya RFC 8878
zstd registration) memerlukan decoders untuk mendukung windows melalui 8 MB dan forbids
encoders dari requiring sebuah lebih besar window daripada itu — worth knowing jika Anda’re
configuring sebuah server atau CDN untuk ini. itu HTTP konten coding, zstd, adalah juga sebuah
distinct hal dari dictionary-based compression coding dcz; jangan conflate
dua ketika reading vendor docs. dunia nyata adoption adalah masih early (Caddy, untuk
instance, exposes encode zstd gzip), dan Google’s saat ini crawler documentation
lists gzip, deflate, dan Brotli untuk -nya crawler dan fetchers — ini melakukan tidak
state Zstandard mendukung untuk Googlebot, so jangan assume ini adalah bagian dari itu lineup.
Treat Zstd sebagai satu untuk watch dan enable di mana Anda stack mendukung ini dan permintaan
menanyakan untuk ini, tidak sebagai sebuah Gzip/Brotli replacement namun.
browser dan crawler mendukung
Brotli mendukung adalah now effectively universal di browser, tetapi itu tidak selalu benar — dan historical kesenjangan adalah worth knowing karena ini adalah mengapa Gzip fallback masih penting. Google’s Lighthouse doc notes: “As of December 2022 Brotli is supported in all major browsers except Safari on iOS.” (terjemahan) “Per Desember 2022, Brotli didukung di semua browser utama kecuali Safari pada iOS.” itu Safari-pada-iOS kesenjangan adalah canonical contoh dari mengapa Anda pertahankan Gzip di chain.
Google recommends Brotli setiap kali client dapat take ini: “If the browser supports Brotli (br) you should use Brotli because it can reduce the file size of the resources more than the other compression algorithms.” (terjemahan) “Jika browser mendukung Brotli (br), gunakan Brotli karena dapat mengurangi ukuran file resource lebih banyak daripada algoritma kompresi lainnya.”
Ketika untuk masih fall back untuk Gzip
selalu pertahankan Gzip configured alongside Brotli. konten-encoding adalah negotiated per
permintaan, so sebuah properly configured server menyajikan Brotli untuk clients itu advertise
br dan Gzip untuk everyone else secara otomatis — Anda’re tidak choosing satu atau
lainnya, Anda’re offering keduanya dan letting handshake decide.
melakukan Google (dan Bing) mendukung Brotli dan Gzip?
ini adalah pertanyaan sebagian besar compression artikel assert tanpa evidence. Di sini ini adalah dengan sebuah dated, three-poin trail dari Google’s own statements.
2008 “Pertama date dengan itu Googlebot” (terjemahan) “pertama date dengan Googlebot” post
Google memiliki dijelaskan compression di -nya own voice since 2008. di
pertama date dengan Googlebot: Headers dan compression
(Maile Ohye dan Jeremy Lilley), Google wrote itu semua major mesin pencari dan web
browser mendukung gzip compression untuk save bandwidth, dan itu Anda mungkin juga see
x-gzip (yang sama sebagai gzip), deflate (yang Google juga mendukung), dan identity
(none). yang sama post adalah di mana Google menjelaskan itu banyak file formats — Flash, JPG,
PNG, GIF, PDF — adalah sudah compressed, so ada little untuk gain dari compressing
them again. ini bahkan status sebuah mild preference untuk gzip di atas deflate pada robustness
grounds (gzip carries sebuah checksum dan penuh header, leaving lebih sedikit guesswork). ini adalah sebuah
old post dengan sebuah “outdated” (terjemahan) “outdated” banner, tetapi body adalah langsung dan secara langsung pada-topic, dan
hampir Tidak saat ini artikel cites ini.
#:~:text= fragment tautan tidak constructed untuk itu legacy template, so mereka’re
paraphrased alih-alih presented sebagai verbatim pull-quotes.Gary Illyes’ 2020 Brotli konfirmasi
Brotli mendukung untuk Googlebot adalah confirmed informally sebelum ini adalah formally terdokumentasi. di August 2020, Google’s Gary Illyes mengatakan, setelah memenuhi dengan Googlebot team, itu he’d telah ditanyakan sebuah sedikit weeks sebelumnya apakah Googlebot mendukung Brotli compression — dan ini melakukan. Barry Schwartz reported ini yang sama day di mesin pencari Roundtable. itu lebih lama dari saat ini crawler-overview documentation oleh tentang four tahun — sebuah nice reminder itu sebuah rep dapat konfirmasi crawler perilaku panjang sebelum ini lands di docs.
saat ini official crawler documentation
Hari ini sudah dinyatakan dengan jelas. Google’s crawler (pengguna agent) Overview says: “Google’s crawlers and fetchers support the following content encodings (compressions): gzip, deflate, and Brotli (br).” (terjemahan) “Crawler dan fetcher Google mendukung encoding konten berikut (kompresi): gzip, deflate, dan Brotli (br).” dan ini menjelaskan per-permintaan negotiation yang sama cara sebuah browser melakukan: “The content encodings supported by each Google user agent is advertised in the Accept-Encoding header of each request they make. For example, Accept-Encoding: gzip, deflate, br.” (terjemahan) “Encoding konten yang didukung setiap user agent Google diiklankan dalam header Accept-Encoding pada setiap permintaan yang dibuatnya. Contoh: Accept-Encoding: gzip, deflate, br.” I say yang sama hal di my Ahrefs Googlebot guide, yang memiliki sebuah dedicated konten-encoding bagian: “Googlebot supports gzip, deflate, and Brotli (br).” (terjemahan) “Googlebot mendukung gzip, deflate, dan Brotli (br).”
So lineage adalah: 2008 blog post → 2020 Illyes konfirmasi → saat ini crawler docs. ini adalah well-established, tidak speculative.
Bing documentation kesenjangan
Bing adalah honest asterisk di sini. ada Tidak detailed, publik Bing document
stating yang konten encodings Bingbot negotiates ketika crawling ordinary HTML —
tidak ada apa pun equivalent untuk Google’s crawler-overview halaman. Apa Bing melakukan document adalah
lebih sempit: -nya konten Submission API mendukung Gzip, dan Anda dapat submit
gzip-compressed sitemap files (.xml.gz) untuk Bing. Karena HTTP compression adalah sebuah
standard mechanism itu essentially semua modern clients negotiate melalui Accept-Encoding,
ini adalah reasonable untuk assume Bingbot menangani Gzip di minimum — tetapi treat itu sebagai sebuah
inference dari bagaimana HTTP berfungsi, tidak sebagai sebuah terdokumentasi Bing statement. ini adalah sebuah genuine
documentation-transparency kesenjangan antara dua mesin, tidak sebuah knock pada Bingbot’s
sebenarnya perilaku.
Mengapa compression penting untuk performa dan Core Web Vitals
causal chain (state ini precisely)
Compression adalah tidak sebuah direct peringkat factor. mechanism ini feeds adalah: lebih kecil transfer size dapat shorten download time, yang dapat help Time untuk pertama Byte dan downstream Largest Contentful Paint, yang factor ke Core Web Vitals — sebuah halaman-experience sinyal. Note “dapat” (terjemahan) “dapat”: Google’s own guidance bounds guaranteed outcome untuk fewer network bytes, tidak sebuah guaranteed TTFB/LCP win, better Core Web Vitals, atau sebuah Penelusuran perubahan — jika Anda muat adalah bottlenecked elsewhere (sebuah slow database kueri, sebuah render-blocking script, DNS/connection setup), compressing sebuah sudah-kecil respons tidak akan move needle. mengukur Anda own bottleneck dan field outcome rather daripada assuming compression alone memperbaiki speed. hal itu’s scored adalah speed outcome, tidak compression setting. Getting ini right penting karena sebuah lot dari pesaing konten conflates “helps SEO” (terjemahan) “helps SEO” dengan “ranking factor.” (terjemahan) “peringkat factor.” (See Time untuk pertama Byte, Largest Contentful Paint, dan Core Web Vitals.)
Evidence for this claim Reducing transferred bytes may improve a network-bound load, but compression alone does not guarantee lower TTFB/LCP, better Core Web Vitals or a Search change; measure the actual bottleneck and field outcome. Scope: lab audit Confidence: high · Verified: Enable text compressionada sebuah nice framing dari Google’s Martin Splitt pada mengapa mentah halaman weight adalah sebuah misleading cara untuk think tentang ini: apa penting adalah apa sebenarnya goes di atas wire setelah compression, tidak uncompressed size pada disk — sebuah halaman itu looks like 10 MB uncompressed mungkin menjadi five atau six di atas network. itu Splitt poin adalah relayed melalui mesin pencari Journal’s reporting alih-alih sebuah utama transcript, so ini adalah paraphrased di sini, tidak quoted.
Compression dan crawl efficiency — underrated angle
Compression tidak hanya tentang kecepatan halaman untuk humans. ini juga helps Anda stay di bawah Google’s fetch limit. sebagai dari 2026 “Di dalam Googlebot” (terjemahan) “Di dalam Googlebot” perbarui (Gary Illyes), Googlebot fetches roughly 2 MB per URL untuk HTML (down dari older 15 MB figure), dan konten beyond limit adalah truncated, tidak rejected — hanya downloaded portion adalah lulus pada untuk pengindeksan. Compressing Anda HTML adalah satu dari levers itu mempertahankan critical konten di dalam itu budget, so ini adalah sebuah crawl-efficiency concern, tidak hanya sebuah Core Web Vitals satu. (Lebih pada limit di crawling.)
Lighthouse “Enable text compression” (terjemahan) “audit aktifkan kompresi teks” — tepat thresholds
PageSpeed Insights / Lighthouse “Enable text compression” (terjemahan) “aktifkan kompresi teks” audit memiliki precise
trigger aturan worth naming. Lighthouse gathers text-based respons itu jangan
sudah carry sebuah content-encoding dari br, gzip, atau deflate, compresses setiap
satu dengan Gzip untuk estimate savings, dan — per Google’s doc — “If the original size
of a response is less than 1.4KiB, or if the potential compression savings is less
than 10% of the original size, then Lighthouse does not flag that response in the
results.” (terjemahan) “jika original size
dari sebuah respons adalah lebih sedikit daripada 1,4KiB, atau jika potential compression savings adalah lebih sedikit
daripada 10% dari original size, lalu Lighthouse melakukan tidak flag itu respons di
hasil.” So kecil files di bawah ~1,4 KiB tidak akan trip warning bahkan uncompressed.
(sebagai dari Lighthouse 13 ini audit adalah folded ke lebih luas “Document request
latency” (terjemahan) “Document permintaan
latency” insight, tetapi underlying guidance adalah unchanged.)
Mengapa sebuah correctly-configured situs dapat masih fail audit
sebuah genuinely berguna troubleshooting nugget straight dari Google’s PageSpeed
documentation: “Proxy servers and anti-virus software can disable compression when
files are downloaded to a client machine.” (terjemahan) “Proxy server dan anti-virus software dapat disable compression ketika
files adalah downloaded untuk sebuah client machine.” itu berarti sebuah compression checker dapat
report sebuah salah negative — “compression isn’t enabled” (terjemahan) “compression tidak enabled” — bahkan ketika Anda server adalah
configured correctly, karena sebuah intermediary stripped Content-Encoding header
di transit. sebelum Anda assume report adalah rusak atau itu Anda server adalah
misconfigured, test dari sebuah bersih network path.
Static vs dynamic compression — implementation trade-offs
Compression tingkat
Keduanya algorithms memiliki adjustable tingkat trading CPU time terhadap ratio:
- Gzip: tingkat 1–9.
- Brotli: tingkat 0 (Tidak compression) untuk 11 (maximum), per Google’s web.dev codelab.
Lebih tinggi tingkat squeeze harder tetapi cost lebih CPU time.
CPU cost — dan mengapa static vs dynamic penting
Compression tidak free; ini burns CPU, dan cost profile adalah completely berbeda untuk pre-dibangun assets versus konten generated pada fly. right setting tidak sebuah single universal angka untuk either case — ini bergantung pada bagaimana sering underlying konten perubahan, bagaimana Anda cache/CDN layer menangani compressed variant, Anda traffic volume, dan apa Anda sebenarnya mengukur, tidak hanya sebuah aturan dari thumb copied dari sebuah blog post.
- Static (pre-compressed / bangun-time) assets — konten itu’s stable cukup untuk
compress setelah ahead dari time (nginx’s
gzip_staticdan Apache’smod_deflatekeduanya document selecting sebuah precompressed file alih-alih recompressing per permintaan) dapat afford lebih tinggi compression tingkat, karena CPU cost adalah paid setelah di bangun time alih-alih pada setiap permintaan. sebagai web.dev codelab puts ini, ketika compression happens ahead dari time, latency dari tinggi compression tingkat tidak sebuah concern anymore; trade-off shifts untuk lebih lama bangun times, yang Anda pay setelah, tidak per pengunjung. - Dynamic (generated-per-permintaan) respons — compressing di highest tingkat di nyata time menambahkan latency untuk setiap respons, so sebuah lebih rendah/mid-range tingkat adalah sebuah umum starting poin (tooling sometimes defaults Brotli untuk sekitar quality 4 untuk dynamic konten sebagai sebuah starting ratio-vs-speed balance) — tetapi treat itu sebagai sebuah starting poin untuk benchmark terhadap Anda own CPU headroom dan traffic, tidak sebuah fixed aturan. Google flagged ini trade-off sebagai far back sebagai 2008 post: enabling gzip/deflate memiliki sebuah CPU cost, dan pada sebuah server sudah heavily CPU-dimuat serving dynamic konten, ini adalah worth weighing sebelum mengubah maximum compression pada untuk semuanya.
practical starting poin adalah lebih tinggi untuk static, lebih rendah/mid-range untuk dynamic — tetapi konfirmasi ini terhadap Anda own mutability, cache/CDN perilaku, traffic, dan sebuah diukur sebelum/setelah, tidak sebuah tingkat angka lifted dari sebuah artikel (including ini satu).
cara enable compression
mechanism adalah yang sama di mana-mana — configure server (atau CDN/edge) untuk compress text respons dan advertise Brotli dengan sebuah Gzip fallback. oleh platform:
- Apache —
mod_deflatemodule (danmod_brotliuntuk Brotli). Google’s PageSpeed guidance poin di sini secara langsung. - Nginx — dibangun-di
ngx_http_gzip_module(gzip on;plusgzip_types), dan Brotli module untukbr. - IIS — dibangun-di HTTP Compression (static dan dynamic).
- CDN / edge — Cloudflare, Fastly, dan similar typically offer Brotli + Gzip sebagai
sebuah toggle; Caddy exposes
encode zstd gzip. - App kerangka kerja — Node/Express
compressionmiddleware; Berikutnya.js/Vercel dan sebagian besar modern hosts compress oleh default.
lalu verify ini (see Checklists lens untuk tepat commands). fastest periksa:
curl -I -H "Accept-Encoding: br, gzip" https://example.com/ dan cari sebuah
content-encoding header di respons.
Apa Tidak untuk compress
jangan re-compress sudah-compressed formats: JPG, PNG, GIF, sebagian besar video, WOFF2 fonts, dan sebagian besar PDFs. mereka’re sudah compressed internally; berjalan Gzip atau Brotli di atas them again spends CPU untuk negligible — occasionally negative — size perubahan. Treat itu list sebagai contoh, tidak sebuah exhaustive rulebook — GTmetrix’s own troubleshooting guidance frames ini yang sama cara: sudah-compressed atau tinggi-entropy formats “may not benefit and can grow.” (terjemahan) “dapat tidak benefit dan dapat grow.” safer umum aturan adalah untuk cakupan compression oleh MIME jenis (text-based formats) dan, di mana Anda dapat, periksa diukur output untuk sebuah diberikan respons alih-alih trusting sebuah blanket file-extension list, since format dan konten vary.
ada juga Tidak single universal minimum respons size di bawah yang compression “doesn’t count” (terjemahan) “tidak count” — framing dan metadata overhead dapat erase savings pada kecil atau sudah-dense bodies, tetapi di mana itu break-bahkan poin sits bergantung pada codec, implementation, respons headers, dan konten itself. Lighthouse’s own 1,4 KiB / 10%-savings thresholds (di atas) adalah itu spesifik audit’s suppression aturan, tidak sebuah umum size floor — sebuah CDN dapat (dan sering melakukan) publish -nya own, berbeda minimum untuk ketika ini akan bother compressing sebuah respons di semua.
Evidence for this claim Framing and metadata overhead can erase savings for small or poorly compressible bodies; there is no universal minimum response size because codec, implementation, headers and content determine the break-even point. Scope: lab audit Confidence: high · Verified: Enable text compressionCompression dan BREACH — scoped, tidak sebuah alasan untuk disable compression sitewide
Anda dapat see security advice suggesting Anda turn compression off out dari caution. jangan
generalize dari itu. BREACH-style risk tidak sebuah property dari “compression” (terjemahan) “compression” di
abstract — original research mendeskripsikan sebuah spesifik attack shape: sebuah respons HTTP
itu (1) adalah compressed, (2) mixes sebuah secret (like sebuah CSRF token) dengan (3)
attacker-influenced konten reflected ke yang sama respons, di mana (4) attacker
dapat observe compressed respons’s length di seluruh repeated permintaan untuk infer
secret byte oleh byte. Apache’s mod_deflate documentation flags persis ini
combination sebagai worth sebuah BREACH-spesifik review. jika Anda respons jangan combine sebuah
secret dengan attacker-controlled reflected input di sebuah compressed body, classic
attack tidak apply — perbaiki adalah untuk review dan mitigate spesifik
vulnerable respons/context (e.g. jangan reflect pengguna input alongside secrets, tambahkan
per-permintaan tokens, atau rate-limit), tidak untuk disable text compression di seluruh
seluruh situs.
sitemap myth — compression adalah explicitly diizinkan
Satu correction worth membuat loudly: ** Sitemaps protocol explicitly memungkinkan
gzip-compressed sitemaps.** beberapa folks believe Anda dapat’t atau tidak seharusnya gzip sebuah sitemap
file — itu’s wrong.
sitemaps.org protocol permits gzipped
sitemap files (.xml.gz) untuk reduce bandwidth, keduanya mesin accept them, dan Bing’s
own submission tooling mendukung gzip too. satu-satunya caveat adalah biasa satu:
uncompressed sitemap harus masih respect protocol’s size limits (50 000 URLs /
50 MB uncompressed). Gzipping file pada wire adalah fine dan encouraged untuk besar
sitemaps.
Di mana compression sits di web performa
Compression adalah satu lever among cluster’s siblings. ini shrinks critical bytes critical rendering path memiliki untuk download; ini lowers TTFB dan downstream LCP; ini adalah sebuah named PageSpeed Insights / Lighthouse audit; dan ini pairs dengan caching (encoding vs storage) dan render-blocking resources (lebih kecil blocking files paint sooner). untuk lebih luas toolkit, see web performa alat.
AI summary
sebuah condensed take pada Advanced versi:
- Compression = HTTP konten encoding, distinct dari HTTP transfer coding
(RFC 9110, §8.4). Shrinks text respons (HTML, CSS, JS, JSON, SVG, sitemap XML)
sebelum mereka cross network. Negotiated per permintaan: client mengirim
Accept-Encoding(dapat carryqweights danidentity), server replies denganContent-Encoding; sebuah cacheable respons itu varies oleh coding perluVary: Accept-Encoding(§12.5.5). - Three codecs: Gzip (universal fallback), Brotli (biasanya lebih kecil pada text — sering cited ~15–20%, tetapi itu varies oleh konten/codec versi/tingkat, tidak sebuah fixed angka — dan Google’s stated preference ketika didukung), Zstd (registered per IANA dan scoped oleh RFC 9659, tetapi tidak universally didukung; Google’s crawler docs jangan state Zstd mendukung untuk Googlebot). sajikan Brotli + Gzip fallback together.
- Googlebot mendukung gzip, deflate, dan Brotli (
br) — stated plainly di saat ini crawler docs, informally confirmed oleh Gary Illyes di 2020, dan rooted di Google’s 2008 “Pertama date dengan itu Googlebot” (terjemahan) “pertama date dengan Googlebot” post. Bing memiliki Tidak equivalent crawler-compression doc — assume Gzip dari HTTP standards, flag ini sebagai sebuah kesenjangan. - Tidak sebuah peringkat factor, dan tidak sebuah guaranteed speed win. Lebih kecil transfer size dapat help TTFB → LCP → Core Web Vitals, tetapi hanya jika itu’s sebenarnya bottleneck — Google’s own guidance bounds direct outcome untuk fewer network bytes, tidak sebuah promised Core Web Vitals atau Penelusuran perubahan. Compression juga helps HTML stay di bawah Googlebot’s ~2 MB fetch limit (2026 “Di dalam Googlebot” (terjemahan) “Di dalam Googlebot”), sebuah crawl-efficiency win; di atas limit, fetches adalah truncated, tidak rejected.
- Lighthouse “Enable text compression” (terjemahan) “Enable text compression” flags text respons tanpa sebuah
br/gzip/deflateencoding, tetapi skips files di bawah ~1,4 KiB atau di mana savings adalah di bawah 10% — itu’s ini spesifik audit’s suppression aturan, tidak sebuah universal size floor (CDNs publish mereka own minimums). Proxies/antivirus dapat stripContent-Encodingdan penyebab sebuah salah negative. - tingkat & trade-offs: Gzip 1–9, Brotli 0–11. Lebih tinggi untuk static/pre-compressed assets (cost paid setelah di bangun); lebih rendah/mid-range untuk dynamic konten (CPU/latency) — benchmark terhadap Anda own traffic; Tidak tingkat adalah universally best.
- jangan blanket-exclude oleh extension — decide dari MIME jenis dan diukur output; sudah-compressed formats (images, video, WOFF2, sebagian besar PDFs) rarely benefit.
- BREACH risk adalah scoped, tidak sebuah alasan untuk disable compression sitewide: ini memerlukan sebuah compressed respons mixing sebuah secret dengan attacker-reflected konten dan sebuah observable repeated length — review dan perbaiki itu spesifik respons/context.
- Validate encoded representation itself:
Vary: Accept-Encodinguntuk cache variants, watch untuk double-compression di seluruh proxy/CDN/origin hops, dan treatETag/Content-Length/range perilaku sebagai spesifik untuk dipilih encoding, tidak identical di seluruh identity/gzip/br. - Sitemap myth busted: Sitemaps protocol explicitly memungkinkan gzip-compressed
sitemaps (
.xml.gz); uncompressed size limits masih apply.
Dokumentasi resmi
Utama-sumber documentation pada compression dan konten encoding.
- Enable text compression (Lighthouse) — audit’s trigger thresholds, Accept-Encoding negotiation, dan “prefer Brotli, fall back to Gzip” (terjemahan) “prefer Brotli, fall back untuk Gzip” guidance.
- Minify dan compress network payloads dengan brotli (web.dev codelab) — Brotli quality tingkat (0–11) dan static-vs-dynamic compression trade-offs, dengan sebuah sebelum/setelah contoh.
- Enable Compression (PageSpeed Insights) — “up untuk 90%” (terjemahan) “up untuk 90%” figure, server modules (mod_deflate, gzip module, IIS), dan proxy/antivirus salah-negative caveat.
- Google crawler (pengguna agent) Overview — definitive “gzip, deflate, and Brotli (br)” (terjemahan) “gzip, deflate, dan Brotli (br)” statement dan bagaimana crawler advertise ini melalui Accept-Encoding.
- pertama date dengan Googlebot: Headers dan compression (2008) — Google’s original explanation dari gzip vs deflate dan yang file jenis jangan benefit dari compression.
Standards / protocol
- RFC 9110 — HTTP Semantics — defines konten coding sebagai sebuah transformation dari representation data (§8.4), distinct dari transfer coding;
Accept-Encodingnegotiation denganqweights danidentity(§12.5.3); danVaryrequirement untuk cache variants itu differ oleh encoding (§12.5.5). - RFC 9659 — Zstandard (zstd) sebagai sebuah HTTP konten Coding — memperbarui RFC 8878, sets 8 MB interoperable window requirement untuk
zstd, dan distinguishes ini dari dictionary codingdcz. - IANA HTTP konten Coding Registry — authoritative list dari registered coding tokens (
gzip,br,zstd, dan others); registration tidak yang sama sebagai universal client/crawler/CDN mendukung. - Apache
mod_deflatedocumentation —Vary: Accept-Encodinguntuk compressed cache variants, avoiding double-compression dari precompressed konten,DeflateAlterETag, dan BREACH review note. - Cloudflare — konten compression — origin/edge transformation perilaku, minimum respons size untuk compression, dan codec selection oleh plan/aturan.
- nginx
ngx_http_gzip_static_module— serving precompressed static files alih-alih recompressing per permintaan. - Sitemaps protocol (sitemaps.org) — mengonfirmasi gzip-compressed sitemap files adalah diizinkan, dan uncompressed size limits.
Security
- BREACH attack — original research — attack’s sebenarnya prerequisites: sebuah compressed respons mixing sebuah secret dengan attacker-influenced reflected konten, observed melalui repeated length pengukuran.
Bing / Microsoft
- Tidak dedicated Bing document specifies Bingbot’s konten-encoding mendukung untuk HTML crawling. Bing’s URL/sitemap submission help mengonfirmasi gzip-compressed sitemap mendukung dan Gzip pada konten Submission API — Bing Webmaster alat help. Treat crawler-side mendukung sebagai sebuah inference dari HTTP standards, tidak sebuah terdokumentasi statement.
Quotes dari sumber
pada—record statements dari Google. setiap tautan dengan sebuah #:~:text= fragment jumps
untuk quoted passage pada sumber halaman.
Google — Lighthouse “Enable text compression” (terjemahan) “aktifkan kompresi teks”
- “When a browser requests a resource, it will use the Accept-Encoding HTTP request header to indicate what compression algorithms it supports.” (terjemahan) “Saat browser meminta resource, browser menggunakan header permintaan HTTP Accept-Encoding untuk menyatakan algoritma kompresi yang didukungnya.” Jump untuk quote
- “If the browser supports Brotli (br) you should use Brotli because it can reduce the file size of the resources more than the other compression algorithms.” (terjemahan) “jika browser mendukung Brotli (br) Anda harus gunakan Brotli karena ini dapat reduce file size dari resources lebih daripada lainnya compression algorithms.” Jump untuk quote
- “The potential savings that Lighthouse lists are the potential savings when the response is encoded with GZIP. If Brotli is used, even more savings are possible.” (terjemahan) “ potential savings itu Lighthouse lists adalah potential savings ketika respons adalah encoded dengan GZIP. jika Brotli adalah digunakan, bahkan lebih savings adalah mungkin.” Jump untuk quote
- “If the original size of a response is less than 1.4KiB, or if the potential compression savings is less than 10% of the original size, then Lighthouse does not flag that response in the results.” (terjemahan) “jika original size dari sebuah respons adalah lebih sedikit daripada 1,4KiB, atau jika potential compression savings adalah lebih sedikit daripada 10% dari original size, lalu Lighthouse melakukan tidak flag itu respons di hasil.” Jump untuk quote
- “As of December 2022 Brotli is supported in all major browsers except Safari on iOS.” (terjemahan) “Sejak Desember 2022, semua browser utama—kecuali Safari di iOS—mendukung Brotli.” … “Use GZIP as a fallback to Brotli. GZIP is supported in all major browsers, but is less efficient than Brotli.” (terjemahan) “Gunakan GZIP sebagai fallback ke Brotli. GZIP didukung di semua browser utama, tetapi efisiensinya di bawah Brotli.” Jump untuk quote
Google — PageSpeed Insights “Enable Compression” (terjemahan) “aktifkan kompresi”
- “Enabling gzip compression can reduce the size of the transferred response by up to 90%.” (terjemahan) “Enabling gzip compression dapat reduce size dari transferred respons oleh up untuk 90%.” Jump untuk quote
- “Proxy servers and anti-virus software can disable compression when files are downloaded to a client machine.” (terjemahan) “Proxy server dan anti-virus software dapat disable compression ketika files adalah downloaded untuk sebuah client machine.” Jump untuk quote
Google — crawler (pengguna agent) Overview
- “Google’s crawlers and fetchers support the following content encodings (compressions): gzip, deflate, and Brotli (br).” (terjemahan) “Google’s crawler dan fetchers mendukung berikut konten encodings (compressions): gzip, deflate, dan Brotli (br).” Jump untuk quote
- “The content encodings supported by each Google user agent is advertised in the Accept-Encoding header of each request they make. For example, Accept-Encoding: gzip, deflate, br.” (terjemahan) “ konten encodings didukung oleh setiap Google pengguna agent adalah advertised di Accept-Encoding header dari setiap permintaan mereka membuat. misalnya, Accept-Encoding: gzip, deflate, br.” Jump untuk quote
Gary Illyes, Google — Brotli konfirmasi (2020)
- Illyes confirmed, setelah memenuhi dengan Googlebot team, itu Googlebot mendukung Brotli compression — posted untuk X di August 2020 dan reported yang sama day oleh Barry Schwartz. (Paraphrased dari report, tidak reproduced sebagai sebuah verbatim pull-quote di sini.) Baca coverage
#:~:text= deep tautan tidak constructed untuk itu legacy template, so mereka’re
paraphrased alih-alih quoted. Martin Splitt “what goes over the wire” (terjemahan) “apa goes di atas wire” poin adalah
relayed melalui mesin pencari Journal’s reporting, tidak sebuah utama transcript, dan adalah
paraphrased. Illyes 2020 konfirmasi adalah relayed melalui mesin pencari Roundtable dan
paraphrased. Konfirmasi apa pun dari ini terhadap langsung/utama sumber sebelum treating sebagai
akhir. Yang compression setup seharusnya I gunakan?
Mulai dari apa Anda’re serving dan di mana, tidak dari “Gzip or Brotli?” (terjemahan) “Gzip atau Brotli?” — dalam praktik Anda hampir selalu sajikan keduanya.
Q1. dapat Anda server/CDN offer Brotli dengan sebuah Gzip fallback?
- Ya (modern Nginx/Apache module, atau sebuah CDN toggle) → enable Brotli + Gzip.
Negotiation picks Brotli untuk clients itu advertise
brdan Gzip untuk everyone else, secara otomatis. ini adalah default jawaban. Continue untuk Q2. - Tidak (older stack, Brotli module tidak tersedia) → enable Gzip alone untuk now. ini adalah didukung di mana-mana dan captures sebagian besar dari win. Revisit ketika Anda dapat tambahkan Brotli.
Q2. adalah asset static (dibangun ahead dari time) atau generated per permintaan?
- Static (CSS/JS bundles, prebuilt HTML, sitemaps) → pre-compress di sebuah lebih tinggi tingkat (up untuk Gzip 9 / Brotli 11) di bangun time, benchmarked untuk Anda assets. CPU cost adalah paid setelah; setiap permintaan mendapatkan lebih kecil file.
- Dynamic (per-permintaan HTML dari sebuah app/CMS) → compress di sebuah lebih rendah/mid-range tingkat (Brotli ~4 adalah sebuah umum starting poin untuk benchmark dari). Maximum tingkat tambahkan nyata-time latency untuk setiap respons; right tingkat bergantung pada Anda traffic dan CPU headroom, tidak sebuah fixed angka.
Q3. adalah file sudah sebuah compressed binary? (JPG, PNG, GIF, video, WOFF2, sebagian besar PDFs)
- Ya → jangan compress ini. ini tidak akan shrink dan Anda’ll waste CPU (dan dapat bahkan grow file slightly). Cakupan Anda compression aturan untuk text MIME jenis.
- Tidak (HTML, CSS, JS, JSON, SVG, XML) → compress ini.
Q4. Anda PageSpeed report masih says “Enable text compression” (terjemahan) “Enable text compression” setelah Anda turned ini pada.
- adalah flagged file di bawah ~1,4 KiB, atau akan ini save di bawah 10%? → Lighthouse tidak akan flag itu anyway; jika ini adalah tidak flagged, ada tidak ada apa pun untuk perbaiki.
- Test dengan
curl -I -H "Accept-Encoding: br, gzip"dan see sebuahcontent-encodingheader? → server adalah fine; sebuah proxy atau antivirus pada test path mungkin stripped header. Retest dari sebuah bersih network. - Tidak
content-encodingheader di semua → server genuinely tidak compressing itu respons — periksa Anda MIME-jenis scoping dan module config.
Compression setup & verification — checklist
sebuah lulus untuk konfirmasi text adalah compressed, Brotli adalah preferred, dan tidak ada apa pun’s double-compressed:
- Brotli enabled dengan sebuah Gzip fallback — server advertises
brdan menyajikan Gzip untuk clients itu jangan mendukung ini. - Compression scoped untuk text MIME jenis — HTML, CSS, JS, JSON, SVG, XML. sudah-compressed formats (images, video, WOFF2, sebagian besar PDFs) adalah excluded.
- Static assets pre-compressed di sebuah lebih tinggi tingkat (up untuk Gzip 9 / Brotli 11) di bangun time — benchmarked, tidak hanya copied dari sebuah blog post.
- Dynamic respons di sebuah lebih rendah/mid-range tingkat untuk balance CPU/latency, confirmed terhadap Anda own traffic.
-
Vary: Accept-Encodingpresent pada cacheable respons itu vary oleh coding, so sebuah shared cache tidak sajikan wrong variant. - Tidak double-compression di seluruh proxy/CDN/origin hops, dan
Content-Lengthmatches sebenarnya encoded body di setiap hop. - Verified dari command line:
curl -I -H "Accept-Encoding: br, gzip" https://example.com/mengembalikan sebuahcontent-encoding: br(ataugzip) header. - Verified di DevTools — Network tab menampilkan transferred size well di bawah resource size untuk text respons.
- PageSpeed Insights / Lighthouse — Tidak “Enable text compression” (terjemahan) “Enable text compression” flag pada text respons di atas ~1,4 KiB.
- salah negative ruled out — jika sebuah checker says compression adalah off tetapi curl
menampilkan sebuah
content-encodingheader, suspect sebuah proxy/antivirus stripping ini di transit, tidak server. - Sitemaps — besar sitemaps disajikan gzipped (
.xml.gz), dengan uncompressed file masih di dalam 50 000-URL / 50 MB limits. - Minification selesai too — compression stacks dengan minification; Anda’re melakukan keduanya, tidak satu alih-alih lainnya.
Compression cheat sheet
** three codecs**
| Codec | Header | Ratio vs Gzip | mendukung | gunakan ini untuk |
|---|---|---|---|---|
| Gzip | gzip | baseline | Universal | selalu-pada fallback |
| Brotli | br | biasanya lebih kecil (sering cited ~15–20%, tetapi varies oleh konten/tingkat) | semua major browser (Safari iOS ditambahkan ini oleh late 2022) | preferred codec ketika didukung |
| Zstd | zstd | Comparable, fast decompress | Registered (RFC 9659) tetapi tidak universal — tidak confirmed untuk Googlebot | Enable di mana permintaan mendukung ini; masih rendah adoption |
Compression tingkat
| Codec | Range | Static assets | Dynamic respons |
|---|---|---|---|
| Gzip | 1–9 | lebih tinggi (benchmark) | lebih rendah/mid-range (benchmark) |
| Brotli | 0–11 | lebih tinggi (benchmark) | commonly ~4 sebagai sebuah starting poin (benchmark) |
Apa untuk compress vs skip
| Compress | jangan compress (sudah compressed) |
|---|---|
| HTML, CSS, JS | JPG, PNG, GIF |
| JSON, SVG | Video (MP4, WebM) |
| XML / sitemaps | WOFF2 fonts, sebagian besar PDFs |
Fast facts
- Googlebot mendukung gzip, deflate, dan Brotli (br) — negotiated melalui
Accept-Encoding(tidak confirmed untuk Zstd). - Gzip’s savings ceiling adalah cited up untuk ~90% oleh Google — sebuah ceiling, tidak sebuah typical angka; sebenarnya savings vary oleh konten dan codec.
- Lighthouse skips files < ~1,4 KiB atau dengan < 10% potential savings — itu audit’s own suppression aturan, tidak sebuah universal minimum size.
- Compression helps HTML stay di bawah Googlebot’s ~2 MB fetch limit (2026) — sebuah crawl-efficiency win; di atas limit, fetches adalah truncated, tidak rejected.
- Cacheable respons itu vary oleh coding perlu
Vary: Accept-Encoding, atau sebuah shared cache dapat sajikan wrong variant untuk sebuah client itu dapat’t decode ini. - BREACH risk adalah scoped untuk respons mixing sebuah secret dengan attacker-reflected konten — tidak sebuah alasan untuk disable compression sitewide.
- Sitemaps protocol memungkinkan gzip (
.xml.gz) — “you can’t gzip a sitemap” (terjemahan) “Anda dapat’t gzip sebuah sitemap” belief adalah sebuah myth. - Verify:
curl -I -H "Accept-Encoding: br, gzip" <url>→ caricontent-encodingdanvary.
Compression myths & mistakes
recurring ones worth un-learning:
- “Enabling compression will boost my rankings.” (terjemahan) “Enabling compression akan boost my rankings.” Tidak sumber, official atau rep, says compression adalah sebuah sinyal peringkat. ini adalah sebuah input untuk kecepatan halaman / Core Web Vitals (halaman-experience-berdekatan), tidak sebuah scored factor pada -nya own. Enable ini untuk speed, deskripsikan ini honestly.
- “Brotli isn’t supported by Google, so stick with Gzip.” (terjemahan) “Brotli tidak didukung oleh Google, so stick dengan Gzip.” Outdated. Google’s crawling infrastructure memiliki didukung Brotli since setidaknya 2020 (Illyes) dan ini adalah stated plainly di saat ini crawler docs. myth survives karena news adalah old dan easy untuk miss.
- “Compressing my images / fonts / videos will speed up the site.” (terjemahan) “Compressing my images / fonts / videos akan speed up situs.” Counter- productive. JPG, PNG, GIF, sebagian besar video, dan WOFF2 fonts adalah sudah compressed; re-compressing wastes CPU untuk negligible atau zero gain, dan dapat occasionally grow file. Cakupan compression untuk text.
- “My PageSpeed report says compression is off, but I turned it on — the report’s
broken.” (terjemahan) “My PageSpeed report says compression adalah off, tetapi I turned ini pada — report’s
rusak.” Tidak niscaya. Per Google’s own PSI doc, proxies atau antivirus dapat
strip
Content-Encodingheader sebelum ini adalah diukur, producing sebuah salah negative. Test dari sebuah bersih path dengan curl sebelum blaming alat atau server. - “Compression and minification are the same thing.” (terjemahan) “Compression dan minification adalah yang sama hal.” berbeda stages: minify strips sumber characters, compression re-encodes bytes untuk transfer. mereka stack — melakukan keduanya.
- “Maximum compression level is always best.” (terjemahan) “Maximum compression tingkat adalah selalu best.” Overstated untuk dynamic konten. Max tingkat (Gzip 9, Brotli 11) cost nyata CPU per permintaan; gunakan them untuk static/pre-compressed assets dan sebuah mid-range tingkat untuk pada—fly respons.
- “You can’t (or shouldn’t) gzip a sitemap.” (terjemahan) “Anda dapat’t (atau tidak seharusnya) gzip sebuah sitemap.” Wrong — Sitemaps protocol
explicitly memungkinkan gzip-compressed sitemaps (
.xml.gz); hanya pertahankan uncompressed file di dalam 50 000-URL / 50 MB limits.
Verify negotiated compression dari command line
Jalankan pada macOS/Linux. --compressed advertises didukung encodings dan decompresses
body untuk display; headers masih tampilkan apa traveled di atas wire.
curl -sS --compressed -D - -o /dev/null https://example.com/app.js
curl -sS -H 'Accept-Encoding: br' -D - -o /dev/null https://example.com/app.js
curl -sS -H 'Accept-Encoding: gzip' -D - -o /dev/null https://example.com/app.js
curl -sS -H 'Accept-Encoding: identity' -D - -o /dev/null https://example.com/app.jsuntuk sebuah cacheable resource, respons seharusnya sertakan sebuah appropriate
Content-Encoding dan sebuah Vary: Accept-Encoding header — periksa bahwa header
explicitly jika resource sits behind sebuah shared cache atau CDN, since -nya absence adalah
apa lets sebuah cache sajikan satu client’s encoded variant untuk lainnya client itu dapat’t
decode ini.
pada Windows PowerShell, permintaan setiap encoding dan inspect headers:
$headers = @{ "Accept-Encoding" = "br, gzip" }
$r = Invoke-WebRequest -Uri "https://example.com/app.js" -Headers $headers
$r.Headers | Select-Object Content-Encoding, Vary, Content-Lengthtemukan uncompressed sama-origin text resources di DevTools
Paste ke Chrome DevTools Console setelah halaman memuat. ini menggunakan resource timing sizes sebagai sebuah shortlist; konfirmasi setiap respons di Network panel karena cached dan cross-origin entries dapat omit sizes.
performance.getEntriesByType('resource')
.filter((r) => r.transferSize > 0 && r.encodedBodySize === r.decodedBodySize)
.map((r) => ({ url: r.name, bytes: r.transferSize }));Extract compression headers di sebuah crawler
gunakan ini XPath di sebuah respons-header-aware custom extraction workflow untuk locate HTML marker hanya ketika Anda crawler memiliki stored headers secara terpisah; untuk ordinary HTML, compression adalah sebuah header HTTP dan cannot menjadi extracted dari DOM itself. itu pembedaan mencegah sebuah umum salah test: XPath alone cannot prove transfer encoding.
alat untuk testing HTTP compression
- Chrome DevTools Network panel — inspect
Content-Encoding, transferred size, resource jenis, dan apakah sebuah CDN/cache changed respons. curl --compressed— test nyata konten negotiation dan bandingkan Brotli, Gzip, dan identity respons tanpa relying pada sebuah browser UI.- PageSpeed Insights / Lighthouse — surface text resources itu akan save cukup bytes untuk trigger “Enable text compression” (terjemahan) “Enable text compression” audit described di artikel.
- WebPageTest — bandingkan transfer sizes dan permintaan waterfalls di bawah sebuah consistent location, browser, dan network profile.
- CDN/server configuration dan logs — konfirmasi yang codec dan compression tingkat adalah dipilih untuk static versus dynamic resources.
Prove compression adalah configured correctly
Encoding-negotiation test
Test untuk jalankan: permintaan sebuah text resource secara terpisah dengan Accept-Encoding: br,
gzip, dan identity. Yang diharapkan hasil: didukung permintaan menerima matching
Content-Encoding; identity tetap decodable dan variants sertakan appropriate
Vary. Failure interpretation: negotiation, cache variation, atau origin/CDN
configuration adalah wrong. Monitoring window: immediate setelah propagation.
Rollback trigger: corrupted bodies atau sebuah variant disajikan dengan wrong encoding.
Resource-cakupan test
Test untuk jalankan: sample HTML, CSS, JS, JSON/SVG/XML, plus sudah-compressed images, video, dan fonts di Network panel. Yang diharapkan hasil: text formats adalah compressed sementara formats itu gain tidak ada apa pun adalah tidak recompressed. Failure interpretation: MIME-jenis allowlist adalah incomplete atau overbroad. Monitoring window: immediate. Rollback trigger: increased transfer size, excessive origin CPU, atau rusak assets.
performa-regression test
Test untuk jalankan: bandingkan repeatable WebPageTest/Lighthouse berjalan dan server CPU sebelum dan setelah enabling dynamic compression. Yang diharapkan hasil: text transfer bytes fall tanpa sebuah consistent TTFB atau error regression. Failure interpretation: chosen codec/tingkat costs too banyak CPU atau compression adalah occurring di wrong layer. Monitoring window: lab immediately dan production selama representative muat. Rollback trigger: sustained latency, CPU saturation, atau elevated errors.
Cache-variant (Vary) test
Test untuk jalankan: untuk sebuah cacheable respons itu’s disajikan dengan berbeda encodings untuk
berbeda clients, permintaan ini dengan Accept-Encoding: br, lalu gzip, lalu
identity, melalui yang sama cache/CDN path. Yang diharapkan hasil: setiap variant muncul
back correctly encoded untuk apa adalah requested, dan respons carries
Vary: Accept-Encoding so cache key mencakup negotiated coding (RFC 9110,
§12.5.5). Failure interpretation: sebuah shared cache adalah storing satu encoded variant
dan serving ini untuk clients itu dapat’t decode ini — classic symptom adalah sebuah client itu
tidak advertise br receiving sebuah Brotli body ini dapat’t baca. Monitoring window:
immediate setelah apa pun CDN/cache-layer perubahan. Rollback trigger: apa pun client
receiving sebuah body ini tidak advertise mendukung untuk, atau sebuah cache hit ratio collapse dari
sebuah di atas-widened cache key.
Double-transformation dan stale-metadata test
Test untuk jalankan: trace sebuah respons melalui setiap proxy/CDN/origin hop (e.g. bandingkan
headers di origin versus di edge) untuk konfirmasi compression adalah applied persis
setelah. Yang diharapkan hasil: akhir Content-Encoding names satu coding, dan
Content-Length matches sebenarnya encoded body dikirim, dengan Tidak leftover
identity-length header dari sebelum sebuah hop transformed body. Failure
interpretation: sebuah intermediary decompressed dan recompressed respons (atau
compressed sebuah sudah-compressed body) tanpa updating length/integrity metadata —
Apache’s mod_deflate dan Cloudflare’s compression docs keduanya flag ini
recompression/metadata-drift scenario explicitly. Monitoring window: setelah
introducing atau mengubah apa pun CDN, proksi terbalik, atau edge transformation aturan.
Rollback trigger: corrupted downloads, mismatched Content-Length, atau visibly
double-compressed bodies.
Validator dan range-permintaan test
Test untuk jalankan: permintaan yang sama resource dengan identity, gzip, dan br, dan
bandingkan ETag, Content-Length, dan perilaku di bawah sebuah Range permintaan untuk setiap.
Yang diharapkan hasil: setiap encoded representation adalah treated sebagai distinct — -nya own
ETag (atau sebuah explicitly terdokumentasi shared-validator policy), correct Content-Length
untuk itu spesifik encoding, dan range semantics applied untuk dipilih
representation, tidak assumed identical di seluruh identity/gzip/br. Failure
interpretation: validators atau sebagian-konten menangani adalah dibangun assuming sebuah single
canonical representation, yang breaks conditional permintaan atau byte-range downloads
untuk compressed variants. Monitoring window: immediate, dan again setelah apa pun perubahan
untuk compression config atau CDN caching aturan. Rollback trigger: conditional
permintaan (If-None-Match) atau range permintaan returning wrong atau corrupted bodies untuk
sebuah compressed variant.
Uji pemahaman Anda: Compression
Five quick pertanyaan pada bagaimana HTTP text compression berfungsi dan apa Google mendukung. Pick sebuah jawaban untuk setiap, lalu periksa.
Log perubahan
Diperbarui 8 Agu 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 17 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.