Conditional permintaan: ETag, jika-Modified-Since & 304 tidak diubah

Bagaimana conditional permintaan — ETag, Terakhir-Modified, jika-Modified-Since/jika-None-Match, dan 304 tidak diubah respons — let Googlebot skip re-downloading unchanged halaman dan pertahankan anggaran crawling pada besar situs.

Pertama kali diterbitkan: 28 Jun 2026 · Terakhir diperbarui: 8 Agu 2026 · Advanced
Bahasa
1 sinyal bukti di halaman ini

Conditional permintaan adalah bagaimana Googlebot menanyakan 'memiliki ini halaman changed since I terakhir di-crawl ini?' sebelum re-downloading. ini mengirim jika-Modified-Since (diperiksa terhadap Anda Terakhir-Modified header) dan/atau jika-None-Match (diperiksa terhadap Anda ETag); jika tidak ada apa pun changed, Anda server seharusnya kembalikan 304 tidak diubah dengan Tidak body dan crawler reuses -nya existing copy — roughly sebuah kilobyte alih-alih seluruh halaman. Google prefers ETag ketika keduanya adalah present, tidak kirim headers pada setiap crawl, dan sebuah 304 melakukan tidak freeze pengindeksan sinyal. payoff adalah crawl efficiency pada besar situs dengan banyak rarely-mengubah URLs — ini adalah tidak sebuah peringkat factor. situs diam-diam break ini three cara: selalu returning 200 dengan sebuah penuh body, ETags itu perubahan pada setiap permintaan (timestamps, per-permintaan tokens, per-node CDN variance), dan sebuah Terakhir-Modified itu tidak reflect nyata konten perubahan.

TL;DR — Conditional permintaan let Googlebot validate sebuah cached copy alih-alih re-downloading ini. ini mengirim If-Modified-Since (validated terhadap Anda Last-Modified header) dan/atau If-None-Match (validated terhadap Anda ETag); jika tidak ada apa pun changed, Anda server mengembalikan 304 Not Modified dengan Tidak body dan crawler reuses -nya copy — roughly ~1 KB vs. 100 KB+ untuk sebuah penuh halaman. ETag wins ketika keduanya adalah present; Google recommends ETag (Tidak date-format pitfalls) tetapi says set keduanya. Google tidak kirim headers pada setiap crawl (gunakan-case dependent — AdsBot adalah likelier untuk), Anda dapat proactively sajikan 304 bahkan tanpa sebuah conditional header, dan sebuah 304 melakukan tidak freeze pengindeksan sinyal. Three misconfigurations defeat ini: selalu-200, volatile ETags (timestamps, per-permintaan tokens, per-node CDN variance), dan sebuah Last-Modified itu tidak track nyata perubahan. ini adalah sebuah crawl-efficiency lever untuk besar situs — tidak sebuah peringkat factor, dan distinct dari laju crawling, frequency, dan budget.

Evidence for this claim Google may send If-Modified-Since or If-None-Match, but a site must not assume every crawler request will contain either conditional header. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Troubleshoot Google Search crawling errors Evidence for this claim Conditional requests use validators such as ETag and Last-Modified with If-None-Match or If-Modified-Since. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: Conditional requests Evidence for this claim A 304 response indicates a conditional request can reuse a stored representation and does not include a message body. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: 304 Not Modified

mechanism, precisely

Di mana laju crawling adalah bagaimana fast Googlebot fetches dan crawl frequency adalah bagaimana sering ini muncul back, conditional permintaan adalah tentang bagaimana cheaply setiap individual recrawl dapat menjadi answered. mereka’re sebuah validation handshake antara crawler dan Anda server, dibangun pada dua pairs dari header HTTP:

Anda kirim (respons header)crawler mengirim back (permintaan header)Validates oleh
Last-Modified: <date>If-Modified-Since: <date>Comparing dates
ETag: "<fingerprint>"If-None-Match: "<fingerprint>"Comparing konten IDs

flow, langkah oleh langkah:

  1. pada pertama crawl, Anda server mengembalikan halaman dengan 200 OK plus sebuah Last-Modified date dan/atau sebuah ETag fingerprint.
  2. pada sebuah kemudian crawl, Googlebot dapat kirim If-Modified-Since (echoing back date ini terakhir saw) dan/atau If-None-Match (echoing back ETag).
  3. Anda server memeriksa them. jika tidak ada apa pun relevant changed, ini mengembalikan 304 Tidak Modified dengan Tidak respons body — hanya status dan headers.
  4. Googlebot reuses versi ini di-crawl terakhir time. jika konten melakukan perubahan, Anda server mengembalikan 200 OK dengan penuh body.

Google documents handshake hampir kata untuk kata: “Google’s crawlers itu dukung caching akan kirim itu ETag value returned untuk a sebelumnya crawl dari itu URL di itu Jika-None-Match header. Jika itu ETag value dikirim oleh itu crawler matches itu saat ini value itu server generated, Anda server seharusnya return an HTTP 304 (Tidak modified) status code dengan Tidak HTTP body.” (terjemahan) “Google’s crawler itu mendukung caching akan kirim ETag nilai dikembalikan untuk sebuah sebelumnya crawl dari itu URL di jika-None-Match header. jika ETag nilai dikirim oleh crawler matches saat ini nilai server generated, Anda server seharusnya kembalikan sebuah HTTP 304 (Tidak modified) kode status dengan Tidak HTTP body.”

Evidence for this claim Google documents heuristic HTTP caching and support for ETag and Last-Modified validators for crawlers that support caching. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Things to Know about Google web crawling
The validator makes the recrawl conditional: unchanged content returns a lightweight 304, while a real change returns the full 200 response. Sumber: Google Search Central

A crawler revalidates its saved copy by sending If-None-Match with an ETag or If-Modified-Since with a date. The server compares that validator. If the representation is unchanged, it returns 304 Not Modified without a response body and the crawler reuses its saved copy. If the representation changed, the server returns 200 OK with the full updated response body.

© Patrick Stox LLC · CC BY 4.0 ·

ETag vs. Terakhir-Modified — dan mengapa Google prefers ETag

Keduanya validators adalah didukung. Google’s crawling docs state ini plainly: “Google’s crawling infrastructure supports heuristic HTTP caching as defined by the HTTP caching standard, specifically through the ETag response- and If-None-Match request header, and the Last-Modified response- and If-Modified-Since request header.” (terjemahan) “Infrastruktur crawling Google mendukung caching HTTP heuristik sebagaimana ditetapkan oleh standar HTTP, khususnya melalui header respons ETag dan permintaan If-None-Match, serta header respons Last-Modified dan permintaan If-Modified-Since.”

Evidence for this claim Google documents heuristic HTTP caching and support for ETag and Last-Modified validators for crawlers that support caching. Scope: official protocol/provider documentation and production verification Confidence: high · Verified: Things to Know about Google web crawling

Ketika keduanya adalah present, ETag wins: “Jika keduanya ETag dan Terakhir-Modified response header fields adalah present di itu HTTP response, Google’s crawlers gunakan itu ETag value sebagai wajib oleh itu HTTP standard.” (terjemahan) “jika keduanya ETag dan Terakhir-Modified respons header fields adalah present di respons HTTP, Google’s crawler gunakan ETag nilai sebagai diperlukan oleh HTTP standard.” itu’s tidak hanya sebuah Google quirk — ini adalah HTTP spec, dan ini matches precedence aturan I’ve described di my Ahrefs glossary entry pada 304 tidak diubah: ketika keduanya If-None-Match dan If-Modified-Since adalah digunakan, If-None-Match takes precedence.

Mengapa prefer ETag? Karena ini adalah sebuah opaque string — sebuah fingerprint dari konten — so ini sidesteps date-parsing traps itu plague Last-Modified. Google’s own recommendation: “For Google’s crawlers specifically, we recommend using ETag instead of the Last-Modified header to indicate caching preference as ETag doesn’t have date formatting issues.” (terjemahan) “untuk Google’s crawler secara khusus, kami merekomendasikan menggunakan ETag alih-alih Terakhir-Modified header untuk indicate caching preference sebagai ETag tidak memiliki date formatting issues.” jika Anda melakukan gunakan Last-Modified, date memiliki untuk menjadi formatted untuk HTTP standard (Weekday, DD Mon YYYY HH:MM:SS Timezone) atau Google dapat tidak parse ini. dan Google’s practical advice adalah untuk set keduanya anyway jika Anda dapat — belt dan suspenders.

ada sebuah bonus sinyal too: Cache-Control: max-age. Google says ini adalah tidak diperlukan, tetapi Anda dapat set ini untuk angka dari seconds Anda expect konten untuk stay unchanged untuk help crawler decide ketika untuk recrawl. Note asymmetry — Google’s crawling infrastructure honors max-age sebagai sebuah hint tetapi tidak treat lainnya Cache-Control directives cara sebuah browser akan.

Apa sebuah 304 melakukan — dan apa ini tidak

payoff adalah dramatic pada wire. sebuah 304 carries Tidak body, so per Gary Illyes’ rough perbandingan ini adalah pada order dari ~1 KB alih-alih 100 KB+ untuk sebuah penuh halaman — dan ini adalah cheaper untuk generate (Tidak penuh render atau database kueri) dan cheaper untuk Google untuk proses (Tidak re-parsing, re-rendering, atau re-berjalan seluruh pengindeksan pipeline pada body).

tetapi menjadi precise tentang apa sebuah 304 melakukan tidak melakukan: ini melakukan tidak freeze Anda peringkat sinyal. Google’s own status-code guidance notes itu pada sebuah 304 pengindeksan pipeline “may recalculate signals for the URL,” (terjemahan) “pipeline dapat menghitung ulang sinyal untuk URL tersebut,” bahkan though ini tidak re-fetch body. sebuah 304 skips download dan re-processing dari konten — tidak setiap downstream evaluation. So ada Tidak “serve 304s to lock in my rankings” (terjemahan) “sajikan 304s untuk lock di my rankings” trick di sini.

Google tidak selalu tanyakan — dan itu’s wajar

Di sini’s sebuah detail sebagian besar tulis-ups miss: Googlebot tidak kirim conditional headers pada setiap permintaan. dari Google’s crawling-errors doc: “Google generally supports the If-Modified-Since and If-None-Match HTTP request headers for crawling. Google’s crawlers don’t send the headers with all crawl attempts; it depends on the use case of the request (for example, AdsBot is more likely to set the If-Modified-Since and If-None-Match HTTP request headers).” (terjemahan) “Google umumnya mendukung header permintaan HTTP If-Modified-Since dan If-None-Match untuk crawling. Crawler Google tidak mengirim header itu pada semua percobaan crawl; hal ini bergantung pada kasus penggunaan permintaan tersebut (misalnya, AdsBot lebih mungkin menetapkan header If-Modified-Since dan If-None-Match).”

So jika Anda look di Anda logs dan see Googlebot rarely sending If-None-Match, itu melakukan tidak berarti Anda setup adalah rusak — Google dapat sekadar tidak menjadi asking pada itu crawl. Google juga notes itu individual crawler dan fetchers dapat atau dapat tidak gunakan caching depending pada product mereka sajikan.

dan flip side — sebuah genuinely underused implementation detail — Anda dapat sajikan 304 tanpa receiving sebuah conditional header di semua. Google: “Independently of the request headers, you can send a 304 (Not Modified) HTTP status code and no response body for any Googlebot request if the content hasn’t changed since Googlebot last visited the URL. This will save your server processing time and resources, which may indirectly improve crawl efficiency.” (terjemahan) “Terlepas dari header permintaan, Anda dapat mengirim kode status HTTP 304 (Tidak diubah) tanpa body respons untuk permintaan Googlebot apa pun jika konten tidak berubah sejak Googlebot terakhir mengunjungi URL tersebut. Ini menghemat waktu dan sumber daya pemrosesan server, yang secara tidak langsung dapat meningkatkan efisiensi crawling.” itu’s sebuah advanced CDN/edge technique — dan sebuah dangerous satu jika Anda mendapatkan ini wrong, karena serving 304 untuk konten itu melakukan perubahan adalah persis “your validators lie” (terjemahan) “Anda validators lie” failure mode. Treat ini sebagai sebuah edge optimization, tidak sebuah shortcut untuk fake freshness.

Mengapa ini penting untuk anggaran crawling

savings compound hardest pada tepat profile Google’s crawl-budget guidance sudah flags: besar situs dengan sebuah big share dari rarely-mengubah URLs — e-commerce catalogs dengan panjang-tail SKUs, news dan publisher archives, big documentation situs. pada itu situs, sebuah bermakna slice dari anggaran crawling dapat menjadi spent re-downloading halaman itu adalah byte-untuk-byte identical untuk terakhir crawl. jawaban itu dengan 304s dan Anda free itu budget untuk baru dan changed halaman alih-alih.

honest, slightly deflating bagian: Google adalah asking untuk lebih adoption di sini, tidak reporting itu everyone sudah melakukan ini. Illyes memiliki noted itu share dari Googlebot’s fetches itu adalah cacheable memiliki sebenarnya fallen di atas terakhir decade — dari sekitar 0,026% untuk tentang 0,017% — bahkan sebagai web memiliki grown. dengan kata lain, ini adalah sebuah underused lever, dan “Crawling December” (terjemahan) “crawling December” post’s own bagian heading adalah sebuah near-literal plea: “Allow us to cache, pretty please.” (terjemahan) “Izinkan us untuk cache, pretty please.” sebagian besar situs sekadar tidak configured untuk ini.

umum misconfigurations itu defeat conditional permintaan

Setting sebuah validator adalah tidak yang sama sebagai benefiting dari satu. Three (well, four) cara situs diam-diam break ini:

1. selalu returning 200 dengan sebuah penuh body

paling umum failure adalah melakukan tidak ada apa pun — server tidak pernah sets validators atau tidak pernah memeriksa them, so setiap crawl adalah sebuah penuh re-download regardless dari apakah apa pun changed. biasanya ini adalah sebuah CMS/server stack dengan Tidak caching layer configured di semua. ini adalah default state Illyes adalah nudging orang out dari.

2. ETags itu perubahan pada setiap single permintaan

ini satu adalah nastier karena ini looks correct. jika Anda ETag adalah computed dari sesuatu volatile — sebuah embedded timestamp, sebuah per-permintaan atau per-session token, sebuah permintaan ID, atau sebuah bangun artifact itu bakes di sebuah bangun time — lalu setiap respons mendapatkan sebuah “new” (terjemahan) “baru” ETag bahkan ketika terlihat konten adalah identical. If-None-Match tidak pernah matches, so Anda server tidak pernah memiliki grounds untuk kembalikan 304. Perbaiki: derive ETag dari sebuah hash dari sebenarnya respons body atau sebuah stable konten-versi identifier, tidak dari apa pun itu varies per permintaan.

3. Per-node CDN/cluster variance

sebuah close cousin: berbeda origin nodes generating berbeda (weak) ETags untuk identical konten. sebuah CDN atau crawler alternating antara nodes tidak pernah sees sebuah stable nilai dan mempertahankan re-validating tanpa ever landing sebuah bersih 304. Perbaiki: generate ETags deterministically dari konten, tidak per-instance state, atau centralize ETag generation di seluruh fleet.

4. sebuah Terakhir-Modified itu tidak reflect nyata perubahan

jika Anda Last-Modified mendapatkan stamped dengan “now” (terjemahan) “now” pada setiap render, atau bumped oleh sebuah trivial perubahan like sebuah auto-updating copyright tahun di footer, ini either triggers pointless penuh re-melakukan crawl ( date selalu looks baru) atau, jika ini adalah stale/gamed, erodes Google’s trust di sinyal. ini adalah yang sama honesty principle Google applies untuk sitemap lastmod nilai — hanya gunakan ini jika ini verifiably reflects sebuah significant perubahan. crawl-frequency artikel covers itu lastmod logic; identical discipline applies untuk Last-Modified header HTTP.

Illyes edge case: ketika sebuah 304 locks di sebuah rusak halaman

Worth -nya own callout, karena ini adalah genuinely counterintuitive dan hampir tidak seorang pun covers ini. Illyes memiliki described bagaimana sebuah 304 dapat “backfire spectacularly” (terjemahan) “backfire spectacularly”: sebuah server bug menyajikan sebuah rusak, empty halaman dengan sebuah 200; crawler memperlakukan ini sebagai sebuah transient error dan schedules sebuah recrawl untuk verify; masih-rusak halaman lalu correctly reports 304 (“unchanged” (terjemahan) “unchanged”); dan crawler concludes error state adalah durable, “real” (terjemahan) “nyata” konten dan berhenti rechecking sebagai sering. His numbered walkthrough ends dengan crawler “learn[ing] itu error adalah persistable.” (terjemahan) “learn[ing] error adalah persistable.” His own caveat: melakukan ini happen? Ya. sering? Absolutely tidak — “tetapi ini worth mempertahankan ini di suatu tempat deep di Anda mind karena debugging it adalah an absolute nightmare.” (terjemahan) “tetapi ini adalah worth mempertahankan ini di suatu tempat deep di Anda mind karena debugging ini adalah sebuah absolute nightmare.” lesson: conditional permintaan dapat entrench sebuah error jika underlying konten generation adalah rusak, so jangan bolt them pada di atas sebuah flaky origin.

Bagaimana Bing menangani ini

ini tidak sebuah Google-hanya fitur, dan Bing’s mendukung adalah arguably older dan lebih jelas. Bing (back ketika ini adalah Langsung Penelusuran) announced RFC-2616-compliant conditional Mendapatkan di 2008: ini “generally akan tidak download itu halaman unless it memiliki changed since itu terakhir time it crawled it,” (terjemahan) “umumnya akan tidak download halaman unless ini memiliki changed since terakhir time ini di-crawl ini,” sending If-Modified-Since dengan time dari terakhir download dan, ketika tersedia, If-None-Match dengan ETag. Hari ini Bing folds ini ke sebuah named, trackable metric — crawl efficiency — yang Fabrice Canel defines sebagai “how often we crawl and discover new and fresh content per page crawled.” (terjemahan) “seberapa sering kami merayapi dan menemukan konten baru dan segar per halaman yang dirayapi.” Unnecessary re-melakukan crawl dari unchanged konten secara langsung lebih rendah itu score. So yang sama validators sajikan keduanya mesin; Bing hanya memberikan concept sebuah scoreboard.

Evidence for this claim Conditional requests use validators such as ETag and Last-Modified with If-None-Match or If-Modified-Since. Scope: Current official or standards documentation. Confidence: high · Verified: RFC 9110: Conditional requests

melakukan ini memengaruhi rankings?

Tidak. pertahankan yang sama discipline crawl-rate dan crawl-budget artikel hold untuk: conditional permintaan adalah sebuah crawl-efficiency dan resource lever, tidak sebuah peringkat factor. Tidak official sumber ties ETag/If-Modified-Since/304 untuk rankings. indirect benefit adalah itu besar atau frequently-diperbarui situs dapat mendapatkan baru dan changed konten di-crawl dan terindeks sooner — tetapi crawling lebih efficiently adalah tidak itself sebuah sinyal peringkat.

cara verify ini adalah berfungsi

ground truth adalah Anda server logs. cari dua hal: Googlebot sending If-None-Match/If-Modified-Since permintaan headers, dan Anda server returning 304 respons untuk ini. dunia nyata data adalah thin di sini, yang adalah apa membuat Dave Smart’s server-log study di Tame bot valuable: monitoring verified Googlebot traffic, he ditemukan hanya tentang 1,3% dari permintaan mendapat sebuah 304 — mostly 200s — dan itu If-None-Match permintaan tended untuk cluster ketika sebuah URL adalah requested again shortly setelah sebuah prior fetch. His conclusion matches guidance: infrequent pada kecil situs, tetapi potentially “significant savings” (terjemahan) “significant savings” pada heavily-di-crawl ones. jangan expect sebuah tinggi 304 rate pada sebuah kecil situs; melakukan expect ini untuk penting di scale.

Conditional permintaan vs. rate vs. frequency vs. budget

untuk pertahankan crawl-budget family straight:

  • laju crawling — bagaimana fast Googlebot fetches (supply side, throttled oleh server health).
  • crawl frequency — bagaimana sering sebuah known URL adalah re-fetched (popularity + staleness).
  • anggaran crawling — demand + capacity envelope: set dari URLs Google dapat dan ingin untuk crawl.
  • Conditional permintaan — bagaimana cheaply setiap individual recrawl dapat menjadi answered. mereka jangan perubahan bagaimana fast atau bagaimana sering Google melakukan crawl; mereka membuat setiap unchanged-halaman visit hampir free, yang adalah bagaimana Anda berhenti wasting budget pada identical konten.

Add an expert note

Pin an expert quote

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