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.

Pertama kali diterbitkan: 2 Jul 2026 · Terakhir diperbarui: 8 Agu 2026 · Advanced
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.

TL;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-age hanya 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.

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 caching

three layers dari caching

Caching untuk SEO tidak satu hal — ini adalah three, setiap controlled sebuah little differently:

  1. 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.”
  2. 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.
  3. 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-cachetidak “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” — setelah max-age berjalan 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 decliningtentang 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; Vary menambahkan permintaan headers (like User-Agent atau Accept-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 untuk Vary dan 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 dari Vary, 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.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.