Caching untuk SEO
Bagaimana browser dan server caching dengan Cache-Control, ETags, dan CDNs improves performa dan Core Web Vitals, dan caching pitfalls itu memengaruhi crawling.
Bahasa
Caching stores sebuah copy dari sebuah halaman atau resource — di browser, pada sebuah CDN edge, atau di sebuah crawler's own cache — so ini tidak memiliki untuk menjadi regenerated atau re-downloaded. ini adalah tidak sebuah direct peringkat factor, tetapi ini feeds dua hal itu penting: kecepatan halaman / Core Web Vitals (melalui TTFB dan LCP) dan crawl efficiency. Google's crawler hanya honors ETag dan Terakhir-Modified (plus max-age sebagai sebuah recrawl hint) — ini prefers ETag, dan 'lainnya HTTP caching directives tidak didukung.' riskiest caching mistakes tidak slow cache durations; mereka're CDN misconfigurations dan stale caches itu block atau mislead bot.
Evidence for this claim HTTP caching uses Cache-Control and validators to control reuse and revalidation. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP caching Evidence for this claim Browser caches can reuse stored responses according to HTTP caching semantics. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP cachingTL;DR — Caching berarti saving sebuah copy dari sebuah halaman atau file so ini tidak memiliki untuk menjadi dibangun dan dikirim again dari scratch. ini membuat Anda situs lebih cepat untuk orang dan untuk penelusuran bot, dan ini lets bot skip re-downloading halaman itu haven’t changed. Caching tidak akan peringkat Anda lebih tinggi pada -nya own — tetapi speed ini buys Anda, dan crawl efficiency ini enables, keduanya help indirectly.
Apa caching adalah
setiap time seseorang opens sebuah halaman, server memiliki untuk melakukan berfungsi: bangun HTML, kirim images, ship CSS dan JavaScript. Caching stores sebuah ready-dibuat copy dari itu hal so berikutnya visit dapat reuse ini alih-alih melakukan semua itu berfungsi again.
ada three places sebuah copy dapat langsung itu penting untuk SEO:
- ** browser cache** — files saved pada pengunjung’s own device, so sebuah kedua halaman view atau sebuah kembalikan visit memuat hampir instantly.
- ** CDN (edge) cache** — copies stored pada server spread sekitar world, so sebuah file adalah disajikan dari di suatu tempat physically close untuk pengguna (atau bot) alih-alih Anda satu origin server.
- ** crawler’s own cache** — Googlebot dan Bingbot remember apakah sebuah halaman changed since terakhir time, dan skip re-downloading ini jika ini tidak.
mengapa ini penting untuk SEO
Dua alasan, dan ini adalah worth mempertahankan them terpisah:
- Speed. Lebih cepat pengiriman helps Anda Core Web Vitals — terutama bagaimana quickly server responds (TTFB) dan bagaimana fast main konten menampilkan up (LCP). Speed adalah bagian dari Google’s halaman-experience sinyal.
- crawl efficiency. Ketika sebuah bot dapat tell sebuah halaman hasn’t changed, ini tidak waste sebuah download pada ini. pada sebuah big situs, itu frees bot up untuk spend -nya time pada baru dan diperbarui halaman alih-alih.
satu hal untuk mendapatkan straight
“Google’s cache” (terjemahan) “Google’s cache” dan “HTTP caching” (terjemahan) “HTTP caching” adalah dua berbeda hal. old cache:
penelusuran operator — “view Google’s saved copy of this page” (terjemahan) “view Google’s saved copy dari ini halaman” fitur — adalah retired
di 2024. itu memiliki tidak ada apa pun untuk melakukan dengan caching ini artikel adalah tentang.
Cache-Control dan ETag headers adalah alive, well, dan penting. sebuah missing “cached
version” (terjemahan) “cached
versi” dari Anda halaman di Google says tidak ada apa pun tentang apakah Anda caching setup adalah
correct.
Apa untuk sebenarnya melakukan
- Cache Anda static files (images, CSS, JavaScript, fonts) untuk sebuah panjang time.
- tambahkan versioned atau hashed filenames so Anda dapat perbarui them instantly ketika needed.
- gunakan CDN so files muat dari close untuk Anda pengguna.
- jangan accidentally let sebuah stale atau shared cache sajikan wrong hal untuk bot ( scary failure mode — see Advanced dan Anti-patterns tabs).
ingin header-tingkat detail — Cache-Control directives, ETag vs. Terakhir-Modified,
CDN crawl-rate story, dan caching mistakes itu break crawling? Switch untuk
Advanced tab.
Evidence for this claim Google's crawler documentation supports ETag/If-None-Match and Last-Modified/If-Modified-Since, prefers ETag when both are present, and says other HTTP caching directives are unsupported; Google's separate max-age advice is a recrawl-timing hint, not proof it follows browser cache semantics. Scope: Google crawling Confidence: high · Verified: Crawling December: HTTP caching Evidence for this claim HTTP caching uses Cache-Control and validators to control reuse and revalidation. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP caching Evidence for this claim Browser caches can reuse stored responses according to HTTP caching semantics. Scope: Current official or standards documentation. Confidence: high · Verified: MDN: HTTP cachingTL;DR — Caching operates pada three layers itu penting untuk SEO: browser, CDN edge, dan crawler’s own conditional-permintaan cache. ini adalah tidak sebuah peringkat factor, tetapi ini drives kecepatan halaman (TTFB/LCP, dan — melalui bfcache — repeat-navigation Core Web Vitals) dan crawl efficiency. Google’s crawler prefers ETag di atas Terakhir-Modified, membaca
max-agehanya sebagai sebuah recrawl hint, dan — per -nya own docs — “other HTTP caching directives tidak supported.” (terjemahan) “lainnya HTTP caching directives tidak didukung.” CDNs earn sebuah lebih tinggi crawl-rate allowance, tetapi hanya setelah mereka cache adalah warm; nyata risks adalah cold-cache launches dan CDN/WAF misconfigurations itu block bot outright.
three layers dari caching
Caching untuk SEO tidak satu hal — ini adalah three, setiap controlled sebuah little differently:
- browser cache — pengunjung’s device stores files so repeat views skip network. ini adalah apa PageSpeed Insights nags tentang dengan “Serve static assets dengan an efficient cache policy.” (terjemahan) “sajikan static assets dengan sebuah efficient cache policy.”
- CDN / edge cache — sebuah jaringan pengiriman konten stores copies di edge nodes worldwide (see CDN dan SEO deep dive untuk penuh treatment). Google’s own deskripsi: CDNs adalah sebuah intermediary antara Anda origin dan pengguna, dan secara historis mereka biggest focus adalah caching — storing sebuah URL’s contents so Anda server tidak memiliki untuk sajikan itu file again untuk sebuah sementara.
- crawler-side cache — Googlebot dan Bingbot pertahankan mereka own record dari apakah konten changed, menggunakan conditional permintaan. ini adalah crawl-budget lever, dan mechanics belong untuk conditional permintaan deep dive; di sini I’ll pertahankan ini di sebuah summary tingkat.
“Browser cache” (terjemahan) “browser cache” di atas adalah shorthand untuk lebih daripada satu mechanism. Per
MDN’s HTTP caching guide,
worth knowing apart: privat HTTP cache (per-browser, keyed oleh permintaan, dan
di modern browser partitioned oleh top-tingkat situs untuk limit cross-situs tracking),
di-memory cache digunakan untuk saat ini session, bfcache covered di bawah, dan —
secara terpisah — sebuah service worker’s Cache Storage, yang sebuah situs’s own JavaScript
controls dan yang Cache-Control headers jangan govern secara langsung. “Periksa itu browser
cache” (terjemahan) “periksa browser
cache” dapat berarti four berbeda debugging langkah depending pada yang satu adalah sebenarnya
misbehaving.
Mengapa caching feeds Core Web Vitals
Fetching resources di atas network adalah slow dan expensive. Caching menghapus network latency dan transfer cost untuk apa pun itu hasn’t changed. itu alur straight ke dua vitals-berdekatan measures: TTFB (sebuah cached respons skips regeneration di origin) dan LCP (cached images/CSS/fonts render sooner).
Cache-Control, di directives itu penting
Cache-Control adalah main header. ones worth knowing:
max-age=<seconds>— bagaimana panjang sebuah fresh copy adalah baik untuk. untuk immutable, versioned assets, Chrome’s Lighthouse docs merekomendasikan caching untuk sebuah tahun atau lebih lama — e.g.Cache-Control: max-age=31536000.no-cache— tidak “jangan cache.” (terjemahan) “jangan cache.” ini berarti “store it, but revalidate with the server before reusing it.” (terjemahan) “store ini, tetapi revalidate dengan server sebelum reusing ini.” ini masih enables lightweight 304 flow.no-store— satu itu sebenarnya berarti jangan store apa pun copy anywhere di sebuah HTTP cache. ini adalah sebuah caching directive, tidak sebuah umum privacy switch — per RFC 9111 ini tidak sebuah reliable cara untuk erase browser history, dan ini says tidak ada apa pun tentang sebuah service worker’s own Cache Storage.public/private— apakah shared caches (like sebuah CDN) dapat store respons, atau hanya end pengguna’s browser.immutable— skip revalidation entirely sementara respons adalah masih fresh. ini tidak berarti “never goes stale” (terjemahan) “tidak pernah goes stale” — setelahmax-ageberjalan out, wajar freshness aturan apply again.must-revalidate— opposite end dari timeline: ini hanya penting setelah sebuah respons goes stale, dan tells cache ini harus revalidate dengan origin alih-alih serving stale copy anyway.s-maxage,stale-while-revalidate,stale-if-error— finer controls mostly untuk CDNs dan lainnya shared caches (sebuah terpisah freshness lifetime untuk shared caches, bounded stale reuse sementara sebuah background fetch berjalan, dan bounded stale reuse pada sebuah origin error, respectively). mendukung varies oleh browser/CDN, so periksa saat ini mendukung sebelum relying pada them — dan none dari ini extra directive set adalah honored oleh Google’s crawler, sebagai kami’ll see.
Cache-busting dengan versioned filenames
trick itu lets Anda cache aggressively dan perbarui instantly: put sebuah konten
hash di filename — style.x234dff.css. Karena URL adalah cache key,
mengubah file perubahan URL, so caches fetch baru versi immediately sementara
old versi stay cached untuk sebagai panjang sebagai Anda like. Keduanya Google’s
web.dev HTTP cache guide dan
Bing’s own front-end engineering tulis-up
deskripsikan yang sama pattern — Bing hashes file contents ke URL so “the URL acts as the cache key,” (terjemahan) “URL tersebut berfungsi sebagai kunci cache,” yang mempertahankan caches consistent dan memungkinkan panjang expiration times.
bfcache trap — di mana no-store diam-diam hurts CWV
Di sini’s sebuah di bawah-covered satu. back/forward cache (bfcache) adalah apa membuat hitting
“back” (terjemahan) “back” restore sebuah halaman instantly. sebuah bfcache restore skips LCP/CLS/INP pengukuran
entirely, so ini adalah pure upside untuk Anda CrUX data lapangan. tetapi per
Google’s bfcache guide, setting
Cache-Control: no-store pada halaman document itself memiliki secara historis dibuat
browser refuse untuk store itu halaman di bfcache. jika Anda perlu freshness pada sebuah HTML
document tetapi jangan ingin untuk sacrifice back/forward-cache eligibility, reach untuk
no-cache atau max-age=0 alih-alih no-store.
Bagaimana sebuah cache decides “fresh cukup” (terjemahan) “cukup segar”
sebelum apa pun validator mendapatkan involved, sebuah cache memeriksa freshness: memiliki stored
respons’s age lulus freshness lifetime Cache-Control gave ini (atau, absent sebuah
jelas lifetime, sebuah heuristic satu cache adalah diizinkan untuk guess di)? Age
respons header reports bagaimana panjang sebuah shared cache memiliki sudah held sebuah respons, yang
adalah bagaimana Anda dapat tell — di DevTools atau dari sebuah CDN log — bagaimana banyak freshness lifetime adalah
left. Fresh berarti cache dapat reuse ini immediately, Tidak permintaan di semua. Stale berarti
ini seharusnya validate sebelum reusing ini, yang adalah persis di mana ETag/If-None-Match
dan Last-Modified/If-Modified-Since earn mereka pertahankan — described berikutnya, untuk
Googlebot’s lebih sempit versi dari ini umum HTTP mechanism.
Bagaimana Googlebot menggunakan caching ( crawl-efficiency angle)
Google dibuat sebuah unusually direct tanyakan di -nya December 2024 crawling December: HTTP caching post: enable caching so -nya crawler dapat skip re-downloading unchanged halaman. striking data poin di itu post adalah itu cacheable fetches memiliki telah declining — tentang 0,026% dari total fetches adalah cacheable 10 tahun ago, dan hari ini itu angka adalah 0,017%. kecil angka, tetapi Google dengan jelas ingin them going lainnya cara.
ETag vs. Terakhir-Modified — yang Google prefers
Google’s crawling infrastructure mendukung dua standard validators: ETag
(dengan If-None-Match) dan Terakhir-Modified (dengan If-Modified-Since). Google
strongly recommends ETag
karena -nya nilai adalah unstructured dan karena itu lebih sedikit prone untuk parsing mistakes sebuah
date string invites — dan jika keduanya adalah present, -nya crawler
gunakan ETag nilai
sebagai HTTP standard memerlukan. Google masih suggests setting keduanya anyway, since
lainnya applications such sebagai CMSes
gunakan them. jika Anda melakukan gunakan Terakhir-Modified, date memiliki untuk ikuti HTTP format (untuk
contoh, Fri, 4 Sep 1998 19:15:56 GMT) atau ini tidak akan parse.
Ketika crawler’s stored validator masih matches, Anda server mengembalikan sebuah
304 Not Modified dengan Tidak body — yang adalah seluruh poin. sebagai Google puts ini, Tidak
body berarti Anda server tidak spend compute
generating konten
dan tidak spend bandwidth transferring ini. (itu 304 machinery adalah crawl-budget
mechanism covered secara mendalam di conditional permintaan artikel; di sini ini adalah cukup untuk
know ini ada dan saves Anda money pada keduanya sides.)
nuance hampir everyone misses
Google’s crawler melakukan tidak act pada penuh Cache-Control directive atur cara
sebuah browser atau CDN melakukan. Per official crawler overview, beyond ETag/Terakhir-Modified,
“other HTTP caching directives tidak supported.” (terjemahan) “lainnya HTTP caching directives tidak didukung.”
satu sebagian exception: Google says Anda dapat secara opsional set max-age untuk
help crawler determine ketika untuk recrawl
sebuah URL — sebuah recrawl hint, tidak sebuah hard lock. So no-cache, s-maxage,
stale-while-revalidate, dan friends masih shape browser dan CDN perilaku, tetapi mereka
jangan perubahan bagaimana Googlebot caches. dan Google’s advice pada ketika untuk invalidate adalah
sensible: memerlukan sebuah cache refresh
pada significant perubahan
— updating hanya copyright date di footer tidak significant.
CDNs dan crawling
sebuah CDN buys Anda lebih daripada speed. Google’s crawling infrastructure adalah designed untuk izinkan lebih tinggi crawl rates pada situs backed oleh sebuah CDN, inferred dari IP address serving URLs — ini assumes sebuah CDN-backed origin dapat tangani lebih simultaneous permintaan.
tetapi ada sebuah catch worth planning sekitar: cold cache. pada pertama access dari sebuah URL, CDN’s cache adalah “cold” (terjemahan) “cold” — tidak seorang pun memiliki requested ini namun, so Anda origin masih memiliki untuk sajikan ini setidaknya setelah untuk warm cache. Google warns itu launching banyak URLs di setelah adalah karena itu sebuah nyata burden pada anggaran crawling, dengan sebuah tinggi laju crawling untuk sebuah sedikit days. jika Anda’re melakukan sebuah big launch atau sebuah situs migration, budget untuk origin taking penuh muat per URL sebelum CDN dimulai helping.
CDN misconfiguration adalah sebuah crawling risk
scariest caching-berdekatan masalah tidak slow cache durations — mereka’re CDN dan WAF setups itu block bot. Google’s CDN post adalah jelas itu untuk temporary blockages, sending 503/429 adalah preferred cara untuk sinyal ini, whereas network timeouts adalah treated sebagai terminal, “hard” (terjemahan) “hard” errors itu dapat mendapatkan URLs dihapus dari indeks. subtle satu adalah sebuah soft block: sebuah bot-verification interstitial. crawler hanya sees challenge halaman, tidak Anda situs — so Google strongly recommends returning sebuah 503 untuk automated clients alih-alih. easiest cara untuk periksa itu sebuah CDN tidak diam-diam blocking Google adalah pemeriksaan URL alat di Search Console — lihat dirender image; jika ini menampilkan sebuah bot challenge atau sebuah empty halaman, talk untuk Anda CDN.
Offloading redirects untuk CDN adalah sebuah technique I’m sebuah fan dari. pada Marketing Speak podcast I described ini sebagai “Satu dari my personal favorites itu I jangan think ini digunakan cukup, ini sebenarnya sekadar off loading Anda redirects untuk itu CDN level.” (terjemahan) “Satu dari my personal favorites itu I jangan think ini adalah digunakan cukup, ini adalah sebenarnya hanya off memuat Anda redirects untuk CDN tingkat.” (Jump untuk quote)
Caching pitfalls itu hurt crawling dan pengindeksan
ini adalah angle sebagian besar “caching untuk SEO” (terjemahan) “caching untuk SEO” artikel skip. sebuah cache tidak hanya membuat hal fast — sebuah wrong cache dapat sajikan wrong bytes untuk sebuah bot dan break crawling atau pengindeksan.
sebuah nyata satu: sebuah shared cache serving sebuah blocking robots.txt. I dug ke sebuah case dari
intermittent Googlebot blocking itu traced back untuk sebuah shared CDN cache antara sebuah test
environment dan langsung situs. sebagai I wrote di
terindeks, though blocked oleh robots.txt:
“Satu possible penyebab akan menjadi a shared cache antara a test environment dan a langsung
environment. Ketika itu cache dari itu test environment adalah active, itu robots.txt file
mungkin include a blocking directive.” (terjemahan) “Satu mungkin penyebab akan menjadi sebuah shared cache antara sebuah test environment dan sebuah langsung
environment. Ketika cache dari test environment adalah active, robots.txt file
dapat sertakan sebuah blocking directive.” perbaiki adalah untuk split cache — atau exclude
.txt files dari cache di test environment. sebuah caching misconfiguration
secara langsung disebabkan sebuah crawling failure; itu’s category dari risk itu sebenarnya bites.
lainnya pitfalls di yang sama family:
- Stale CDN cache serving outdated konten untuk bot. jika Anda edge cache holds sebuah old versi panjang setelah Anda’ve published sebuah perubahan, bot pertahankan seeing old satu. Purge pada publish, atau tie cache lifetime untuk bagaimana sering halaman benar-benar perubahan.
Vary/ pengguna-Agent cache fragmentation. sebuah shared cache’s key adalah biasanya hanya URL;Varymenambahkan permintaan headers (likeUser-AgentatauAccept-Language) untuk itu key so berbeda variants mendapatkan stored secara terpisah. Miss sebuah header itu sebenarnya perubahan respons dan satu requester dapat mendapatkan lainnya’s variant — mobile/desktop atau bot/human mixup. tambahkan too banyak headers untukVarydan Anda fragment cache ke so banyak near-duplicate keys ini barely improves hit rate. Secara terpisah, modern browser juga partition mereka own caches oleh top-tingkat situs untuk privacy, so sebuah resource cached sementara embedded pada satu situs umumnya tidak reused ketika embedded pada lainnya — sebuah berbeda mechanism dariVary, worth tidak conflating dengan ini ketika Anda’re debugging sebuah “mengapa tidak ini cached” (terjemahan) “mengapa tidak ini cached” report.
My umum aturan dari thumb pada duration muncul dari LCP berfungsi: sebagai I put ini di my Ahrefs guide untuk Largest Contentful Paint, “Anda cache time seharusnya menjadi sebagai long sebagai Anda adalah comfortable dengan” (terjemahan) “Anda cache time seharusnya menjadi sebagai panjang sebagai Anda adalah comfortable dengan” — dan “An ideal setup adalah untuk cache untuk a benar-benar long period dari time tetapi purge itu cache ketika Anda membuat a ubah untuk a halaman.” (terjemahan) “sebuah ideal setup adalah untuk cache untuk sebuah benar-benar panjang period dari time tetapi purge cache ketika Anda membuat sebuah perubahan untuk sebuah halaman.” panjang cache, instant purge. itu combination adalah apa mempertahankan Anda keduanya fast dan fresh.
adalah caching sebuah peringkat factor?
Tidak — tidak secara langsung. ada Tidak sinyal peringkat untuk memiliki ETags set atau untuk sebuah baik
Cache-Control policy. Apa caching melakukan adalah feed dua hal itu penting untuk
visibilitas: kecepatan halaman / Core Web Vitals (sebuah jelas halaman-experience input) dan
crawl efficiency (yang governs bagaimana fast baru dan diperbarui konten mendapatkan ditemukan dan
refreshed, indirectly touching freshness-sensitive hasil). Set ini up karena ini
membuat Anda situs fast dan easy untuk crawl — tidak karena Anda expect sebuah direct rankings
bump.
AI summary
sebuah condensed take pada Advanced versi:
- Caching = three layers untuk SEO: browser cache, CDN/edge cache, dan crawler’s own conditional-permintaan cache. setiap adalah controlled sebuah bit differently.
- Tidak sebuah peringkat factor — tetapi ini drives dua hal itu penting: kecepatan halaman (TTFB/LCP, plus repeat-navigation vitals melalui bfcache) dan crawl efficiency.
Cache-Controlbasics:max-agesets freshness (sebuah tahun+ untuk immutable, versioned assets);no-cache= “store tetapi revalidate” (terjemahan) “store tetapi revalidate” (tidak “jangan cache” (terjemahan) “jangan cache”);no-store= jangan store di semua;public/privategate shared/CDN caches.- Cache-busting: put sebuah konten hash di filename so Anda dapat cache aggressively dan masih perbarui instantly (keduanya Google dan Bing gunakan ini pattern).
- bfcache trap:
Cache-Control: no-storepada HTML document dapat disqualify sebuah halaman dari back/forward cache, silently hurting CrUX vitals. gunakanno-cacheataumax-age=0alih-alih. - Googlebot honors hanya ETag dan Terakhir-Modified (prefers ETag; membaca
max-agesebagai sebuah recrawl hint). Per Google, “other HTTP caching directives tidak supported.” (terjemahan) “lainnya HTTP caching directives tidak didukung.” sebuah matching validator mengembalikan sebuah304 Not Modifieddengan Tidak body, saving compute dan bandwidth. - CDNs earn sebuah lebih tinggi crawl-rate allowance — tetapi hanya setelah cache adalah warm. Cold-cache launches masih hit origin setelah per URL; plan untuk ini pada big launches dan migrations.
- Biggest risk tidak slow caching — ini adalah CDN/WAF misconfig itu blocks bot (kembalikan 503/429 untuk temporary blocks; watch untuk soft-block interstitials) dan stale/shared caches serving wrong konten (e.g. sebuah blocking robots.txt).
Dokumentasi resmi
Utama-sumber documentation dari mesin pencari dan mereka tooling tim.
- crawling December: HTTP caching — Gary Illyes’ Dec 2024 post: ETag vs. Terakhir-Modified, 304 mechanics, declining cacheable-fetches stat, dan
max-agerecrawl hint. - Google crawler (pengguna agent) Overview — HTTP Caching bagian — living reference: ETag tie-break aturan dan “other HTTP caching directives tidak supported” (terjemahan) “lainnya HTTP caching directives tidak didukung” line.
- crawling December: CDNs dan crawling — Splitt & Illyes pada CDN caching, lebih tinggi crawl-rate allowance, cold-cache launches, dan hard vs. soft blocks.
- sajikan static assets dengan sebuah efficient cache policy — Lighthouse/PageSpeed audit dan “a year or longer” (terjemahan) “sebuah tahun atau lebih lama” guidance untuk immutable assets.
- mencegah unnecessary network permintaan dengan HTTP Cache — directive reference dan hashed-filename cache-busting pattern.
- Back/forward cache (bfcache) — mengapa
no-storepada HTML document dapat cost Anda bfcache eligibility. - crawling December series indeks — penuh 2024 series: Googlebot, HTTP caching, faceted nav, dan CDNs.
Bing / Microsoft
- Fast Front-End performa untuk Microsoft Bing — Bing’s engineering team pada hashing file contents ke URLs untuk cache consistency dan panjang expirations, dan CDN’s role di speeding static-asset pengiriman.
- bingbot Series: Maximizing crawl Efficiency — crawl-freshness logic (crawl lebih sedikit ketika konten hasn’t changed) itu caching mendukung.
- Bing Webmaster Guidelines — hub di mana Bing’s CDN/performa guidance lives.
Quotes dari sumber
pada—record statements dari Google dan dari my own writing. setiap tautan adalah sebuah deep tautan itu jumps untuk quoted passage pada sumber halaman.
Google — crawling December: HTTP caching
- “While Google’s crawling infrastructure supports heuristic caching mechanisms, in fact always had, the number of requests that can be returned from local caches has decreased: 10 years ago about 0.026% of the total fetches were cacheable, which is already not that impressive; today that number is 0.017%.” (terjemahan) “Sementara Google’s crawling infrastructure mendukung heuristic caching mechanisms, di fact selalu memiliki, angka dari permintaan itu dapat menjadi dikembalikan dari local caches memiliki decreased: 10 tahun ago tentang 0,026% dari total fetches adalah cacheable, yang adalah sudah tidak itu impressive; hari ini itu angka adalah 0,017%.” Jump untuk quote
- “We strongly recommend using ETag because it’s less prone to errors and mistakes (the value is not structured unlike the Last-Modified value). And, if you have the option, set them both: the internet will thank you. Maybe.” (terjemahan) “kami strongly merekomendasikan menggunakan ETag karena ini adalah lebih sedikit prone untuk errors dan mistakes ( nilai adalah tidak structured unlike Terakhir-Modified nilai). dan, jika Anda memiliki option, set them keduanya: internet akan thank Anda. Maybe.” Jump untuk quote
- “Our recommendation is that you require a cache refresh on significant changes to your content; if you only updated the copyright date at the bottom of your page, that’s probably not significant.” (terjemahan) “kami recommendation adalah itu Anda memerlukan sebuah cache refresh pada significant perubahan untuk Anda konten; jika Anda hanya diperbarui copyright date di bottom dari Anda halaman, itu’s probably tidak significant.” Jump untuk quote
Google — crawler overview (HTTP Caching bagian)
- “If both ETag and Last-Modified response header fields are present in the HTTP response, Google’s crawlers use the ETag value as required by the HTTP standard.” (terjemahan) “Jika field header respons ETag dan Last-Modified sama-sama ada dalam respons HTTP, crawler Google menggunakan nilai ETag sebagaimana diwajibkan standar HTTP.”* Jump untuk quote
- “Other HTTP caching directives tidak supported.” (terjemahan) “lainnya HTTP caching directives tidak didukung.” Jump untuk quote
Google — crawling December: CDNs dan crawling
- “Historically, CDNs’ biggest focus is caching, meaning that once a user requested a URL from your site, CDNs will store the contents of that URL in their caches for a time so your server doesn’t have to serve that file again for a while.” (terjemahan) “Secara historis, fokus terbesar CDN adalah caching: setelah pengguna meminta URL dari situs Anda, CDN menyimpan isi URL itu di cache selama beberapa waktu sehingga server Anda tidak perlu menyajikan file tersebut lagi untuk sementara.”* Jump untuk quote
Patrick Stox — pada caching dan CDNs
- “Your cache time should be as long as you are comfortable with.” (terjemahan) “Anda cache time seharusnya menjadi sebagai panjang sebagai Anda adalah comfortable dengan.” — me, di Ahrefs’ guide untuk Largest Contentful Paint. Jump untuk quote
- “One possible cause would be a shared cache between a test environment and a live environment. When the cache from the test environment is active, the robots.txt file may include a blocking directive.” (terjemahan) “Satu mungkin penyebab akan menjadi sebuah shared cache antara sebuah test environment dan sebuah langsung environment. Ketika cache dari test environment adalah active, robots.txt file dapat sertakan sebuah blocking directive.” — me, pada sebuah nyata crawling failure traced untuk sebuah shared cache. Jump untuk quote
- “One of my personal favorites that I don’t think it’s used enough, it’s actually just off loading your redirects to the CDN level.” (terjemahan) “Salah satu hal favorit saya yang menurut saya belum cukup digunakan adalah memindahkan redirect Anda ke tingkat CDN.”* — me, pada Marketing Speak podcast. Jump untuk quote
Caching untuk SEO — cheat sheet
Cache-Control directives, decoded
| Directive | Apa ini sebenarnya berarti | gunakan ini untuk |
|---|---|---|
max-age=31536000 | Fresh untuk ~1 tahun | Immutable, versioned/hashed static assets |
no-cache | Store ini, tetapi revalidate sebelum reuse (masih menggunakan 304) | HTML Anda ingin fresh tetapi bfcache-eligible |
no-store | jangan store apa pun copy di sebuah HTTP cache (tidak sebuah umum privacy switch) | Truly sensitive/privat respons hanya |
public | Shared caches (CDNs) dapat store ini | CDN-cacheable assets |
private | hanya end pengguna’s browser dapat store ini | Per-pengguna respons |
immutable | Skip revalidation sementara masih fresh (tidak “never stale” (terjemahan) “tidak pernah stale”) | Fingerprinted assets |
must-revalidate | Setelah stale, harus revalidate sebelum reuse — Tidak serving stale-pada-error | konten di mana sebuah wrong stale respons adalah worse daripada sebuah lebih lambat satu |
s-maxage | Freshness untuk shared (CDN) caches secara khusus | Terpisah CDN vs. browser lifetimes |
stale-while-revalidate / stale-if-error | Bounded stale reuse sementara refetching / pada origin error (mendukung varies) | tinggi-traffic halaman, resilience selama origin errors |
Apa Googlebot sebenarnya honors
- ✅
ETag+If-None-Match(Google’s preferred validator) - ✅
Last-Modified+If-Modified-Since(format date per HTTP:Fri, 4 Sep 1998 19:15:56 GMT) - ✅
max-age— tetapi hanya sebagai sebuah recrawl-timing hint, tidak sebuah aturan - ❌ Semuanya else — “other HTTP caching directives tidak supported” (terjemahan) “lainnya HTTP caching directives tidak didukung”
Fast facts
- Google prefers ETag; jika keduanya adalah set, ETag wins. Set keduanya anyway (CMSes gunakan them).
- sebuah matching validator →
304 Not Modified, Tidak body → saves compute dan bandwidth. - Chrome/Lighthouse: cache immutable assets sebuah tahun atau lebih lama.
- CDNs mendapatkan sebuah lebih tinggi crawl-rate allowance — tetapi hanya setelah cache adalah warm.
- Temporary block? kembalikan 503/429, tidak pernah sebuah silent 200-dengan-error atau sebuah bot interstitial.
no-storepada HTML document dapat disqualify bfcache → gunakanno-cache/max-age=0.- “Google cache” (terjemahan) “Google cache” (
cache:operator) adalah retired di 2024 — unrelated untuk HTTP caching.
Caching myths dan mistakes
setiap satu: mengapa ini adalah wrong, dan apa untuk melakukan alih-alih.
Myth: “Caching my page will boost my rankings.” (terjemahan) “Caching my halaman akan boost my rankings.” Mengapa ini adalah wrong: ada Tidak sinyal peringkat untuk caching configuration. Google’s Penelusuran Relations team memiliki telah jelas caching tidak sebuah peringkat factor. melakukan alih-alih: siapkan caching untuk nyata payoffs — kecepatan halaman / Core Web Vitals dan crawl efficiency — keduanya dari yang touch visibilitas indirectly. jangan expect sebuah direct bump.
Myth: “Google’s cache dan HTTP caching adalah itu hal yang sama.” (terjemahan) “Google’s cache dan HTTP caching adalah yang sama hal.”
Mengapa ini adalah wrong: cache: penelusuran operator dan cached-halaman viewer adalah sebuah
pengguna-facing snapshot fitur, fully retired di 2024. HTTP caching
(Cache-Control/ETag) adalah unrelated infrastructure.
melakukan alih-alih: Ignore missing “cached version” (terjemahan) “cached versi” — ini says tidak ada apa pun tentang Anda
caching setup. Judge Anda caching oleh headers dan oleh crawl/performa perilaku.
Myth: “no-cache berarti jangan cache.” (terjemahan) “no-cache berarti jangan simpan di cache.”
Mengapa ini adalah wrong: no-cache berarti “store it, but revalidate with the server before
using it.” (terjemahan) “store ini, tetapi revalidate dengan server sebelum
menggunakan ini.” ini masih enables 304 revalidation flow. no-store adalah directive
itu sebenarnya mencegah storage.
melakukan alih-alih: gunakan no-cache ketika Anda ingin freshness dengan revalidation; reserve
no-store untuk genuinely sensitive respons itu harus tidak pernah menjadi stored.
Myth: “A long cache duration makes Google see stale content forever.” (terjemahan) “sebuah panjang cache duration membuat Google see stale konten forever.”
Mengapa ini adalah wrong: Google’s crawler validates melalui ETag/Terakhir-Modified pada recrawl
regardless dari Anda max-age; max-age adalah sebuah recrawl hint, tidak sebuah lock itu berhenti
Google refetching.
melakukan alih-alih: Cache panjang, tetapi trigger sebuah nyata cache-buster (baru ETag/Terakhir-Modified atau
URL) pada significant konten perubahan — persis Google’s own recommendation.
Myth: “A CDN secara otomatis memperbaiki anggaran crawling problems.” (terjemahan) “sebuah CDN secara otomatis memperbaiki anggaran crawling masalah.” Mengapa ini adalah wrong: sebuah CDN helps hanya setelah -nya cache adalah warm; origin masih menyajikan setiap URL setidaknya setelah ( cold-cache masalah), dan sebuah misconfigured CDN dapat block crawler dan membuat hal worse. melakukan alih-alih: Plan untuk origin muat pada big launches/migrations, dan verify CDN tidak blocking bot (pemeriksaan URL, dan kembalikan 503/429 untuk temporary blocks).
Myth: “Any Cache-Control directive I set perubahan bagaimana Googlebot crawls.” (terjemahan) “Setiap direktif Cache-Control yang saya tetapkan mengubah cara Googlebot melakukan crawl.”
Mengapa ini adalah wrong: Per Google’s docs, beyond ETag/Terakhir-Modified (dan opsional
max-age hint), “other HTTP caching directives tidak supported” (terjemahan) “lainnya HTTP caching directives tidak didukung” oleh crawler.
melakukan alih-alih: gunakan stale-while-revalidate, s-maxage, no-cache, dan seterusnya. untuk tune
browser dan CDN perilaku — tetapi rely pada ETag/Terakhir-Modified untuk influence Googlebot’s
caching.
Caching setups, sebelum dan setelah
1. Static asset dengan Tidak cache policy → PageSpeed warning hilang
- sebelum:
style.cssdisajikan dengan TidakCache-Control; Lighthouse flags “Serve static assets dengan an efficient cache policy,” (terjemahan) “sajikan static assets dengan sebuah efficient cache policy,” repeat visits re-download ini. - setelah: Rename untuk
style.a1b2c3.cssdan sajikanCache-Control: public, max-age=31536000, immutable. Repeat visits skip download; sebuah konten perubahan berarti sebuah baru filename, invalidating instantly.
2. HTML document Anda wanted “fresh” (terjemahan) “fresh” → bfcache lost
- sebelum:
Cache-Control: no-storepada HTML untuk force freshness. Side effect: halaman adalah disqualified dari bfcache, so “back” (terjemahan) “back” navigations remeasure LCP/CLS/INP dan drag Anda CrUX data lapangan. - setelah: Switch untuk
no-cache(ataumax-age=0) — Anda masih revalidate untuk freshness, tetapi halaman tetap bfcache-eligible dan repeat navigations restore instantly.
3. Shared cache antara staging dan production → intermittent Googlebot block
- sebelum: Test dan langsung environments share sebuah CDN cache. Ketika test versi adalah
active, cached
robots.txtcarries sebuah blocking directive, so Googlebot intermittently sees sebuah disallow ini tidak seharusnya. - setelah: Split cache antara environments — atau exclude
.txtfiles dari test-environment cache — so langsungrobots.txtadalah tidak pernah disajikan dari sebuah staging cache. (ini adalah sebuah nyata case I wrote up di terindeks, though blocked oleh robots.txt.)
4. Big launch behind sebuah CDN → crawl spike Anda tidak expect
- sebelum: Ship 50 000 baru URLs di setelah assuming CDN absorbs muat. setiap URL adalah sebuah cold-cache miss, so origin menyajikan setiap satu setidaknya setelah dan laju crawling tetap tinggi untuk days.
- setelah: Warm cache ahead dari launch (atau stage rollout), dan expect — dan provision untuk — origin taking penuh muat per URL sebelum CDN dimulai shielding ini.
HTTP caching setup checklist
- Static assets (images, CSS, JS, fonts) carry sebuah panjang
max-age(sebuah tahun+ untuk immutable/versioned files). - Versioned/hashed filenames adalah digunakan so Anda dapat cache aggressively dan masih invalidate instantly.
-
ETagadalah set (Google’s preferred validator);Last-Modifiedset too, dengan sebuah correctly formatted HTTP date. - Anda server mengembalikan
304 Not Modified(Tidak body) ketika sebuah validator masih matches. - HTML documents itu perlu freshness gunakan
no-cache/max-age=0, tidakno-store(lindungi bfcache eligibility). - sebuah significant konten perubahan triggers sebuah nyata cache-buster (baru ETag/Terakhir-Modified/URL), tidak hanya sebuah footer date tweak.
- sebuah CDN adalah di front dari origin, dengan
public/s-maxageset so shared caches dapat store apa seharusnya menjadi shared. - Cache adalah purged pada publish so bot tidak pernah mendapatkan stale konten.
- Staging dan production melakukan tidak share sebuah cache untuk
robots.txtatau lainnya control files. - Temporary blocks kembalikan
503/429, tidak silent 200-dengan-halaman error atau bot interstitials. - pemeriksaan URL di Search Console menampilkan Anda nyata halaman (tidak sebuah challenge atau empty halaman) — confirming CDN/WAF tidak blocking Googlebot.
Diperbarui files stay stale setelah deployment
Symptom: pengunjung pertahankan receiving sebuah old CSS, JavaScript, atau image file. mungkin penyebab: sebuah panjang-lived cache menggunakan yang sama URL untuk changed bytes. Perbaiki: publish immutable assets dengan konten-hashed filenames dan perbarui HTML reference; purge old edge object hanya ketika URL itself adalah reused. Konfirmasi baru URL memuat.
Googlebot re-downloads unchanged halaman
Symptom: logs tampilkan repeated penuh 200 respons untuk unchanged HTML. mungkin
penyebab: missing atau unstable ETag/Last-Modified validators. Perbaiki: emit sebuah stable,
konten-correct validator dan test sebuah conditional permintaan. sebuah berfungsi revalidation
mengembalikan 304 ketika representation memiliki tidak changed.
berbeda pengguna menerima wrong cached variant
Symptom: language, device, logged-di, atau personalized konten leaks di seluruh pengguna.
mungkin penyebab: shared cache key melakukan tidak sertakan dimension itu perubahan
respons, atau privat konten adalah marked publik. Perbaiki: correct cache key dan
Vary perilaku, mark privat respons appropriately, purge contaminated objects,
dan retest multiple variants.
CDN cache tidak pernah reports sebuah hit
Symptom: repeat eligible permintaan continue reaching origin. mungkin penyebab:
no-store/private, cookies, sebuah overly fragmented cache key, atau sebuah edge bypass aturan.
Perbaiki: inspect respons dan CDN cache-status headers, perubahan hanya aturan safe untuk itu
konten class, lalu permintaan yang sama cache key twice untuk konfirmasi sebuah hit.
Cache oleh representation risk, tidak oleh file extension alone
Classify setiap respons sebelum assigning policy:
- Immutable publik asset: konten-hashed CSS, JS, fonts, atau images dapat gunakan panjang lifetime karena changed bytes mendapatkan sebuah baru URL.
- Publik tetapi mengubah document: HTML dapat menjadi stored briefly atau revalidated dengan
ETag/Last-Modified; freshness dan fast correction penting lebih daripada maximum TTL. - pengguna-spesifik respons: shared caching adalah unsafe unless personalization adalah dihapus dari representation atau correctly separated di cache key.
- Sensitive respons: gunakan strict policy data memerlukan, accepting performa tradeoff alih-alih exposing konten.
berguna pertanyaan adalah tidak “Bagaimana long dapat I cache ini jenis?” (terjemahan) “Bagaimana panjang dapat I cache ini jenis?” ini adalah “What would be wrong if this exact representation were reused for this requester after this change?” (terjemahan) “Apa akan menjadi wrong jika ini tepat representation adalah reused untuk ini requester setelah ini perubahan?”
Freshness, correctness, efficiency
sebuah caching policy memiliki untuk lulus three tests: freshness (perubahan muncul ketika promised), correctness ( right requester menerima right variant), dan efficiency (unchanged bytes adalah tidak regenerated atau transferred needlessly). sebuah tinggi hit ratio adalah tidak sebuah success jika ini menyajikan wrong respons.
alat untuk inspecting HTTP caching
- browser DevTools Network panel — inspect
Cache-Control,ETag,Last-Modified,Age,Vary, dan apakah respons came dari memory, disk, atau network. curl— kirimHEADdan conditional permintaan tanpa browser-cache ambiguity; bandingkan awal validator denganIf-None-MatchatauIf-Modified-Since.- PageSpeed Insights / Lighthouse — temukan static assets dengan inefficient cache policies; artikel tautan official Lighthouse cache-policy guidance.
- CDN analytics dan logs — inspect hit/miss/bypass status, cache keys, origin permintaan, dan purges di layer itu sebenarnya menyajikan publik respons.
- server logs — verify Googlebot menerima
304revalidations alih-alih penuh bodies untuk unchanged halaman.
Prove sebuah caching perubahan berfungsi
Conditional-permintaan test
Test untuk jalankan: fetch respons, copy -nya ETag, lalu permintaan ini dengan
If-None-Match. Yang diharapkan hasil: sebuah unchanged representation mengembalikan 304 dengan
Tidak respons body. Failure interpretation: validator adalah missing, unstable, atau
ignored. Monitoring window: immediate. Rollback trigger: changed konten adalah
incorrectly answered dengan 304 atau validator collides di seluruh variants.
Versioned-asset test
Test untuk jalankan: deploy changed bytes di bawah sebuah baru konten-hashed URL dan reload sebuah halaman itu references ini. Yang diharapkan hasil: baru URL mengembalikan baru asset sementara old URL dapat tetap cached. Failure interpretation: HTML masih references old asset atau bangun melakukan tidak perubahan hash. Monitoring window: immediate setelah HTML/CDN propagation. Rollback trigger: rusak styling atau script errors pada baru asset.
Shared-cache variant test
Test untuk jalankan: permintaan setiap bermakna variant melalui CDN, repeat setiap, dan
bandingkan body, cache key/status, dan Vary. Yang diharapkan hasil: setiap requester mendapatkan
correct representation dan hanya safe variants adalah reused. Failure
interpretation: cache key adalah missing sebuah dimension atau privat konten adalah shared.
Monitoring window: immediate plus production log review. Rollback trigger:
satu pengguna menerima lainnya pengguna’s personalized atau language-spesifik respons.
Uji pemahaman Anda: Caching untuk SEO
Five quick pertanyaan pada HTTP caching, CDNs, dan crawling. 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.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.