WooCommerce mağazalarında performans konuşulduğunda, konu çok hızlı bir şekilde CDN ve önbellek ayarlarına geliyor. Ancak e-ticaret tarafında klasik WordPress blog’larından farklı bir gerçeklik var: Sepet, ödeme ve hesap sayfaları tamamen dinamik çalışıyor ve en ufak yanlış cache kuralı; boş sepetler, kaybolan kuponlar, hatalı kargo ücretleri ve tamamlanmayan siparişler olarak size geri dönüyor. Bu yazıda DCHost ekibi olarak sahada defalarca test ettiğimiz, canlı WooCommerce mağazalarında uyguladığımız stratejileri sade bir dille toparlayacağız.
Amacımız; “CDN kapalı kalsın, sorun çıkmasın” değil, tam tersi: CDN ve önbelleği agresif ama kontrollü kullanarak mağazanızı hızlandırmak, bunu yaparken de sepet ve ödeme adımlarını bozmadan ilerlemek. URL bazlı hariç tutma, cookie tabanlı cache bypass, HTTP başlıkları ve farklı web sunucularında (Nginx, Apache, LiteSpeed) pratik kurallara kadar adım adım gideceğiz. Son bölümde ise elinizin altında tutabileceğiniz uygulanabilir bir kontrol listesi bulacaksınız.
İçindekiler
- 1 WooCommerce’de Hız ve CDN Neden Bu Kadar Kritik?
- 2 CDN Nedir, WooCommerce’de Ne İşe Yarar?
- 3 WooCommerce’de Asla Önbelleğe Alınmaması Gereken Sayfalar
- 4 WooCommerce İçin Güvenli CDN ve Önbellek Stratejisi
- 5 Farklı Web Sunucularında WooCommerce Cache Kuralları
- 6 CDN Tarafında WooCommerce İçin Özel Kurallar
- 7 Sepet ve Ödeme Sayfaları İçin HTTP Başlıkları ve Cookie Stratejisi
- 8 WooCommerce Performansını Destekleyen Diğer Önbellek Katmanları
- 9 Adım Adım: WooCommerce İçin Güvenli CDN ve Cache Kontrol Listesi
- 10 Sonuç: Sepeti Bozmadan Hızlanan WooCommerce Mağazası
WooCommerce’de Hız ve CDN Neden Bu Kadar Kritik?
WooCommerce, WordPress üzerinde çalışan oldukça esnek ama aynı zamanda veritabanı ve PHP tarafında ağırlaşmaya meyilli bir e-ticaret eklentisi. Ürün sayfaları, filtreler, kampanya etiketleri, stok kontrolleri, kuponlar, kargo hesaplamaları… Hepsi her istekle birlikte arka planda çalışıyor.
Özellikle şu senaryolarda performans kritik hale geliyor:
- Yoğun kampanya dönemleri (indirim günleri, özel günler, TV reklamı sonrası trafik artışı)
- Geniş ürün kataloğuna sahip mağazalar (binlerce ürün, onlarca kategori)
- Mobil trafiğin yüksek olduğu, zayıf bağlantılardan erişilen siteler
Bu noktada devreye iki temel araç giriyor:
- CDN (Content Delivery Network): Statik dosyalarınızı (CSS, JS, görseller, fontlar) ziyaretçiye en yakın noktadan sunarak ilk yükleme süresini düşürür.
- Önbellek (cache): Sunucunun her istekte aynı PHP kodlarını ve veritabanı sorgularını yeniden çalıştırmasını engelleyen, hazırlanan çıktıyı belirli bir süre saklayan katman.
Sorun, bu iki katmanın yanlış yapılandırıldığında dinamik e-ticaret süreçleriyle çakışması. Bu yazının odağı tam da burası: Hangi sayfaları, ne kadar süre, hangi seviyede cache’lemeniz gerektiğini netleştirmek.
CDN Nedir, WooCommerce’de Ne İşe Yarar?
CDN, sitenizin barındığı sunucudan bağımsız çalışan, dünya geneline dağılmış noktalardan (POP) içerik dağıtan bir ağdır. Temel çalışma mantığı:
- İlk istekte dosyayı origin sunucudan (örneğin DCHost üzerindeki VPS’inizden) alır.
- Belirli bir süre kendi noktasında önbelleğe alır.
- Aynı dosya tekrar talep edildiğinde, kullanıcıya doğrudan CDN’den sunar.
WooCommerce tarafında CDN’in ideal kullanım senaryosu:
- Görseller (ürün görselleri, banner’lar, ikonlar)
- CSS ve JS dosyaları
- Font dosyaları
- Bazı durumlarda sepet/ödeme dışındaki HTML sayfaları
CDN ile neleri cache’leyeceğiniz ve hangi başlıklarla (Cache-Control, Expires vb.) yöneteceğiniz konusu, daha önce detaylı anlattığımız CDN önbellekleme ve Cache-Control başlıklarını doğru kullanma rehberimizle de doğrudan bağlantılı. Burada WooCommerce’e özgü kısımları derinleştireceğiz.
WooCommerce’de Asla Önbelleğe Alınmaması Gereken Sayfalar
İlk kuralı netleştirelim: Her şeyi cache’lemek performansı artırmaz, bazı şeyleri cache’lemek sadece mağazanızı bozar. WooCommerce’de özellikle bu URL ve işlemler HTML düzeyinde önbelleğe alınmamalıdır:
- Sepet sayfası: Genellikle
/cart/ - Ödeme sayfası: Genellikle
/checkout/ - Hesabım sayfası:
/my-account/ve alt URL’leri - Giriş/kayıt sayfaları
- Sepete ekleme işlemleri:
?add-to-cart=parametresi içeren URL’ler - AJAX endpoint’leri:
/wp-admin/admin-ajax.php,?wc-ajax=içeren istekler - REST API:
/wp-json/altındaki istekler
Nedeni basit: Bu sayfalar kullanıcıya özeldir. Aynı URL, farklı ziyaretçiler için farklı içerik üretir. Bir müşterinin sepetini cache’leyip başka bir müşteriye vermek; hem güvenlik, hem de kullanıcı deneyimi açısından kabul edilemez.
Dolayısıyla “WooCommerce için CDN ve önbellek ayarları” dendiğinde ilk yapılacak iş, bu kritik URL’ler için hem sunucu tarafında hem de CDN tarafında bypass/hariç tutma kuralları tanımlamaktır.
WooCommerce İçin Güvenli CDN ve Önbellek Stratejisi
1) Statik Dosyaları CDN’e Taşı, HTML’i Dikkatli Cache’le
Çoğu mağaza için başlangıçtaki en güvenli senaryo şu:
- Görseller, CSS, JS ve font dosyalarını CDN üzerinden sunmak
- HTML sayfalarını ilk etapta CDN tarafında cache’lememek
Böylece:
- En ağır dosyalar (özellikle ürün görselleri) coğrafi olarak kullanıcıya yakın noktadan gelir.
- Sepet/ödeme gibi dinamik akışlara müdahale etmemiş olursunuz.
Daha ileri bir seviyeye geçmek isterseniz, sepet ve ödeme hariç diğer bazı sayfalar için (ör. blog, statik içerik sayfaları) CDN tarafında da HTML cache’i açabilirsiniz. Bunun için URL bazlı kurallar tanımlamanız şart; buna aşağıda değineceğiz.
2) Tam Sayfa Önbelleği (Full Page Cache) Dikkatli Kullan
Sunucu tarafında Nginx FastCGI cache, LiteSpeed Cache, Varnish gibi tam sayfa önbellek çözümleri WooCommerce’i ciddi anlamda hızlandırabilir. Ancak yanlış bir kural, sepet/ödeme adımlarını anında bozabilir.
WordPress genelinde tam sayfa cache kullanımını, pratik örneklerle birlikte WordPress’te tam sayfa önbellekleme rehberimizde ayrıntılı anlattık. WooCommerce özelinde ise şu ekstra kurallar kritik:
- Sepet, ödeme, hesabım, giriş/kayıt sayfalarını URl’e göre her zaman cache dışı bırakın.
- Oturum açmış kullanıcılar için HTML cache’i devre dışı bırakın.
- woocommerce_cart_hash ve woocommerce_items_in_cart cookie’leri varsa cache’i bypass edin.
3) URL Bazlı Cache Bypass Kuralları
Hem sunucu hem de CDN tarafında yapmanız gereken ilk şeylerden biri, belirli URL desenlerini asla cache’e sokmamaktır. Örneğin:
/cart//checkout//my-account//wp-admin/,/wp-login.php*wc-ajax=*içeren URL’ler*add-to-cart=*içeren URL’ler
CDN panelinizde genellikle “Page Rules / Rules / Cache Bypass” benzeri bir bölümde; bu URL kalıplarına cache kapalı ya da cache bypass davranışı atamanız gerekir. Sunucu tarafında da benzer mantığı Nginx location blokları, Apache Rewrite/Cache ayarları veya LiteSpeed Cache eklentisinin “Do Not Cache URIs” alanı ile uygulayabilirsiniz.
4) Cookie Bazlı Cache Bypass: Sepette Ürün Varsa Cache Yok
WooCommerce, özellikle sepet durumu ve giriş yapmış kullanıcılar için çeşitli cookie’ler kullanır. En kritik olanlar:
woocommerce_items_in_cartwoocommerce_cart_hashwordpress_logged_in_*
Güvenli strateji:
- Bu cookie’lerden herhangi biri mevcutsa, HTML cache bypass edilsin.
- Cookie yoksa ve URL sepet/ödeme değilse, cache devreye girebilsin.
Böylece:
- Sepete ürün eklememiş, oturum açmamış ziyaretçiler için agresif cache ile yüksek hız sağlarsınız.
- Sepete ürün ekleyen veya giriş yapan kullanıcılar için her zaman taze, kişiye özel içerik sunarsınız.
5) Kullanıcı Rolüne Göre Önbellek
Birçok mağazada yönetici veya editör rolündeki kullanıcılar için site, önbellek yüzünden “yanlış” görünebiliyor. İyi bir pratik:
- Yönetici, editör, mağaza yöneticisi gibi rollerde oturum açan kullanıcılar için daima cache bypass uygulayın.
- Sıradan müşteriler ve anonim ziyaretçiler için cache kuralları geçerli olsun.
Bunu genellikle:
- WordPress tarafında bir cache eklentisi (kullanıyorsanız) ile rol bazlı kural yazarak
- CDN tarafında ise logged-in cookie varlığına göre varyantlar oluşturarak
başarabilirsiniz.
Farklı Web Sunucularında WooCommerce Cache Kuralları
Nginx FastCGI Cache İçin Örnek Konfigürasyon
Nginx FastCGI cache, doğru kurulduğunda WooCommerce için oldukça verimli bir tam sayfa önbellek çözümü. Aşağıdaki sadeleştirilmiş örnek, mantığı anlamanız için yeterli olacaktır:
set $skip_cache 0;
# Sepet, ödeme, hesabım, admin, login, ajax vb. için cache kapalı
if ($request_uri ~*
"(wp-admin|wp-login.php|cart|my-account|checkout|wc-ajax|get_refreshed_fragments|feed|sitemap)"
) {
set $skip_cache 1;
}
# Giriş yapmış kullanıcılar ve sepette ürün olanlar için cache kapalı
if ($http_cookie ~* "(wordpress_logged_in_|woocommerce_items_in_cart|woocommerce_cart_hash)") {
set $skip_cache 1;
}
location ~ .php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm.sock;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
}
Burada önemli olan, $skip_cache değişkenini hem fastcgi_cache_bypass hem de fastcgi_no_cache için kullanmak. Böylece:
- İlgili istekler hiçbir zaman cache’e yazılmaz.
- Önceden yazılmış bir kayıt varsa dahi, geri okunmaz.
Nginx tarafındaki mikro önbellekleme ve daha gelişmiş ayarlar için Nginx mikro önbellekleme rehberimiz de işinize yarayacaktır.
LiteSpeed Web Sunucusu ve LiteSpeed Cache Eklentisi
LiteSpeed sunucu kullanıyorsanız (örneğin DCHost üzerindeki LiteSpeed destekli hosting/VPS senaryolarında), WooCommerce ile oldukça uyumlu çalışan LiteSpeed Cache eklentisi öne çıkıyor. Dikkat etmeniz gereken başlıca ayarlar:
- Cache > WooCommerce bölümünde WooCommerce entegrasyonunu aktif etmek.
- Cache > Excludes > Do Not Cache URIs kısmına
/cart/,/checkout/,/my-account/gibi URL’leri eklemek. - Gerekirse Do Not Cache Cookies alanına
woocommerce_items_in_cartvewoocommerce_cart_hasheklemek.
LiteSpeed Cache eklentisinin genel ayarlarını adım adım anlattığımız LiteSpeed Cache ile WordPress hızlandırma rehberimiz, WooCommerce kurulumlarınız için de iyi bir temel sunar.
Apache + Varnish veya Reverse Proxy Önbelleği
Apache arkasında Varnish veya Nginx reverse proxy kullanan yapılarda mantık aynıdır:
- Varnish VCL içinde
/cart/,/checkout/,/my-account/,/wp-admin,/wp-login.phpgibi yolları pass edin. - Cookie içinde
wordpress_logged_in_,woocommerce_cart_hashvb. varsa yine pass edin. - Geri kalan istekler için cache hit olmasına izin verin.
Özetle, hangi web sunucusunu kullanırsanız kullanın; sepet/ödeme URL’lerini ve belirli cookie’leri cache dışında tutmak ortak prensip.
CDN Tarafında WooCommerce İçin Özel Kurallar
CDN sağlayıcılarının çoğunda mantık aynıdır: Belirli URL desenleri, HTTP başlıkları ve cookie’lere göre cache politikası tanımlarsınız. WooCommerce için tipik bir kurallar seti şu şekilde olabilir:
1) HTML İçin Temel Cache Politikası
- Varsayılan: HTML için cache kapalı (sadece statik dosyalar cache’lenir).
- İsteğe bağlı: Blog, kampanya, statik sayfalar için belirli yol desenlerinde HTML cache’i açık.
Örneğin:
example.com/blog/*→ HTML 15 dk cacheexample.com/kampanya/*→ HTML 5 dk cache- Diğer tüm HTML istekleri → cache kapalı
2) Sepet ve Ödeme İçin URL Bazlı Hariç Tutma
CDN panelinizde “rules” veya “page rules” bölümünde şu tür kalıplar için cache’i mutlaka kapatın:
*/cart**/checkout**/my-account**wc-ajax=**add-to-cart=*
Bunları genellikle “Cache level: Bypass” veya benzeri bir ayarla yönetirsiniz. Böylece CDN, bu isteği her zaman origin’e iletir ve kendi üzerinde saklamaz.
3) Cache-Key ve Cookie Farkındalığı
Daha gelişmiş senaryolarda, CDN’in cache key mantığını da özelleştirebilirsiniz. Örneğin:
- Farklı para birimleri için farklı cache key (ör.
?currency=) - Farklı diller için (ör.
/tr/,/en/) ayrı varyantlar - Cihaz türüne göre (mobil/desktop) ayrı cache key
Ayrıca bazı CDN’ler, belirli cookie’ler geldiğinde cache’i otomatik bypass edecek “cookie rules” desteği sunar. Bu durumda woocommerce_items_in_cart, woocommerce_cart_hash ve wordpress_logged_in_* cookie’lerini listeleyerek WooCommerce akışını güvence altına alabilirsiniz.
CDN ve tarayıcı önbelleğini birlikte düşünmek için tarayıcı ve CDN önbelleğinde cache busting stratejileri yazımızı da mutlaka okumanızı öneririz. Özellikle CSS/JS güncellemelerinde, eski sürümlerin takılı kalmasını engellemek için bu bilgiler çok işe yarıyor.
Sepet ve Ödeme Sayfaları İçin HTTP Başlıkları ve Cookie Stratejisi
CDN ve cache katmanları kadar, HTTP başlıkları da sepet ve ödeme sayfalarının davranışını belirliyor. Önerdiğimiz yapı:
1) Cache-Control Başlıkları
Sepet ve ödeme sayfalarında şu başlık yapısı güvenlidir:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Pragma: no-cache
Expires: 0
no-store, tarayıcıya bu sayfanın hiçbir kopyasını saklamamasını söyler. Özellikle ödeme adımlarında, geri tuşuna basıldığında tarayıcının eski bir kopyayı göstermesini engellemek için önemlidir.
2) Cookie Güvenliği ve SameSite
WooCommerce cookie’leri için Secure, HttpOnly ve uygun SameSite ayarları hem güvenlik hem de ödeme sağlayıcı entegrasyonları açısından kritiktir. Bu konuyu derinlemesine ele aldığımız SameSite ve Secure cookie’ler rehberimiz, sepet ve ödeme çerezlerini doğru yapılandırmanızda yardımcı olacaktır.
WooCommerce Performansını Destekleyen Diğer Önbellek Katmanları
CDN ve tam sayfa cache, işin sadece bir kısmı. WooCommerce’i gerçekten akıcı hale getirmek için aşağıdaki katmanlar da kritik öneme sahip:
1) PHP OPcache
OPcache, PHP kodlarınızın derlenmiş halini bellekte tutarak her istekte yeniden derlenmesini engeller. Doğru ayarlanmış bir OPcache:
- CPU kullanımını düşürür.
- TTFB (Time To First Byte) süresini kısaltır.
- Yoğun trafik anlarında daha stabil yanıt süreleri sağlar.
OPcache tarafında önerdiğimiz ayarları, PHP OPcache ayarları rehberimizde WordPress ve WooCommerce özelinde detaylandırdık.
2) Nesne Önbelleği (Redis / Memcached)
WooCommerce, özellikle ürünler, sepet hesaplamaları ve sorgu sonuçları için yoğun şekilde veritabanına başvurur. Bu sorguların sonuçlarını bellekte saklamak için Redis veya Memcached ile nesne önbelleği kullanmak büyük fark yaratır.
Bu konuda iki önemli adım var:
- Sunucu tarafında Redis veya Memcached servisinin kurulup yapılandırılması (DCHost üzerindeki VPS’lerinizde bu kurulumu kolayca yapabilirsiniz).
- WordPress tarafında uygun eklentiyle nesne cache’in etkinleştirilmesi.
Kurulum ve hangi senaryoda hangi çözümün daha mantıklı olduğu konusunu WordPress ve WooCommerce için Redis mi Memcached mi? yazımızda ayrıntılı anlattık.
3) Veritabanı Optimizasyonu
Cache ne kadar iyi olursa olsun, en yoğun anlarda bazı istekler veritabanına mutlaka ulaşır. Özellikle:
- Büyük ürün katalogları
- Yoğun sipariş geçmişi
- Raporlama ve istatistik eklentileri
MySQL/MariaDB tarafında ek yük oluşturabilir. İndeksleme, sorgu optimizasyonu ve InnoDB tuning konularını, WooCommerce odaklı olarak WooCommerce için MySQL/InnoDB tuning kontrol listesi yazımızda pratik örneklerle aktardık.
4) Doğru Sunucu Kaynakları ve DCHost Altyapısı
Önbellek ayarlarını mükemmel yapsanız bile, CPU ve RAM yetersizse veya disk IOPS değeri düşükse, performans bir noktadan sonra tıkanır. WooCommerce için:
- Hızlı NVMe diskler
- Yeterli vCPU ve RAM
- PHP-FPM, HTTP/2 ve HTTP/3 desteği
gibi bileşenler kritik. WooCommerce kapasite planlama rehberimizde, vCPU, RAM ve IOPS ihtiyacını adım adım nasıl hesaplayabileceğinizi anlattık. DCHost olarak sağladığımız NVMe tabanlı VPS ve dedicated sunucu altyapıları, tam da bu senaryolar için tasarlanmış durumda.
Adım Adım: WooCommerce İçin Güvenli CDN ve Cache Kontrol Listesi
Tüm anlattıklarımızı, uygulaması kolay bir kontrol listesine dönüştürelim. Mevcut mağazanıza uyarlarken bu adımları tek tek işaretleyebilirsiniz.
- Statik içeriklerinizi CDN’e taşıyın.
- Görsel, CSS, JS ve font dosyalarının CDN üzerinden servis edildiğini doğrulayın.
- Tarayıcı geliştirici araçlarında Response Headers altında CDN başlıklarını kontrol edin.
- HTML için varsayılan politikayı belirleyin.
- İlk etapta CDN tarafında HTML cache’ini kapalı tutun.
- Gerekirse blog ve statik sayfalar için kademeli olarak açın.
- Sepet, ödeme ve hesabım URL’lerini hariç tutun.
- CDN kurallarınızda
*/cart*,*/checkout*,*/my-account*,*wc-ajax=*,*add-to-cart=*için cache bypass ekleyin. - Sunucu tarafında (Nginx, Apache, LiteSpeed) aynı URL’ler için cache devre dışı olsun.
- CDN kurallarınızda
- Cookie bazlı cache bypass kurun.
wordpress_logged_in_*,woocommerce_items_in_cart,woocommerce_cart_hashcookie’leri varsa cache’i bypass edin.- Bu kuralları hem web sunucusu hem de CDN tarafında tanımlayın (mümkünse).
- HTTP başlıklarını kontrol edin.
- Sepet ve ödeme sayfalarında
Cache-Control: no-store, no-cachegibi başlıkların döndüğünü doğrulayın. - Statik dosyalarda ise uzun süreli
max-ageveimmutablegibi politikalar kullanın.
- Sepet ve ödeme sayfalarında
- Nesne önbelleği ve OPcache’i etkinleştirin.
- DCHost üzerindeki sunucunuzda Redis veya Memcached kurun ve WordPress ile entegre edin.
- OPcache ayarlarını WooCommerce yüküne uygun şekilde optimize edin.
- Canlıya almadan önce test edin.
- Farklı tarayıcı ve cihazlardan test sepeti oluşturun.
- Giriş yapmış/giriş yapmamış kullanıcı senaryolarını ayrı ayrı deneyin.
- Kupon, kargo hesaplama, stok güncelleme gibi hassas akışları özellikle kontrol edin.
Sonuç: Sepeti Bozmadan Hızlanan WooCommerce Mağazası
WooCommerce için CDN ve önbellek ayarları, dışarıdan bakıldığında karmaşık görünebilir; ama aslında temel prensipler net: Sepet, ödeme, hesabım ve giriş süreçleri her zaman taze, diğer her şey mümkün olduğunca cache’lenmiş olmalı. Bunu sağlamak için URL bazlı hariç tutma, cookie bazlı cache bypass, doğru HTTP başlıkları ve iyi yapılandırılmış bir nesne/OPcache katmanı yeterli.
DCHost olarak sahada gördüğümüz en büyük sorun, ya her şeyin aşırı temkinle tamamen cache dışı bırakılması (gereksiz kaynak israfı), ya da tam tersi panikle tüm CDN/önbellek katmanlarının kapatılması. Oysa doğru mimariyle; NVMe diskli bir VPS veya güçlü bir dedicated sunucu üzerinde, iyi yapılandırılmış Nginx/Apache/LiteSpeed ve akıllı CDN kurallarıyla, hem Core Web Vitals metriklerini iyileştirmek hem de sepet/ödeme akışını sorunsuz tutmak mümkün.
Mevcut WooCommerce mağazanızda bu yazıdaki adımları uygularken desteğe ihtiyaç duyarsanız, DCHost ekibi olarak altyapı seçimi (VPS, dedicated, colocation), cache mimarisi ve CDN entegrasyonu konusunda yanınızdayız. Log analizi, yük testleri ve canlı geçiş planlarıyla, sepetinizi bozmadan mağazanızı birlikte hızlandırabiliriz.
