304 Değiştirilmedi

HTTP 304 Not Modified'in ne anlama geldiği, 3xx kodu olmasına rağmen neden yönlendirme olmadığı, ETag ve Last-Modified'ın onu nasıl çalıştırdığı ve sıralamayı etkilemeden büyük sitelerde tarama verimliliğine dolaylı olarak nasıl yardımcı olabildiği.

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

HTTP 304 Not Modified, koşulu yanlış sonuçlanan koşullu bir GET veya HEAD isteğinin yanıtıdır — aksi halde 200 alınacak bir istek. Yönlendirme değildir: Location başlığı yoktur ve spesifikasyona göre gövdesi de yoktur. If-None-Match (ETag ile karşılaştırılır) veya If-Modified-Since (Last-Modified ile karşılaştırılır) taşıyan GET/HEAD isteği, isteği baştan koşullu yapan şeydir; ikinci ziyaret tipik örnektir, protokol kuralı değil. Doğrulayıcı hâlâ eşleştiğinde sunucu gövdesiz 304 döndürür ve istemci önbelleğe alınmış kopyasını kullanır. SEO açısından doğrudan sıralama etkisi yoktur — Google içeriğe zaten sahiptir ve 304 yalnızca hiçbir şeyin değişmediğini doğrular; ancak Search bir URL'nin sinyallerini yeniden hesaplayabilir. Gerçek kazanç kaynak tasarrufudur: nadiren değişen çok sayıda URL'si olan büyük sitelerde 304'ler tarayıcıların değişmemiş sayfaları yeniden indirmesini önleyerek bant genişliği ve sunucu işlem gücü tasarrufu sağlar; Google bunun tarama verimliliğini dolaylı olarak iyileştirebileceğini söyler, ancak tarama bütçesinin diğer URL'lere otomatik aktarılacağını vaat etmez. Google, tarih biçimlendirme tuzakları olmadığı için birincil doğrulayıcı olarak ETag'i önerir; ikisini de ayarlamayı destekler ve yalnızca içerik gerçekten değiştiğinde önbelleği geçersiz kılacak kadar önemli bir değişiklik sayar — alt bilgideki telif hakkı yılı değil. 304'ü 301/302/307/308 ile (başka bir URL'ye taşırlar) veya 204 No Content ile (o da gövdesizdir, ancak gerçekten gönderilecek hiçbir şey olmadığı için) karıştırmayın., 3xx

Kısa özet — 304, koşulu false olarak değerlendirilen ve aksi halde 200 alacak koşullu GET/HEAD isteğinin yanıtıdır (RFC 9110 §15.4.5). 3xx sınıfındadır ama yönlendirme değildir: Location yoktur, yeni URL yoktur ve normatif olarak gövde yoktur (“it cannot contain content or trailers” (çeviri) “içerik veya trailer barındıramaz”). Koşul, ETag ile karşılaştırılan If-None-Match ve/veya Last-Modified ile karşılaştırılan If-Modified-Since başlıklarıyla taşınır. Doğrulayıcı hâlâ eşleşiyorsa sunucu 304 döndürür, istemci önbelleğini yeniden kullanır. SEO etkisi: doğrudan sıralama etkisi yoktur; Google içerik elindeyken Search URL sinyallerini yine de yeniden hesaplayabilir. Büyük sitelerde kaynak tasarrufu sağlar (Google bunun tarama verimliliğini dolaylı artırabileceğini söyler; tarama bütçesinin başka URL’lere otomatik aktarılacağını vaat etmez). Google’ın tarama altyapısı iki doğrulayıcıyı da destekler ve tarih biçimi tuzağı olmadığı için öncelikle ETag önerir. URL’yi taşıyan 301/302/307/308 ve gerçekten gönderilecek hiçbir şey olmadığı için gövdesiz olan 204 ile karıştırmayın.

Spesifikasyonda 304’ün anlamı

RFC 9110 (HTTP Semantics) §15.4.5 kesin tanımı verir: “The 304 (Not Modified) status code indicates that a conditional GET or HEAD request has been received and would have resulted in a 200 (OK) response if it were not for the fact that the condition evaluated to false.” (çeviri) “304 (Not Modified) durum kodu, koşullu GET veya HEAD isteğinin alındığını ve koşul false olarak değerlendirilmeseydi 200 (OK) yanıtıyla sonuçlanacağını belirtir.” Normatif tetikleyici budur: koşulu false olan ve aksi halde 200 alacak koşullu GET/HEAD. Basitçe istemci “bu sayfayı yalnızca değiştiyse ver” diye sorar; sunucu değişmediğini belirler ve gövdeyi göndermeyi atlar. “İkinci ziyaret”, istemcinin önceki yanıttan sakladığı doğrulayıcıyı eklemesiyle isteğin nasıl koşullu hale geldiğini anlatan günlük örnektir; kuralın kendisi değildir. Spesifikasyon önceki ziyareti değil, yalnızca koşullu isteği gerektirir. Evidence for this claim RFC 9110 defines 304 Not Modified as the response to a conditional GET or HEAD when the selected representation has not changed and says the response cannot contain content. Scope: HTTP semantics for 304 conditional responses. Confidence: high · Verified: IETF: RFC 9110 §15.4.5 — 304 Not Modified

Spesifikasyon bu bölümde “the server is therefore redirecting the client to make use of that stored representation as if it were the content of a 200 (OK) response” (çeviri) “sunucu bu nedenle istemciyi, saklanan temsili 200 (OK) yanıtının içeriğiymiş gibi kullanmaya yöneltir” ifadesini bile kullanır. Ancak dikkatle okuyun: istemciyi başka URL’ye değil, kendi önbelleğine geri yöneltir. Location başlığı ve yeni adres yoktur. 304’ün “yönlendirme olup olmadığı” karışıklığının çoğu bu cümleden doğar. HTTP anlamında yönlendirme değildir.

İki normatif nokta daha önemlidir:

  • Asla gövde yoktur. RFC 9110: “A 304 response is terminated by the end of the header section; it cannot contain content or trailers.” (çeviri) “304 yanıtı başlık bölümünün sonunda biter; içerik veya trailer barındıramaz.” Gövde taşıyan 304 spesifikasyon ihlalidir ve bazı istemciler bunu yanlış işler. Bu katı kuraldır, biçem tercihi değil.
  • 200’ün taşıyacağı meta veriyi taşır. Sunucu, aynı isteğe verilecek 200 (OK) yanıtında bulunacak şu başlıkları üretmek ZORUNDADIR: Content-Location, Date, ETag ve Vary; gerektiğinde Cache-Control ile Expires da eklenir. Yani 304, yükü çıkarılmış 200 başlıklarıdır.
Evidence for this claim A 304 response terminates after the header section and cannot contain content or trailers. Scope: conditional GET and HEAD Confidence: high · Verified: RFC 9110 §15.4.5: 304 Not Modified

304 gerçekte nasıl çalışır: koşullu istekler

Sunucu 304’ü kendiliğinden göndermez. Her zaman koşullu bir isteğe — istemcinin önceki yanıttan kaydettiği bir doğrulayıcıyı ekleyerek koşullu hale getirdiği isteğe — yanıt verir. İki doğrulayıcı vardır.

ETag ve If-None-Match

ETag (entity tag), sunucunun bir 200 yanıtına eklediği opak bir belirteçtir; bunu URL’nin tam o temsilinin sürüm parmak izi gibi düşünün. İstemci bu URL için sonraki istekte kaydettiği değeri If-None-Match başlığında geri gönderir. Sunucu karşılaştırır: mevcut ETag hâlâ eşleşiyorsa hiçbir şey değişmemiştir ve 304 döndürür; farklıysa yeni içerik ve yeni bir 200 ile yeni bir ETag gönderir.

Last-Modified ve If-Modified-Since

Tarih tabanlı alternatifte sunucu Last-Modified yanıtında 200 zaman damgasını gönderir. İstemci sonraki istekte bu değeri If-Modified-Since başlığıyla geri yollar; kaynak o zamandan beri değişmediyse sunucu 304 döndürür. Bu yöntem daha basit ama daha kabadır, çünkü hassasiyeti zaman damgasıyla sınırlıdır ve doğru HTTP-date biçimine duyarlıdır. İki doğrulayıcı da mevcutsa If-None-Match önceliklidir; bu durumda If-Modified-Since kararın belirleyicisi değildir.

Güçlü ve zayıf ETag’ler

Bu kontrol noktası, durum kodu yanıtı için yanıtın ne anlattığını ve ne anlatmadığını açıklar. ETag W/ ETag: W/"abc123" “strong validation consists of guaranteeing that the resource is, byte to byte, identical to the one it is compared to.” (Türkçe çeviri) Kaynak cümlesi, bu durum kodunun hangi koşulda kullanıldığını netleştiriyor. “a page that would differ from another only by a different date in its footer, or different advertising, would be considered identical to the other with weak validation.” (Türkçe çeviri) Alıntı, yanıtın kapsamını ve beklenen istemci davranışını birlikte gösteriyor.

Tam el sıkışmanın aşamaları

  1. İlk istek → sunucu içerikle birlikte 200 OK ve ETag ve/veya Last-Modified döndürür.
  2. İstemci depolar: içeriği ve bu doğrulayıcıları.
  3. Sonraki istek → istemci, saklanan değerlerle birlikte If-None-Match ve/veya If-Modified-Since gönderir.
  4. Sunucu karar verir: değişmemiş → 304 Not Modified, gövde yok, istemci önbelleğini kullanır; değişmiş → yeni gövde ve yeni doğrulayıcılarla 200 OK.
Evidence for this claim RFC 9111 defines validation as checking whether a stored response remains current, typically with a conditional request that can receive 304 Not Modified. Scope: HTTP cache validation; it does not create a Search ranking benefit. Confidence: high · Verified: IETF: RFC 9111 §4.3 — Validation

Önbelleğe alma ve doğrulayıcıların tarama verimliliği kaldıracı olarak daha derin ele alınmasını — koşullu isteklerin tamamını ve tarama bütçesiyle bağlantısını — istiyorsanız bu eşlik eden bir konudur; bu makale durum kodu odaklı bakıştır.

304 ve SEO: sıralama etkisi yok, gerçek tarama verimliliği etkisi var

SEO hikâyesinin tamamı düşündüğünüzden dardır. 304’ün doğrudan sıralama etkisi yoktur. Google’ın durum kodlarının tarama ve dizine eklemeyi nasıl etkilediğine dair rehberi, dizine ekleme etkisini de sınırlar: Search URL sinyallerini yeniden hesaplayabilir, ancak bunun dışında 304 sayfanın dizine eklenme biçimini değiştirmez. Google önceki taramadan içeriğe zaten sahiptir; 304 hiçbir şeyin değişmediğini doğrular ve Google elindekini kullanmayı sürdürür. 304 döndürmenin sıralama bonusu yoktur.

304’ün sağladığı şey, tarama verimliliğini dolaylı artırabilecek kaynak tasarrufudur. Gary Illyes, Google’ın Aralık 2024 tarihli HTTP önbellekleme yazısında bunu şöyle anlattı: “Especially if you have a large site with rarely-changing content under individual URLs, allowing caching locally may help your site be crawled more efficiently. 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.” (çeviri) “Özellikle ayrı URL’ler altında nadiren değişen içeriğe sahip büyük bir siteniz varsa yerel önbelleğe izin vermek sitenizin daha verimli taranmasına yardımcı olabilir. Google’ın tarama altyapısı HTTP önbellekleme standardındaki sezgisel önbelleği; özellikle ETag yanıt/If-None-Match istek başlığı ve Last-Modified yanıt/If-Modified-Since istek başlığı üzerinden destekler.”

Bu uygulama notu, 304 yanıtı için uygulama sırasında izlenecek sinyalleri bir araya getirir. “matches the current value the server generated, your server should return an HTTP 304 (Not modified) status code with no HTTP body,” (Türkçe çeviri) Bu alıntı, kodun geçici veya koşullu kullanım bağlamını açıklar. “your server doesn’t have to spend compute resources on actually generating content” (Türkçe çeviri) Bu kaynak cümlesi, kontrol listesindeki teknik gerekçeyi destekliyor. “doesn’t have to transfer the HTTP body” (Türkçe çeviri) Bu ifade, istek yöntemi ve gövdesinin nasıl korunacağını vurgular.

Büyük sitelerde neden daha önemlidir

Birkaç yüz sayfanız varsa bu büyük ölçüde teoriktir; Google sitenizin tamamını zaten rahatça tarar. Kazanç boyutla birlikte artar: yüz binlerce veya milyonlarca URL’si olan ve bunların çoğu nadiren değişen bir site, tarayıcılar değişmemiş olanların tümünü yeniden getirmeyi atlayabildiğinde maddi fayda görür. Google’ın yazısının hedeflediği kitle budur; dürüst çerçeveyi koruyun ve 304’ü küçük site taktiği olarak abartmayın.

ETag mi Last-Modified mi, “değişti” sayılan nedir

Google birincil doğrulayıcı olarak ETag önerir: “We strongly recommend using ETag because it’s less prone to errors and mistakes (the value is not structured unlike the Last-Modified value).” (çeviri) “Last-Modified değerinin aksine yapılandırılmış olmadığından hatalara daha az açık olduğu için ETag kullanmanızı önemle öneririz.” İkisini birlikte ayarlamak uygundur ve teşvik edilir. Last-Modified kullanırsanız tarih “must be formatted according to the HTTP standard” (çeviri) “HTTP standardına göre biçimlendirilmelidir”. Google “Weekday, DD Mon YYYY HH:MM:SS Timezone,” biçimini (ör. “Fri, 4 Sep 1998 19:15:56 GMT”) önerir; aksi halde başlık sessizce yok sayılabilir. Google, tarayıcıların ne zaman yeniden tarayacağına karar vermesine yardımcı olmak için Cache-Control başlığının max-age alanını ayarlamayı da önerir.

Evidence for this claim Google's crawler guidance recommends ETag because its opaque value avoids date-formatting errors, while also allowing both ETag and Last-Modified; this is Google-specific operational advice, not a change to HTTP validator semantics. Scope: HTTP cache validation Confidence: high · Verified: Crawling December: HTTP caching

Bu açıklama, durum kodu yanıtı için okurun ilgili durumu güvenle doğrulamasına yardımcı olur. “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.” (Türkçe çeviri) Cümle, ilgili HTTP davranışının sınırlarını pratik bir dille özetliyor.

Googlebot ve Bingbot bunu gerçekte nasıl kullanır

Her tarayıcı isteği koşullu değildir. Google’ın tarayıcı dokümantasyonu, farklı Google tarayıcılarının ve getiricilerinin sundukları ürüne göre önbellek desteğinin değiştiğini belirtir — Googlebot Search için URL’leri yeniden tararken önbelleğe almayı desteklerken bazı diğer Google getiricileri bunu yalnızca belirli koşullarda destekler. Bu yüzden başlıklar doğru yapılandırılmış olsa bile isteklerin %100’ünde If-None-Match/If-Modified-Since bulunmasını beklemeyin. Bing açısından koşullu istekler yalnızca Google’a özgü değildir. Bing’in tarayıcısı, en azından 2008 tarihli Live Search blog yazısından beri koşullu GET’i ( If-Modified-Since ve mevcutsa If-None-Match göndererek, içerik değişmediğinde 304’ü kabul ederek) desteklemektedir; ancak Bing, Google’ın 2024 yazısına eşdeğer güncel bir yazı yayımlamamıştır. Mekanizmayı her iki motora da uygulanan genel HTTP davranışı olarak değerlendirin.

304 desteği nasıl uygulanır

  1. 200 yanıtında doğrulayıcı gönderin. Sunucunuzu, CDN’inizi veya uygulamanızı normal 200 yanıtlarına ETag (önerilir) ve/veya doğru biçimlendirilmiş Last-Modified başlığı ekleyecek biçimde yapılandırın. Birçok sunucu ve framework statik dosyalarda ETag’i otomatik üretir; dinamik yanıtlarda çoğunlukla bunu açmanız gerekir.
  2. Geri gelen koşullu başlıkları uygulayın. İstek If-None-Match/If-Modified-Since ile geldiğinde güncel doğrulayıcıyla karşılaştırın; eşleşiyorsa gövdesiz 304, eşleşmiyorsa yeni 200 döndürün. Statik dosya sunucuları bunu çoğunlukla yapar; uygulama rotaları ve edge worker’ları siz bağlamadıkça yapmayabilir.
  3. “Değişti” tanımını belirleyin ve gerçekten değişmeyen içerikte ETag’i sabit tutun; yeniden sıkıştırma veya sunucular arası farkın gereksiz değişiklik yaratmasına izin vermeyin.
  4. Klasik yanlış yapılandırmaları izleyin:
    • Her zaman 200 — doğrulayıcı hiç gönderilmez; istek koşullu olmaz ve verimlilik kazanılmaz.
    • Kararsız ETag’ler — içerik değişmediği halde değer değişir (yük dengeleyici, yeniden sıkıştırma) ve sürekli yeniden getirmeyi zorlar.
    • Bayat 304’ler — tehlikeli olan budur: içerik gerçekten değiştikten sonra da 304 (veya değişmemiş ETag) döndüren sunucu, tarayıcıların ve önbelleklerin güncellemeyi almasını engeller. Bu 304’ün özünde değil, günlük analizinde yakalanması gereken hatadır.

304 ve diğer durum kodları

304 ile 301 / 302 / 307 / 308

Bunlar gerçek yönlendirmelerdir. (Kalıcı) 301/308 veya (geçici) 302/307 bir Location başlığı taşır ve istemciyi farklı bir URL’ye götürür; ayrıca 301/308 canonicalization sinyali de aktarır. 304’ün Location’ı yoktur, kimseyi taşımaz ve hiçbir sıralama sinyali aktarmaz. Numarası aynı 3xx ailesinde olsa da işi tamamen farklıdır. Her kodun yönlendirme ayrıntıları kendi makalelerinde bulunur (301 yönlendirmesi yazısı ve yönlendirmeler alt merkezi).

304 ile 204 No Content

İkisi de gövdesizdir, ancak nedenleri tamamen farklıdır. 204 No Content, sunucunun gerçekten gönderecek hiçbir şeyi olmadığı için bilinçli olarak boş gövde taşıyan 2xx başarı yanıtıdır; başarılı API DELETE/PUT isteği veya analiz işareti buna örnektir. 304 de gövde göndermez, ancak gönderilecek şey olmadığı için değil; “zaten elinizde ve hâlâ geçerli” olduğu için. Karıştırmayın: sayfa URL’sindeki 204 dizine eklenebilir içerik olmadığı için soft 404 gibi ele alınabilir; 304 ise Google’ın zaten sahip olduğu içerik için geçerlilik onayıdır. 204 No Content makalesi bu kodu ayrıntılı ele alır.

304 hakkında yaygın efsaneler

  1. “304 yönlendirmedir.” Location başlığı yoktur, kimse başka yere gitmez. İstemci kendi önbelleğini kullanır. RFC 9110’daki “redirecting the client to make use of that stored representation” (çeviri) “istemciyi saklanan temsili kullanmaya yöneltme” ifadesi başka URL’yi değil önbelleği işaret eder.
  2. “304 düzeltmem gereken hatadır.” Çalışan koşullu istek düzeninin doğru, amaçlanan sonucudur. Tarama veya DevTools’ta 304 görmek önbelleğin çalıştığını gösterir; SERP’teki en yaygın yanlış anlamadır.
  3. “304 sıralamaya yardımcı olur.” Doğrudan sıralama etkisi yoktur. Google dizine ekleme etkisini de sınırlar: Search URL sinyallerini yeniden hesaplayabilir, ancak 304 bunun dışında dizine eklemeyi değiştirmez. Google bunun büyük sitelerde tarama verimliliğini dolaylı artırabileceğini söyler; bu sıralama sinyali değildir ve tasarrufun başka URL’lere aktarılacağını garanti etmez.
  4. “If my server returns 304, Google will use stale content forever.” (çeviri) “Sunucum 304 döndürürse Google bayat içeriği sonsuza dek kullanır.” 304 yalnızca doğrulayıcı eşleşirken döner. İçerik değiştiği anda doğru yapılandırılmış sunucu yeni doğrulayıcılarla 200 döndürür. Gerçek risk, içerik değiştikten sonra da 304 veren yanlış yapılandırılmış sunucudur; bu 304’ün özelliği değil, hatadır. Evidence for this claim RFC 9111 defines validation as checking whether a stored response remains current, typically with a conditional request that can receive 304 Not Modified. Scope: HTTP cache validation; it does not create a Search ranking benefit. Confidence: high · Verified: IETF: RFC 9111 §4.3 — Validation
  5. “ETag ile Last-Modified birbirinin aynıdır.” İkisi de doğrulayıcıdır; ancak Last-Modified tarih biçimine duyarlıdır ve zaman damgası kadar ayrıntılıdır. ETag saydam olmayan kesin bir değerdir; dikkatsiz uygulanırsa sunucular veya yeniden sıkıştırma arasında farklılaşabilir. Google ETag’i birincil, mümkünse ikisini birlikte önerir.

SSS

HTTP 304 bir hata mıdır? Hayır — önbelleğe almanın çalıştığını gösteren bir başarı sinyalidir. İstemcinin önbelleğe alınmış kopyasının hâlâ geçerli olduğu anlamına gelir.

304 Not Modified bir yönlendirme midir? Hayır. Numaralandırma bakımından 3xx sınıfındadır; ancak Location başlığı yoktur ve istemciyi yeni bir URL’ye taşımaz.

304 SEO’ya veya sıralamaya yardımcı olur mu? Doğrudan sıralama etkisi yoktur ve Google’ın bir URL’nin sinyallerini yeniden hesaplaması dışında dizine ekleme etkisi yoktur. Tarayıcıların değişmemiş sayfaları atlamasını sağlayarak bant genişliği ve işlem gücü tasarrufu yapar; Google bunun büyük sitelerde tarama verimliliğini dolaylı olarak iyileştirebileceğini söyler.

ETag ile Last-Modified arasındaki fark nedir? ETag, If-None-Match üzerinden eşleştirilen opak bir sürüm parmak izidir; Last-Modified, If-Modified-Since üzerinden eşleştirilen bir zaman damgasıdır. Google, hataya daha az yatkın olduğu için ETag’i önerir.

Zayıf ve güçlü ETag arasındaki fark nedir? Güçlü ETag baytları aynı olan içeriği ifade eder; W/ önekli zayıf ETag, sıkıştırma veya alt bilgi tarihindeki değişiklik gibi önemsiz farklara tolerans göstererek anlamsal eşdeğerliği ifade eder.

Bu kontrol noktası, durum kodu yanıtı için protokol ayrımını gerçek bir kullanım kararıyla ilişkilendirir.

Sunucumu 304’ü doğru döndürecek şekilde nasıl yapılandırırım? ETag yanıtında Last-Modified/200 gönderin; sonraki istekte If-None-Match/If-Modified-Since başlıklarını dikkate alın ve doğrulayıcı hâlâ eşleşiyorsa gövdesiz 304 döndürün.

304 ile 204 arasındaki fark nedir? İkisi de gövdesizdir; 204 gönderilecek hiçbir şey olmadığı için, 304 ise zaten hâlâ geçerli bir kopyaya sahip olduğunuz için gövdesizdir.

Googlebot her istekte koşullu başlıklar gönderir mi? Hayır — önbellek desteği tarayıcıya göre değişir; bu nedenle başlıklar yapılandırılmış olsa bile her istek koşullu olmaz.

304 yanıtının gövdesi olabilir mi? Hayır. RFC 9110’a göre “it cannot contain content or trailers.” (çeviri) “İçerik veya trailer barındıramaz.” Gövdeli 304 spesifikasyon ihlalidir.

Evidence for this claim A 304 response terminates after the header section and cannot contain content or trailers. Scope: conditional GET and HEAD Confidence: high · Verified: RFC 9110 §15.4.5: 304 Not Modified

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

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