SEO için Önbellekleme

Cache-Control, ETag'ler ve CDN'lerle tarayıcı ve sunucu önbelleklemesinin performansı ve Core Web Vitals'ı nasıl iyileştirdiği ile taramayı etkileyen önbellekleme tuzakları.

İlk yayın tarihi: 2 Tem 2026 · Son güncelleme: 9 Ağu 2026 · Advanced
Diller

Önbellekleme, bir sayfanın veya kaynağın kopyasını — tarayıcıda, bir CDN uç noktasında veya tarama botunun kendi önbelleğinde — saklar; böylece yeniden oluşturulması veya indirilmesi gerekmez. Doğrudan bir sıralama faktörü değildir ancak önemli iki unsuru etkiler: sayfa hızı / Core Web Vitals (TTFB ve LCP aracılığıyla) ve tarama verimliliği. Google'ın tarama botu yalnızca ETag ve Last-Modified'ı dikkate alır (max-age değerini de yeniden tarama ipucu olarak kullanır); ETag'i tercih eder ve kendi belgelerindeki ifadeyle “other HTTP caching directives aren't supported.” En riskli önbellekleme hataları, önbellek sürelerinin kısa olması değil; botları engelleyen veya yanıltan CDN yanlış yapılandırmaları ve güncelliğini yitirmiş önbelleklerdir.

TL;DR — Önbellekleme, SEO açısından önemli üç katmanda çalışır: tarayıcı, CDN ucu ve tarama botunun kendi koşullu istek önbelleği. Doğrudan bir sıralama faktörü değildir; ancak sayfa hızını (TTFB/LCP ve — bfcache aracılığıyla — tekrarlanan gezinmelerdeki Core Web Vitals değerlerini) ve tarama verimliliğini etkiler. Google’ın tarama botu Last-Modified yerine ETag’i tercih eder, max-age değerini yalnızca yeniden tarama ipucu olarak okur ve — kendi belgelerindeki ifadeyle — “other HTTP caching directives aren’t supported.” CDN’lere daha yüksek bir tarama hızı kotası tanınır, ancak bu yalnızca önbellekleri ısındıktan sonra geçerlidir; asıl riskler soğuk önbellekle yapılan lansmanlar ve botları tamamen engelleyen CDN/WAF yanlış yapılandırmalarıdır.

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

Önbelleklemenin üç katmanı

SEO açısından önbellekleme tek bir mekanizmadan ibaret değildir — biraz farklı biçimlerde denetlenen üç mekanizma vardır:

  1. Tarayıcı önbelleği — ziyaretçinin cihazı dosyaları saklar; böylece tekrarlanan görüntülemelerde ağdan indirme yapılmaz. PageSpeed Insights’ın “Serve static assets with an efficient cache policy.” uyarısıyla işaret ettiği konu budur.
  2. CDN / uç önbelleği — bir içerik dağıtım ağı, kopyaları dünya genelindeki uç düğümlerde saklar (konunun tamamı için CDN ve SEO derinlemesine incelemesine bakın). Google’ın açıklamasına göre CDN’ler, kaynak sunucunuz ile kullanıcı arasında aracılık eder ve geçmişten beri en çok önbelleklemeye odaklanırlar — bir URL’nin içeriğini saklayarak sunucunuzun o dosyayı bir süre boyunca yeniden sunmak zorunda kalmamasını sağlarlar.
  3. Tarama botu tarafındaki önbellek — Googlebot ve Bingbot, koşullu istekler kullanarak içeriğin değişip değişmediğine ilişkin kendi kayıtlarını tutar. Tarama bütçesini etkileyen mekanizma budur; ayrıntıları koşullu istekler derinlemesine incelemesine aittir, burada yalnızca özetleyeceğim.

Yukarıdaki “tarayıcı önbelleği” ifadesi birden fazla mekanizmayı kapsayan bir kısaltmadır. MDN’nin HTTP önbellekleme kılavuzuna göre şu mekanizmaları birbirinden ayırmak önemlidir: özel HTTP önbelleği (her tarayıcıya özgüdür, isteğe göre anahtarlanır ve modern tarayıcılarda siteler arası izlemeyi sınırlamak için üst düzey siteye göre bölümlenir), geçerli oturumda kullanılan bellek içi önbellek, aşağıda ele alınan bfcache ve — bunlardan ayrı olarak — sitenin kendi JavaScript kodunun denetlediği ve Cache-Control başlıklarının doğrudan yönetmediği service worker Cache Storage alanı. “Tarayıcı önbelleğini kontrol edin” ifadesi, gerçekte hangi mekanizmanın sorun çıkardığına bağlı olarak dört farklı hata ayıklama adımı anlamına gelebilir.

Önbellekleme Core Web Vitals’ı neden etkiler?

Kaynakları ağ üzerinden getirmek yavaş ve maliyetlidir. Önbellekleme, değişmemiş kaynaklar için ağ gecikmesini ve veri aktarımı maliyetini ortadan kaldırır. Bu durum, Core Web Vitals ile yakından ilişkili iki ölçümü doğrudan etkiler: TTFB (önbelleğe alınmış yanıt, kaynak sunucuda yeniden oluşturma işlemini atlar) ve LCP (önbelleğe alınmış görseller/CSS/yazı tipleri daha erken işlenir).

Önemli Cache-Control yönergeleri

Cache-Control temel başlıktır. Bilmeniz gereken yönergeler şunlardır:

  • max-age=<seconds> — yeni bir kopyanın ne kadar süre taze kalacağını belirtir. Chrome’un Lighthouse belgeleri, değişmez ve sürümlendirilmiş varlıkların bir yıl veya daha uzun süreyle önbelleğe alınmasını önerir — ör. Cache-Control: max-age=31536000.
  • no-cache“önbelleğe alma” anlamına gelmez. “Sakla, ancak yeniden kullanmadan önce sunucuyla yeniden doğrula” anlamına gelir. Hafif 304 akışının kullanılmasına yine de olanak tanır.
  • no-store — hiçbir kopyanın hiçbir yerde bir HTTP önbelleğinde saklanmamasını gerçekten isteyen yönergedir. Genel amaçlı bir gizlilik anahtarı değil, bir önbellekleme yönergesidir — RFC 9111’e göre tarayıcı geçmişini silmenin güvenilir bir yolu değildir ve bir service worker’ın kendi Cache Storage alanı hakkında hiçbir şey söylemez.
  • public / private — yanıtın paylaşılan önbellekler (CDN gibi) tarafından mı, yoksa yalnızca son kullanıcının tarayıcısı tarafından mı saklanabileceğini belirtir.
  • immutableyanıt hâlâ tazeyken yeniden doğrulamayı tamamen atlar. “Asla eskimez” anlamına gelmez — max-age sona erdiğinde normal tazelik kuralları yeniden uygulanır.
  • must-revalidate — zaman çizelgesinin diğer ucunda yer alır: yalnızca yanıt eskidikten sonra önem kazanır ve önbelleğe, eski kopyayı sunmak yerine kaynak sunucuyla yeniden doğrulama yapması gerektiğini bildirir.
  • s-maxage, stale-while-revalidate, stale-if-error — çoğunlukla CDN’ler ve diğer paylaşılan önbellekler için daha ayrıntılı denetimlerdir (sırasıyla paylaşılan önbelleklere özel ayrı bir tazelik süresi, arka planda getirme işlemi sürerken eski kopyanın sınırlı biçimde yeniden kullanılması ve kaynak sunucu hatasında eski kopyanın sınırlı biçimde yeniden kullanılması). Destek tarayıcıya/CDN’ye göre değiştiğinden, bunlara güvenmeden önce güncel desteği kontrol edin — ayrıca ileride göreceğimiz üzere Google’ın tarama botu bu ek yönergelerin hiçbirini dikkate almaz.

Sürümlendirilmiş dosya adlarıyla önbelleği geçersiz kılma

Yoğun biçimde önbellekleme yaparken aynı zamanda anında güncelleme yapmanızı sağlayan yöntem şudur: dosya adına bir içerik karması ekleyin — style.x234dff.css. Önbellek anahtarı URL olduğu için dosya değiştirildiğinde URL de değişir; böylece önbellekler yeni sürümü hemen getirirken eski sürümler istediğiniz süre boyunca önbellekte kalabilir. Hem Google’ın web.dev HTTP cache guide belgesi hem de Bing’in kendi ön uç mühendisliği yazısı aynı kalıbı açıklar — Bing, dosya içeriklerini URL’ye karma olarak ekler; böylece “the URL acts as the cache key,” önbellekler tutarlı kalır ve uzun sona erme süreleri kullanılabilir.

bfcache tuzağı — no-store CWV’yi sessizce nasıl zedeler

İşte pek ele alınmayan bir konu. Geri/ileri önbelleği (bfcache), “geri” düğmesine basıldığında sayfanın anında geri yüklenmesini sağlar. bfcache’den yapılan bir geri yükleme LCP/CLS/INP ölçümünü tamamen atladığından, CrUX saha verileriniz açısından tamamen avantajlıdır. Ancak Google’ın bfcache kılavuzuna göre, sayfa belgesinin kendisinde Cache-Control: no-store kullanılması geçmişte tarayıcıların o sayfayı bfcache’de saklamayı reddetmesine neden olmuştur. Bir HTML belgesinin güncel kalması gerekiyorsa ancak geri/ileri önbelleğine uygunluğunu kaybetmesini istemiyorsanız, no-store yerine no-cache veya max-age=0 kullanın.

Bir önbellek “yeterince taze” olup olmadığına nasıl karar verir

Herhangi bir doğrulayıcı devreye girmeden önce önbellek tazeliği kontrol eder: saklanan yanıtın yaşı, Cache-Control tarafından belirlenen tazelik süresini geçti mi (veya açık bir süre belirtilmemişse, önbelleğin tahmin etmesine izin verilen sezgisel süreyi geçti mi)? Age yanıt başlığı, paylaşılan bir önbelleğin yanıtı ne kadar süredir tuttuğunu bildirir; böylece DevTools’ta veya bir CDN günlüğünde tazelik süresinin ne kadarının kaldığını görebilirsiniz. Taze bir yanıt, önbelleğin hiçbir istek göndermeden onu hemen yeniden kullanabileceği anlamına gelir. Eski bir yanıt ise yeniden kullanılmadan önce doğrulanmalıdır; ETag/If-None-Match ve Last-Modified/If-Modified-Since tam bu noktada işe yarar. Bu genel HTTP mekanizmasının Googlebot tarafından kullanılan daha dar kapsamlı biçimi bir sonraki bölümde açıklanmaktadır.

Googlebot önbelleklemeyi nasıl kullanır? (tarama verimliliği açısından)

Google, Aralık 2024 tarihli Crawling December: HTTP caching yazısında alışılmadık ölçüde doğrudan bir çağrı yaptı: tarama botlarının değişmemiş sayfaları yeniden indirmeden geçebilmesi için önbelleklemeyi etkinleştirin. Yazıdaki çarpıcı veri, önbellekten karşılanabilen getirme işlemlerinin azalıyor olmasıdır — 10 yıl önce toplam getirme işlemlerinin yaklaşık 0,026% kadarı önbellekten karşılanabilirken bugün bu oran 0,017%. Oranlar küçük, ancak Google bunların açıkça ters yönde ilerlemesini istiyor.

ETag ve Last-Modified — Google hangisini tercih ediyor?

Google’ın tarama altyapısı iki standart doğrulayıcıyı destekler: ETag (If-None-Match ile) ve Last-Modified (If-Modified-Since ile). Google, ETag değerinin yapılandırılmamış olması ve bu nedenle tarih dizelerinin yol açabileceği ayrıştırma hatalarına daha az açık olması nedeniyle ETag kullanılmasını önemle önerir. İkisi de mevcutsa tarama botları, HTTP standardının gerektirdiği üzere ETag değerini kullanır. Google, CMS’ler gibi diğer uygulamalar bunları kullandığı için yine de her ikisinin ayarlanmasını önerir. Last-Modified kullanıyorsanız tarih HTTP biçimine uymalıdır (örneğin Fri, 4 Sep 1998 19:15:56 GMT); aksi takdirde ayrıştırılamaz.

Tarama botunun sakladığı doğrulayıcı hâlâ eşleşiyorsa sunucunuz gövdesiz bir 304 Not Modified yanıtı döndürür — zaten bütün amaç budur. Google’ın belirttiği gibi, gövdenin olmaması sunucunuzun içerik oluşturmak için işlem gücü veya içeriği aktarmak için bant genişliği harcamaması demektir. (Bu 304 mekanizması, koşullu istekler makalesinde ayrıntılı biçimde ele alınan tarama bütçesi mekanizmasıdır; burada var olduğunu ve her iki açıdan da maliyet tasarrufu sağladığını bilmek yeterlidir.)

Neredeyse herkesin gözden kaçırdığı incelik

Google’ın tarama botu, Cache-Control yönergelerinin tamamını bir tarayıcı veya CDN gibi uygulamaz. Resmî tarama botu genel bakışına göre ETag/Last-Modified dışında “other HTTP caching directives aren’t supported.” Bunun kısmi bir istisnası vardır: Google, bir URL’nin ne zaman yeniden taranacağını belirlemelerine yardımcı olmak için tarama botlarına yönelik olarak isteğe bağlı biçimde max-age ayarlayabileceğinizi söyler — bu kesin bir kilit değil, yeniden tarama ipucudur. Dolayısıyla no-cache, s-maxage, stale-while-revalidate ve benzerleri tarayıcı ile CDN davranışını şekillendirmeye devam eder, ancak Googlebot’un önbellekleme biçimini değiştirmez. Google’ın önbelleğin ne zaman geçersiz kılınacağına ilişkin önerisi de mantıklıdır: önemli değişikliklerde önbelleğin yenilenmesini zorunlu kılın — yalnızca altbilgideki telif hakkı tarihini güncellemek önemli bir değişiklik değildir.

CDN’ler ve tarama

CDN yalnızca hız kazandırmaz. Google’ın tarama altyapısı, URL’leri sunan IP adresinden CDN kullanımını çıkararak CDN destekli sitelere daha yüksek tarama hızları tanıyacak biçimde tasarlanmıştır — CDN destekli bir kaynak sunucunun aynı anda daha fazla isteği karşılayabileceği varsayılır.

Ancak planlama sırasında dikkate alınması gereken bir nokta vardır: soğuk önbellek. Bir URL’ye ilk kez erişildiğinde CDN’nin önbelleği “soğuktur” — URL henüz hiç istenmemiştir; dolayısıyla önbelleğin ısınması için kaynak sunucunuz içeriği en az bir kez sunmalıdır. Google bu nedenle çok sayıda URL’yi aynı anda yayına almanın tarama bütçesine ciddi yük bindirdiği ve tarama hızını birkaç gün boyunca yüksek tuttuğu konusunda uyarır. Büyük bir lansman veya site geçişi yapıyorsanız CDN yardımcı olmaya başlamadan önce kaynak sunucunun her URL için tam yükü üstleneceğini hesaba katın.

CDN yanlış yapılandırması bir tarama riskidir

Önbelleklemeyle bağlantılı en korkutucu sorunlar, önbellek sürelerinin kısa olması değil; botları engelleyen CDN ve WAF yapılandırmalarıdır. Google’ın CDN yazısı, geçici engelleri bildirmek için 503/429 göndermenin tercih edilen yöntem olduğunu açıkça belirtir. Ağ zaman aşımı ise URL’lerin dizinden kaldırılmasına yol açabilecek nihai, “hard” bir hata olarak değerlendirilir. Daha sinsi olanı soft block, yani bot doğrulama ara sayfasıdır. Tarama botu sitenizi değil, yalnızca doğrulama sayfasını görür — bu nedenle Google bunun yerine otomatik istemcilere 503 döndürülmesini önemle önerir. Bir CDN’nin Google’ı sessizce engelleyip engellemediğini kontrol etmenin en kolay yolu, Search Console’daki URL İnceleme aracıdır — oluşturulan görsele bakın; bot doğrulaması veya boş bir sayfa gösteriyorsa CDN sağlayıcınızla görüşün.

Yönlendirmeleri CDN’e devretmek sevdiğim bir tekniktir. Marketing Speak podcast’inde bunu şöyle açıkladım: “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.” (Alıntıya atla)

Taramayı ve dizine eklemeyi bozan önbellek tuzakları

Çoğu “SEO için önbellekleme” makalesinin atladığı nokta budur. Önbellek yalnızca işlemleri hızlandırmaz — yanlış yapılandırılmış bir önbellek bota yanlış baytları sunarak taramayı veya dizine eklemeyi bozabilir.

Gerçek bir örnek: engelleyici bir robots.txt sunan paylaşılan önbellek. Test ortamı ile canlı site arasında paylaşılan bir CDN önbelleğinden kaynaklandığı anlaşılan, Googlebot’un aralıklı olarak engellendiği bir vakayı araştırdım. Indexed, though blocked by robots.txt yazımda belirttiğim gibi: “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.” Çözüm, önbelleği ayırmak veya test ortamındaki .txt dosyalarını önbelleğin dışında bırakmaktı. Bir önbellek yanlış yapılandırması doğrudan tarama hatasına neden olmuştu; gerçekten sorun çıkaran risk türü budur.

Aynı ailedeki diğer tuzaklar:

  • Botlara güncelliğini yitirmiş içerik sunan eski CDN önbelleği. Uç önbelleğiniz, bir değişikliği yayımlamanızdan uzun süre sonra bile eski sürümü tutuyorsa botlar eski sürümü görmeye devam eder. Yayın sırasında önbelleği temizleyin veya önbellek ömrünü sayfanın gerçekte ne sıklıkta değiştiğine göre belirleyin.
  • Vary / User-Agent kaynaklı önbellek parçalanması. Paylaşılan bir önbelleğin anahtarı normalde yalnızca URL’dir; Vary, farklı varyantların ayrı ayrı saklanması için bu anahtara istek başlıklarını (User-Agent veya Accept-Language gibi) ekler. Yanıtı gerçekten değiştiren bir başlık eksik bırakılırsa bir istekte bulunan kişi başka birinin varyantını alabilir — örneğin mobil/masaüstü veya bot/insan içerikleri karışabilir. Vary içine çok fazla başlık eklerseniz önbelleği o kadar çok, birbirine çok yakın anahtara bölersiniz ki isabet oranı neredeyse hiç iyileşmez. Modern tarayıcılar ayrıca gizlilik amacıyla kendi önbelleklerini üst düzey siteye göre bölümler; bu nedenle bir sitede gömülü olarak önbelleğe alınan kaynak, başka bir sitede gömüldüğünde genellikle yeniden kullanılmaz. Bu, Vary mekanizmasından farklıdır; “bu neden önbelleğe alınmıyor?” sorununu araştırırken ikisini birbirine karıştırmamak gerekir.

Süreyle ilgili genel yaklaşımım LCP çalışmasından gelir. Ahrefs’in Largest Contentful Paint kılavuzunda belirttiğim gibi, “Your cache time should be as long as you are comfortable with” — ayrıca “An ideal setup is to cache for a really long period of time but purge the cache when you make a change to a page.” Uzun süreli önbellek, anında temizleme. Hem hızlı hem de güncel kalmanızı sağlayan birleşim budur.

Önbelleğe alma bir sıralama faktörü müdür?

Hayır — doğrudan değil. ETag ayarlamak veya iyi bir Cache-Control politikası için bir sıralama sinyali yoktur. Önbelleğe almanın yaptığı şey, görünürlük için önemli olan iki şeyi beslemektir: sayfa hızı / Core Web Vitals (açık bir sayfa deneyimi girdisi) ve tarama verimliliği (yeni ve güncellenmiş içeriğin ne kadar hızlı keşfedilip yenilendiğini yönetir, dolaylı olarak tazelik hassasiyeti olan sonuçları etkiler). Bunu, sitenizi hızlı ve taranması kolay hale getirdiği için kurun — doğrudan bir sıralama artışı beklediğiniz için değil.

Add an expert note

Pin an expert quote

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