Web Sitesi Hızını Artıran Tarayıcı Önbellekleme: .htaccess Kodları ve En İyi Uygulamalar

Tarayıcı önbellekleme (browser caching), özellikle statik varlıkların tekrar indirilmelerini önleyerek sayfa yükleme sürelerini azaltır ve kullanıcı deneyimini iyileştirir. Apache tabanlı sunucularda bu ayarların yaygın noktası .htaccess dosyasıdır. Aşağıda uygulama mantığı, örnek .htaccess kodları ve dikkat edilmesi gereken pratikler yer almaktadır.

Neden tarayıcı önbellekleme?

  • Hız ve kullanıcı deneyimi: Tekrar ziyaretlerde içeriğin yerel olarak kullanılması sayfa yüklenme süresini düşürür.
  • Azalan HTTP istekleri: Sunucuya yapılan istek sayısı azalır, gecikme ve bant genişliği kullanımı düşer.
  • SEO ve performans skorları: Daha hızlı yüklenen sayfalar arama motorları ve performans araçlarında daha iyi sonuçlar verir.

Temel .htaccess önbellekleme yaklaşımları

Aşağıdaki yöntemler en sık kullanılan yaklaşımlardır:

  • Expires/Cache-Control başlıkları: Tarayıcıya içerik ne kadar süreyle saklanacağını söyler.
  • ETag ve Last-Modified: Kaynakların değişip değişmediğini kontrol etmek için kullanılır; bazı durumlarda ETag kapatılarak performans iyileştirilebilir.
  • Dosya sürümlendirme (fingerprinting): Statik varlıkların isimlerine versiyon koyarak uzun süreli önbellekleme güvenli hale getirilir.

Örnek .htaccess kodu (statik içerikler için)

Aşağıdaki örnek, Apache mod_expires ve mod_headers yüklüyse kullanılmak üzere hazırlanmıştır. Bu kodu eklemeden önce .htaccess dosyanızın yedeğini alın.

# ===== Expires ile önbellek süreleri =====
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 month"

  # Görseller (uzun süreli önbellek: 1 yıl)
  ExpiresByType image/jpg "access plus 1 year"
  ExpiresByType image/jpeg "access plus 1 year"
  ExpiresByType image/gif "access plus 1 year"
  ExpiresByType image/png "access plus 1 year"
  ExpiresByType image/svg+xml "access plus 1 year"

  # CSS ve JS (sürümlemeyle 1 yıl, sürümsüzse daha kısa süre önerilir)
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType text/javascript "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"

  # Fontlar (1 yıl)
  ExpiresByType font/woff2 "access plus 1 year"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType application/font-woff "access plus 1 year"
</IfModule>

# ===== Cache-Control başlıkları (Headers modülü ile) =====
<IfModule mod_headers.c>
  <FilesMatch "\.(ico|jpe?g|png|gif|svg|woff2?|ttf|eot)$">
    Header set Cache-Control "public, max-age=31536000, immutable"
  </FilesMatch>

  <FilesMatch "\.(css|js)$">
    Header set Cache-Control "public, max-age=2592000"
  </FilesMatch>

  <FilesMatch "\.(html|htm|php)$">
    Header set Cache-Control "no-cache, must-revalidate"
  </FilesMatch>
</IfModule>

# ===== ETag kapatma (opsiyonel, bazı yük dengeleyicilerde fayda sağlar) =====
FileETag None

Önbellek süreleri için pratik öneriler

  • HTML ve dinamik içerik: Kısa süreli (ör. no-cache veya birkaç dakika) — içerik sık güncelleniyorsa tarayıcı her istekten önce sunucudan doğrulama yapsın.
  • CSS/JS: Dosyaları sürümlendiriyorsanız (örn. style.v123.css) 1 yıl gibi uzun süre verin; sürümlendirme yoksa 1 ay veya daha kısa tercih edin.
  • Görseller ve fontlar: 1 yıl (31536000 saniye) uygundur, çünkü genelde değişmezler.
  • CDN kullanımı: CDN ile birlikte cache politikaları daha esnek şekilde yönetilebilir.

Uygulama adımları ve dikkat edilmesi gerekenler

  • Yedek alın: .htaccess'i değiştirmeden önce mutlaka yedek alın; küçük bir hata tüm siteyi erişilemez yapabilir.
  • Modülleri kontrol edin: mod_expires ve mod_headers sunucunuzda etkin olmalıdır; yoksa ilgili kurallar çalışmaz.
  • Versiyonlama (cache busting): CSS/JS dosyalarını isim veya sorgu parametresiyle sürümlendirerek uzun süreli önbellekleme güvenli hale gelir.
  • Test edin: Tarayıcı geliştirici araçları ve performans testleri (PageSpeed gibi araçlar) ile önbellek başlıklarını doğrulayın.
  • Dinamik API istekleri: API yanıtlarını agresif şekilde önbelleğe almak genellikle doğru değildir; bunun yerine sunucu tarafı cache stratejileri veya kısa HTTP önbellekleme tercih edin.
  • Cache temizleme: Değişiklik sonrası kullanıcıların eski içerik görmesini önlemek için sürümlendirme veya cache invalidation stratejileri kullanın.

Sonuç

Doğru yapılandırılmış tarayıcı önbellekleme, .htaccess üzerinden uygulanabildiğinde sayfa yükleme sürelerini anlamlı şekilde düşürür ve kullanıcı deneyimini geliştirir. Önemli olan statik ve dinamik içerikleri ayırt etmek, uygun max-age değerleri belirlemek ve dosya sürümlendirme ile birlikte uzun süreli önbelleğe izin vermektir. Bu yaklaşım, hem performans hem de sunucu kaynak kullanımında sürdürülebilir iyileşme sağlar. Uygulamadan önce .htaccess yedeği alın ve değişiklikleri kademeli olarak test edin.