Görsel Sürümleme Nasıl Yönetilir? Eski Dosyalar Nasıl Temizlenir?
Bir ürün görseli güncellendi, yeni versiyon sunucuya yüklendi. Fakat bazı kullanıcılar hâlâ eski görseli görüyor. Sayfayı yenileyin, önbelleği temizleyin deyin — sorun devam ediyor. Çünkü görsel tarayıcı önbelleğinde veya CDN kenarında yaşıyor; sunucudaki değişiklik bu katmanlara henüz ulaşmadı. Bu senaryo, görsel yönetiminde en sık karşılaşılan operasyonel sorunlardan biri.
Sorunun kökü dosya adında. Güncellenen görsel eski dosya adıyla kaydedildiğinde, önbellek mekanizmaları değişikliği fark etmiyor. URL aynı kaldığı sürece CDN ve tarayıcı kaydettikleri versiyonu sunmaya devam ediyor. Bunu önlemenin yolu, dosya içeriği değiştiğinde URL'nin de değişmesini sağlamak — yani sürümleme stratejisi uygulamak.
Sürümleme yalnızca önbellek sorunuyla ilgili değil. Zamanla biriken eski görsel dosyaları sunucu depolama alanını dolduruyor, hangi dosyanın aktif kullanımda olduğunu belirsizleştiriyor ve yanlışlıkla silme riskini artırıyor. Dosya adı stratejisi ve periyodik temizleme bu iki sorunu birlikte çözüyor.
CDN önbelleği neden sorun çıkarır
Görsel CDN, bir dosyayı ilk talep anında origin sunucudan çekip edge node'larında önbelleğe alıyor. Sonraki talepler origin'e gitmeden edge'den yanıtlanıyor — bu performansın temel kaynağı. Fakat bu önbellekleme, dosya içeriği değiştiğinde sorun yaratıyor: CDN, URL değişmediği sürece yeni versiyonu otomatik çekmiyor.
CDN'lerin büyük çoğunluğu cache purge (önbellek temizleme) API'si sunuyor. Cloudflare, Fastly, AWS CloudFront gibi servisler belirli URL'leri veya tüm önbelleği geçersiz kılmak için API endpoint'leri sağlıyor. Bu yöntemi deploy pipeline'ına entegre etmek mümkün: görsel değiştiğinde otomatik purge çağrısı yapılıyor. Fakat bu yaklaşımın zayıf noktası var — purge işlemi tüm edge lokasyonlarına yayılmak için biraz zaman alıyor. Bu pencerede bazı kullanıcılar eski versiyonu görmeye devam edebilir.
Dosya adına sürüm bilgisi eklemek bu riski tamamen ortadan kaldırıyor. Yeni URL hiçbir önbellekte yok; tüm talepler origin'e gidiyor ve yeni versiyon sunuluyor. Eski URL'deki önbellek entry'si zamanla expire oluyor ve silinebiliyor.
Dosya adı stratejileri: hash, timestamp ve semantik
Dosya adına sürüm bilgisi eklemenin birkaç yolu var. En güvenilir yöntem içerik hash'i kullanmak. Dosya içeriğinden üretilen kısa bir hash (MD5 veya SHA-1'in ilk 8 karakteri gibi) dosya adına ekleniyor: urun-foto.webp yerine urun-foto-a3f8c2d1.webp. İçerik değiştiğinde hash değişiyor, dolayısıyla dosya adı da değişiyor. Aynı içerik aynı hash üretiyor — gereksiz cache geçersizleştirme yok.
Timestamp kullanmak daha basit ama daha az hassas. urun-foto-20260415.webp gibi bir yapı insan tarafından okunabilir; hangi versiyonun ne zaman yüklendiğini dosya adından anlamak kolay. Dezavantajı: aynı gün birden fazla güncelleme yapılırsa çakışma riski var ve içerik değişmese bile tarih değiştiğinde yeni bir URL üretiliyor.
Semantik sürümleme — urun-foto-v2.webp, urun-foto-v3.webp gibi — ürün kataloğu veya marka görselleri için anlamlı. Hangi versiyonun yayında olduğunu takip etmek kolay; farklı sürümler arasında geri dönmek gerektiğinde dosya adından anlaşılıyor. Fakat büyük ölçekte otomatize etmek zor; sürüm numarasını elle artırmak hatalara açık.
Modern build araçları — Vite, Webpack, Next.js — statik asset'ler için içerik hash'ini otomatik üretip dosya adına ekliyor. Bu araçları kullanan projelerde sürümleme büyük ölçüde çözülmüş geliyor; asıl dikkat edilmesi gereken CMS'ten doğrudan yüklenen ve build sürecinin dışında kalan görseller.
Eski dosyaların sunucuda birikmesi
Sürümleme uygulandığında her güncelleme yeni bir dosya üretiyor; eski dosyalar sunucuda kalmaya devam ediyor. Küçük ölçekte bu fark edilmeyebilir, fakat yoğun içerik üretiminde yüzlerce veya binlerce eski görsel dosyası birikebiliyor. Bu birikimin birkaç pratik sonucu var: depolama maliyeti artıyor, klasör içeriği karmaşıklaşıyor ve hangi dosyanın aktif kullanımda olduğunu anlamak güçleşiyor.
Temizleme için önce hangi dosyaların aktif kullanımda olduğunu belirlemek gerekiyor. Bunu yapmanın en güvenilir yolu referans tarama: HTML dosyaları ve CSS içinde hangi görsel URL'lerinin kullanıldığını grep veya benzer bir araçla taramak. Referansı olmayan dosyalar aday listesine giriyor. Bu listeyi manuel incelemek, yanlışlıkla silme riskini azaltıyor.
Image sitemap bu süreçte referans noktası olarak kullanılabiliyor. Sitemap'te listelenen görsel URL'leri aktif içerik olarak kabul ediliyor; sitemap'te olmayan eski versiyonlar temizleme adayı. Fakat sitemap'in güncel tutulması bu yaklaşımın ön koşulu.
Temizleme akışı ve güvenli silme
Temizleme akışını otomatize etmek mümkün fakat dikkatli olmak gerekiyor. Yanlış temiz dosyayı silmek, üretim ortamında kırık görsel bağlantılarına yol açıyor. Bu riski yönetmek için birkaç pratik:
Önce silmeden arşivlemek. Temizleme adayı dosyaları silmek yerine geçici bir arşiv klasörüne taşımak, hata durumunda geri dönüş imkânı sağlıyor. Bir-iki hafta arşivde bekleyen ve hiçbir kullanıcı şikayeti gelmeyen dosyalar güvenle silinebiliyor. CDN önbellek süresi de bu bekleme süresini belirliyor: maksimum TTL değerinden daha uzun beklemek, önbellekteki eski versiyonların expire olmasını garanti ediyor.
Periyodik temizleme takvimi kurmak düzensiz birikimi önlüyor. Çoğu proje için aylık veya üç aylık bir temizleme döngüsü yeterli. Bu döngüyü otomatize etmek için referans tarama scriptini cron job olarak tanımlamak ve temizleme raporunu bir log dosyasına yazmak, sürecin takibini kolaylaştırıyor.
CMS kullanan projelerde temizleme genellikle daha karmaşık. CMS, görselleri kendi medya kütüphanesinde yönetiyor; hangi görselin hangi içerikte kullanıldığını CMS veritabanı tutuyor. Kullanılmayan medya listesi CMS arayüzünden veya veritabanı sorgusuyla çıkarılabiliyor. WordPress gibi popüler CMS'lerde bu işlev eklentilerle destekleniyor.
Sürümleme ve temizlemeyi birlikte yönetmek
Sürümleme ve temizleme ayrı operasyonlar gibi görünse de aslında birbirini tamamlıyor. Sürümleme yeni görseller için URL değişikliğini garanti ediyor; temizleme eski sürümleri aradan çıkarıyor. İkisi birlikte uygulandığında depolama alanı kontrol altında kalıyor ve önbellek sorunları sistemik biçimde önleniyor.
Küçük projelerde bu süreçlerin büyük kısmı manuel yönetilebiliyor: anlamlı dosya adları, periyodik klasör incelemesi, CDN purge. Büyük ölçekte içerik üretiminde ise otomasyon kaçınılmaz hale geliyor. Referans tarama, arşivleme ve temizleme scriptleri bir kez kurulduğunda düzenli çalışıyor ve ekibin görsel yönetimine ayırdığı süreyi önemli ölçüde azaltıyor.
Görsel sürümleme ve temizleme, web projelerinde çoğunlukla ihmal edilen operasyonel katman. Anlık sonuç üretmiyor; etkisi zamanla biriken sorunlarda görünüyor. Dosya adı stratejisini erken belirlemek ve temizleme döngüsünü baştan kurmak, ileride saatlerce sürebilecek hata ayıklama oturumlarını ve depolama temizliğini önlüyor.
Hangi yol seçilirse seçilsin — hash, timestamp veya semantik sürüm — tutarlılık en önemli kural. Ekibin farklı kanallardan yüklediği görsellerde farklı stratejilerin karışması, sürümlemenin sağladığı öngörülebilirliği ortadan kaldırıyor. Tek bir konvansiyonu belgelemek ve buna uymak, strateji seçiminden daha değerli.