Koşullu İstekler: ETag, If-Modified-Since ve 304 Not Modified

Koşullu isteklerin — ETag, Last-Modified, If-Modified-Since/If-None-Match ve 304 Not Modified yanıtının — Googlebot'un değişmemiş sayfaları yeniden indirmemesini ve büyük sitelerde tarama bütçesini korumasını nasıl sağladığı.

İlk yayın tarihi: 28 Haz 2026 · Son güncelleme: 9 Ağu 2026 · Advanced
Diller
Bu sayfada 1 kanıt sinyali

Koşullu istekler, Googlebot'un bir sayfayı yeniden indirmeden önce 'Bu sayfa, onu son taradığımdan beri değişti mi?' diye sormasını sağlar. Googlebot, If-Modified-Since (Last-Modified başlığınıza göre denetlenir) ve/veya If-None-Match (ETag değerinize göre denetlenir) gönderir; hiçbir şey değişmediyse sunucunuz gövdesiz 304 Not Modified döndürmeli ve tarayıcı mevcut kopyasını yeniden kullanmalıdır — tüm sayfa yerine yaklaşık bir kilobayt. Her ikisi de mevcutsa Google ETag'i tercih eder, başlıkları her taramada göndermez ve 304 yanıtı indeksleme sinyallerini dondurmaz. Kazanç, nadiren değişen çok sayıda URL'ye sahip büyük sitelerde tarama verimliliğidir; bu bir sıralama faktörü değildir. Siteler bunu fark ettirmeden üç şekilde bozar: her zaman tam gövdeli 200 döndürerek, her istekte değişen ETag'ler kullanarak (zaman damgaları, istek başına belirteçler, CDN düğümleri arasındaki farklılıklar) ve gerçek içerik değişikliklerini yansıtmayan bir Last-Modified ayarlayarak.

TL;DR — Koşullu istekler, Googlebot’un bir sayfayı yeniden indirmek yerine önbellekteki kopyayı doğrulamasını sağlar. If-Modified-Since (Last-Modified başlığınıza göre doğrulanır) ve/veya If-None-Match (ETag değerinize göre doğrulanır) gönderir; hiçbir şey değişmediyse sunucunuz gövdesiz bir 304 Not Modified döndürür ve tarayıcı kopyasını yeniden kullanır — tam bir sayfa için 100 KB+ yerine kabaca ~1 KB. Her ikisi de mevcutsa ETag önceliklidir; Google, tarih biçimlendirme tuzakları bulunmadığı için ETag önerir ancak ikisinin de ayarlanmasını söyler. Google başlıkları her taramada göndermez (kullanım durumuna bağlıdır — AdsBot’un gönderme olasılığı daha yüksektir), koşullu başlık olmadan da proaktif olarak 304 sunabilirsiniz ve bir 304, indeksleme sinyallerini dondurmaz. Üç yanlış yapılandırma bunu etkisiz kılar: her zaman 200 döndürmek, değişken ETag değerleri (zaman damgaları, istek başına belirteçler, CDN düğümleri arasındaki farklılıklar) ve gerçek değişiklikleri izlemeyen bir Last-Modified. Bu, büyük sitelere yönelik bir tarama verimliliği aracıdır — sıralama faktörü değildir; tarama hızından, sıklığından ve bütçesinden farklıdır. 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

Mekanizmanın tam işleyişi

Tarama hızı Googlebot’un sayfaları ne kadar hızlı getirdiğini, tarama sıklığı ise ne sıklıkta geri döndüğünü ifade eder. Koşullu istekler, her bir yeniden taramaya ne kadar düşük maliyetle yanıt verilebildiğiyle ilgilidir. Tarayıcı ile sunucunuz arasında iki HTTP başlığı çiftine dayanan bir doğrulama el sıkışmasıdır:

Sizin gönderdiğiniz (yanıt başlığı)Tarayıcının geri gönderdiği (istek başlığı)Doğrulama yöntemi
Last-Modified: <date>If-Modified-Since: <date>Tarihleri karşılaştırma
ETag: "<fingerprint>"If-None-Match: "<fingerprint>"İçerik kimliklerini karşılaştırma

Adım adım akış şöyledir:

  1. İlk taramada sunucunuz sayfayı 200 OK ile birlikte bir Last-Modified tarihi ve/veya ETag parmak iziyle döndürür.
  2. Daha sonraki bir taramada Googlebot, son gördüğü tarihi geri ileten If-Modified-Since ve/veya ETag değerini geri ileten If-None-Match gönderebilir.
  3. Sunucunuz bunları denetler. İlgili hiçbir şey değişmediyse yanıt gövdesi olmadan 304 Not Modified döndürür — yalnızca durum ve başlıklar gönderilir.
  4. Googlebot son taradığı sürümü yeniden kullanır. İçerik gerçekten değiştiyse sunucunuz tam gövdeyle 200 OK döndürür.

Google bu el sıkışmasını neredeyse kelimesi kelimesine şöyle belgeliyor: “Google’s crawlers that support caching will send the ETag value returned for a previous crawl of that URL in the If-None-Match header. If the ETag value sent by the crawler matches the current value the server generated, your server should return an HTTP 304 (Not modified) status code with no 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. Kaynak: 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 ve Last-Modified — Google neden ETag’i tercih ediyor?

Her iki doğrulayıcı da desteklenir. Google’ın tarama belgeleri bunu açıkça belirtir: “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.” 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

Her ikisi de mevcutsa ETag önceliklidir: “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.” Bu yalnızca Google’a özgü bir tercih değildir — HTTP şartnamesinin kuralıdır ve Ahrefs glossary entry on 304 Not Modified yazımda açıkladığım öncelik kuralıyla aynıdır: hem If-None-Match hem de If-Modified-Since kullanıldığında If-None-Match önceliklidir.

Neden ETag tercih edilmeli? Çünkü opak bir dizedir — içeriğin parmak izidir — ve bu sayede Last-Modified başlığını etkileyen tarih ayrıştırma tuzaklarını aşar. Google’ın kendi önerisi şöyledir: “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.” Last-Modified kullanırsanız tarihin HTTP standardına (Weekday, DD Mon YYYY HH:MM:SS Timezone) göre biçimlendirilmesi gerekir; aksi hâlde Google bunu ayrıştıramayabilir. Google’ın pratik tavsiyesi, yapabiliyorsanız yine de ikisini de ayarlamanızdır — çifte güvence.

Bir ek sinyal daha vardır: Cache-Control: max-age. Google bunun zorunlu olmadığını söyler; ancak tarayıcıların ne zaman yeniden tarama yapacağına karar vermesine yardımcı olmak için içeriğin değişmeden kalmasını beklediğiniz saniye sayısına ayarlayabilirsiniz. Asimetriye dikkat edin — Google’ın tarama altyapısı max-age değerini ipucu olarak dikkate alır ancak diğer Cache-Control direktiflerini bir tarayıcının ele aldığı gibi ele almaz.

304 ne yapar, ne yapmaz?

Ağ üzerindeki kazanç çarpıcıdır. Bir 304 gövde taşımaz; Gary Illyes’in kaba karşılaştırmasına göre tam bir sayfanın 100 KB+ boyutuna karşılık yaklaşık ~1 KB düzeyindedir. Ayrıca üretilmesi (tam görüntüleme veya veritabanı sorgusu yoktur) ve Google’ın işlemesi (gövde yeniden ayrıştırılmaz, görüntülenmez veya tüm indeksleme işlem hattından tekrar geçirilmez) daha ucuzdur.

Ancak bir 304 yanıtının ne yapmadığı konusunda net olun: sıralama sinyallerinizi dondurmaz. Google’ın durum kodu yönergeleri, gövde yeniden getirilmemiş olsa bile 304 durumunda indeksleme işlem hattının URL sinyallerini yeniden hesaplayabileceğini (“may recalculate signals for the URL”) belirtir. Bir 304, içeriğin indirilmesini ve yeniden işlenmesini atlar — sonraki aşamalardaki her değerlendirmeyi değil. Dolayısıyla burada “sıralamalarımı korumak için 304 yanıtları sunayım” gibi bir hile yoktur.

Google her zaman sormaz — bu normaldir

Çoğu yazının atladığı bir ayrıntı var: Googlebot koşullu başlıkları her istekte göndermez. Google’ın tarama hataları belgesinde şöyle denir: “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).”

Bu nedenle günlüklerinizde Googlebot’un nadiren If-None-Match gönderdiğini görmeniz, yapılandırmanızın bozuk olduğu anlamına gelmez — Google o taramada bunu sormamış olabilir. Google ayrıca, her bir tarayıcı ve getiricinin hizmet verdiği ürüne bağlı olarak önbelleği kullanabileceğini veya kullanmayabileceğini belirtir.

Diğer taraftan, gerçekten yeterince kullanılmayan bir uygulama ayrıntısı olarak, hiç koşullu başlık almadan da 304 sunabilirsiniz. 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.” Bu ileri düzey bir CDN/uç tekniğidir ve yanlış uygulanırsa tehlikelidir; gerçekten değişen içerik için 304 sunmak tam olarak “doğrulayıcılarınızın gerçeği yansıtmaması” arıza biçimidir. Bunu sahte güncellik yaratmanın kestirme yolu değil, bir uç optimizasyonu olarak değerlendirin.

Tarama bütçesi açısından önemi

Tasarruf, Google’ın tarama bütçesi yönergelerinde zaten öne çıkardığı profilde en çok birikir: nadiren değişen URL’lerin büyük paya sahip olduğu büyük siteler — uzun kuyruklu SKU’lara sahip e-ticaret katalogları, haber ve yayıncı arşivleri, büyük dokümantasyon siteleri. Bu sitelerde tarama bütçesinin önemli bir kısmı, son taramayla bayt bayt aynı olan sayfaları yeniden indirmeye harcanabilir. Bunlara 304 ile yanıt vererek bütçeyi yeni ve değişen sayfalara ayırabilirsiniz.

Dürüst ve biraz heves kırıcı tarafı şu: Google herkesin bunu zaten yaptığını bildirmiyor; burada daha fazla benimsenmesini istiyor. Illyes, Googlebot’un önbelleğe alınabilen getirme işlemlerinin payının web büyümüş olmasına rağmen son on yılda yaklaşık %0,026’dan %0,017’ye düştüğünü belirtti. Başka bir deyişle bu, yeterince kullanılmayan bir araçtır ve “Crawling December” yazısının kendi bölüm başlığı neredeyse doğrudan bir yakarıştır: “Allow us to cache, pretty please.” Çoğu site bunun için yapılandırılmamıştır.

Koşullu istekleri etkisiz kılan yaygın yanlış yapılandırmalar

Bir doğrulayıcı ayarlamak, ondan faydalanmakla aynı şey değildir. Siteler bunu fark ettirmeden üç (daha doğrusu dört) şekilde bozar:

1. Her zaman tam gövdeli 200 döndürmek

En yaygın hata hiçbir şey yapmamaktır — sunucu doğrulayıcıları hiç ayarlamaz veya denetlemez; dolayısıyla bir şeyin değişip değişmediğine bakılmaksızın her tarama tam bir yeniden indirme olur. Bu genellikle hiçbir önbellek katmanı yapılandırılmamış bir CMS/sunucu yığınıdır. Illyes’in insanları çıkarmaya çalıştığı varsayılan durum budur.

2. Her istekte değişen ETag’ler

Bu daha sinsidir çünkü doğru görünür. ETag değeriniz yerleştirilmiş bir zaman damgası, istek veya oturum başına belirteç, istek kimliği ya da derleme zamanını içine alan bir derleme çıktısı gibi değişken bir şeyden hesaplanıyorsa görünür içerik aynı olsa bile her yanıt “yeni” bir ETag alır. If-None-Match hiçbir zaman eşleşmez; dolayısıyla sunucunuzun 304 döndürmesi için dayanak oluşmaz. Çözüm: ETag değerini istek başına değişen herhangi bir şeyden değil, gerçek yanıt gövdesinin karmasından veya kararlı bir içerik sürümü tanımlayıcısından türetin.

3. CDN/küme düğümleri arasındaki farklılıklar

Bunun yakın akrabası, farklı kaynak düğümlerinin aynı içerik için farklı (zayıf) ETag değerleri üretmesidir. Düğümler arasında geçiş yapan bir CDN veya tarayıcı kararlı bir değer göremez ve hiçbir zaman temiz bir 304 alamadan sürekli yeniden doğrulama yapar. Çözüm: ETag değerlerini örnek başına durumdan değil, içerikten belirlenimsel biçimde üretin veya ETag üretimini tüm sunucu filosunda merkezileştirin.

4. Gerçek değişiklikleri yansıtmayan bir Last-Modified

Last-Modified değeriniz her görüntülemede “şimdi” olarak damgalanıyor veya altbilgideki otomatik güncellenen telif hakkı yılı gibi önemsiz bir değişiklikle ilerletiliyorsa ya gereksiz tam yeniden taramaları tetikler (tarih her zaman yeni görünür) ya da eski/manipüle edilmişse Google’ın sinyale olan güvenini aşındırır. Bu, Google’ın site haritasındaki lastmod değerine uyguladığı dürüstlük ilkesiyle aynıdır — yalnızca önemli bir değişikliği doğrulanabilir biçimde yansıtıyorsa kullanın. Tarama sıklığı makalesi bu lastmod mantığını ele alır; aynı disiplin Last-Modified HTTP başlığı için de geçerlidir.

Illyes uç durumu: 304 bozuk bir sayfayı kalıcılaştırdığında

Gerçekten sezgilere aykırı olduğu ve neredeyse hiç kimse değinmediği için ayrıca vurgulanmayı hak ediyor. Illyes, bir 304 yanıtının nasıl “backfire spectacularly” olabileceğini açıklamıştır: Bir sunucu hatası, bozuk ve boş bir sayfayı 200 ile sunar; tarayıcı bunu geçici bir hata olarak değerlendirip doğrulamak üzere yeniden tarama planlar; hâlâ bozuk olan sayfa daha sonra doğru biçimde 304 (“unchanged”) bildirir; tarayıcı da hata durumunun kalıcı, “real” içerik olduğu sonucuna varıp daha seyrek denetlemeye başlar. Numaralandırılmış açıklamasını, tarayıcının “learn[ing] the error is persistable” olduğunu söyleyerek bitirir. Kendi uyarısı şöyledir: Bu olur mu? Evet. Sık mı? Kesinlikle hayır — “but it’s worth keeping this somewhere deep in your mind because debugging it is an absolute nightmare.” Çıkarılacak ders şudur: Temel içerik üretimi bozuksa koşullu istekler hatayı kalıcılaştırabilir; bu nedenle bunları güvenilmez bir kaynağın üzerine eklemeyin.

Bing bunu nasıl ele alıyor?

Bu yalnızca Google’a özgü bir özellik değildir; Bing’in desteği muhtemelen daha eski ve daha açıktır. Bing, henüz Live Search adını taşırken 2008’de RFC-2616 uyumlu koşullu GET desteğini duyurdu: Son indirme zamanıyla If-Modified-Since, mevcut olduğunda ise ETag ile If-None-Match gönderir ve sayfa son taramadan bu yana değişmedikçe “generally will not download the page unless it has changed since the last time it crawled it.” Bugün Bing bunu adlandırılmış ve izlenebilir bir ölçüte — tarama verimliliğine — dönüştürüyor. Fabrice Canel bunu “how often we crawl and discover new and fresh content per page crawled.” şeklinde tanımlar. Değişmeyen içeriğin gereksiz yere yeniden taranması bu puanı doğrudan düşürür. Dolayısıyla aynı doğrulayıcılar her iki motora da hizmet eder; Bing yalnızca kavrama bir puan tablosu verir. 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

Bu, sıralamaları etkiler mi?

Hayır. Tarama hızı ve tarama bütçesi makalelerindeki aynı disiplini koruyun: koşullu istekler bir sıralama faktörü değil, tarama verimliliği ve kaynak aracıdır. Hiçbir resmî kaynak ETag/If-Modified-Since/304 kullanımını sıralamalara bağlamaz. Dolaylı faydası, büyük veya sık güncellenen sitelerde yeni ve değişen içeriğin daha erken taranıp indekslenebilmesidir — ancak daha verimli taranmak kendi başına sıralama sinyali değildir.

Çalıştığı nasıl doğrulanır?

Kesin bilgi kaynağı sunucu günlüklerinizdir. İki şeye bakın: Googlebot’un If-None-Match/If-Modified-Since istek başlıkları göndermesi ve sunucunuzun ona 304 yanıtları döndürmesi. Gerçek dünya verileri azdır; Dave Smart’ın Tame the Bots sunucu günlüğü çalışmasını değerli kılan da budur. Doğrulanmış Googlebot trafiğini izlerken isteklerin yalnızca yaklaşık %1,3’ünün 304 aldığını — çoğunun 200 olduğunu — ve If-None-Match isteklerinin, bir URL önceki getirme işleminden kısa süre sonra yeniden istendiğinde kümelenme eğilimi gösterdiğini buldu. Vardığı sonuç yönergelerle uyumludur: küçük sitelerde seyrek, yoğun tarananlarda ise potansiyel olarak “significant savings”. Küçük bir sitede yüksek 304 oranı beklemeyin; büyük ölçekte önemli olmasını bekleyin.

Koşullu istekler, hız, sıklık ve bütçe karşılaştırması

Tarama bütçesi ailesindeki kavramları ayırmak için:

  • Tarama hızı — Googlebot’un ne kadar hızlı getirme yaptığıdır (arz tarafı, sunucu sağlığına göre sınırlandırılır).
  • Tarama sıklığı — bilinen bir URL’nin ne sıklıkta yeniden getirildiğidir (popülerlik + eskime).
  • Tarama bütçesi — talep + kapasite zarfıdır: Google’ın tarayabildiği ve taramak istediği URL kümesi.
  • Koşullu istekler — her bir yeniden taramaya ne kadar düşük maliyetle yanıt verilebildiğidir. Google’ın ne kadar hızlı veya sık tarama yaptığını değiştirmez; değişmemiş sayfalara yapılan ziyaretleri neredeyse bedelsiz hâle getirerek bütçenin aynı içeriğe harcanmasını önler.

Add an expert note

Pin an expert quote

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