Panelde kategoriyi açıyorsun, kırk ürün sıralanmış duruyor. Sitede aynı kategoriye giriyorsun, karşında bembeyaz bir sayfa ve "bu kategoride ürün bulunamadı" yazısı. İlk tepki her zaman aynıdır: bir şey silindi, bir şey bozuldu, belki hosting. Oysa on vakanın dokuzunda hiçbir şey silinmemiştir. Ürünler tam olarak olmaları gereken yerde durur; onları listeden çıkaran şey, senin hiç bakmadığın bir koşuldur.
Çoğu kişi kategori sayfasını basit bir liste sanır ama aslında orada üst üste binmiş altı ayrı filtre çalışır: ağaç ilişkisi, yayın durumu, stok durumu, fiyat kaydı, sayfalama ve önbellek. Bunlardan herhangi biri sessizce "hayır" derse sonuç boş gelir ve hiçbir hata kaydı oluşmaz. Bu yazıda bu katmanları tek tek soyacağız; hangi e-pin scripti ya da dijital ürün satış scripti kullandığından bağımsız olarak aynı teşhis sırası işine yarayacak.
Alt kategori tuzağı: üst kategoride ürün yoktur, olmaması da normaldir
E-pin kataloglarının neredeyse tamamı iki, hatta üç seviyelidir: "Mobil Oyunlar" altında "PUBG Mobile", onun altında "UC Paketleri". Ürünler her zaman en alt seviyeye bağlanır. Üst kategori sayfası ise sadece kendisine doğrudan bağlı ürünleri sorgularsa, orada hiçbir ürün bulamaz; çünkü doğrudan bağlı ürün hiç yoktur. Sonuç: en çok trafik alan üst kategori sayfan boş açılır, alt kategoriler tıkır tıkır çalışır.
Doğru davranış, üst kategori sorgusunun tüm alt dalları kapsamasıdır. Bu ya yinelemeli bir alt kategori kimlik listesiyle ya da yol tabanlı bir yapıyla çözülür. Kategori sayısı büyüdüğünde her istekte ağacı yeniden dolaşmak pahalıya gelir; bu yüzden ciddi bir e-pin yazılımı kategori ağacını önbelleğe alır ve kategori kaydedildiğinde bu önbelleği yeniler. Ek olarak, üst kategoride hiç ürün yoksa bile alt kategori kartlarını göstermek gerekir; böylece "boş sayfa" hiçbir koşulda ekrana gelmez.
Yayın durumu ve tarih alanları: ürünü görünmez yapan üç bayrak
Bir ürünün listede çıkması için genelde birden fazla bayrağın aynı anda doğru olması gerekir: ürünün kendi yayın durumu, bağlı olduğu kategorinin yayın durumu ve varsa yayın başlangıç tarihi. Toplu ürün aktarımı yapan işletmelerde en sık görülen senaryo şudur: ürünler aktarılır, hepsi yayında işaretlenir, ama kategori taslak olarak kalır. Panelde kategoriyi açtığında ürünleri görürsün, çünkü panel yayın durumuna bakmaz. Sitede göremezsin, çünkü site bakar.
Bir diğer sinsi alan yayın tarihidir. Aktarım sırasında boş bırakılan bir tarih sütunu kimi kurulumlarda gelecek bir tarihe ya da geçersiz bir değere dönüşür ve koşul hiçbir zaman sağlanmaz. Teşhis için tek yapman gereken, kategori sorgusundan bayrak ve tarih koşullarını geçici olarak çıkarıp kaç satır döndüğünü saymaktır. Sayı birden kırka çıkıyorsa suçluyu bulmuşsundur. İyi bir epin yazılım panelinde bu durum "yayında görünmeyen ürünler" uyarısı olarak zaten karşına çıkmalıdır.
| Belirti | Kök neden | Hızlı teşhis |
|---|---|---|
| Üst kategori boş, alt kategoriler dolu | Sorgu alt dalları kapsamıyor | Alt kategori kimliklerini elle ekleyip dene |
| Tüm kategoriler boş, ana sayfa dolu | Kategori yayın durumu taslakta | Kategori tablosunda durum sütununu say |
| Belirli bir kategori boş | Ürün-kategori ilişki kaydı eksik | İlişki tablosunda o kategoriyi sorgula |
| Sayfa 1 dolu, sayfa 2 boş | Toplam sayı ile liste sorgusu farklı filtreli | İki sorgunun WHERE bloklarını kıyasla |
| Ben boş görüyorum, müşteri doluyor | CDN veya sayfa önbelleğinde eski kopya | Önbelleği temizleyip başlıkları incele |
| Sıralama seçilince liste boşalıyor | Olmayan kolona göre sıralama, sorgu hatası | Hata kaydını aç, sıralama parametresini test et |
Sayfalama matematiği: ikinci sayfaya geçince katalog neden buharlaşıyor?
Kategori sayfaları iki ayrı sorgu çalıştırır: biri toplam ürün sayısını bulur, diğeri o sayfaya düşen satırları çeker. Bu iki sorgunun filtreleri zamanla birbirinden ayrılır; biri stok koşulunu içerir, diğeri içermez. Sonuç şu olur: toplam sayı yüz der, sayfa başına yirmi gösterirsin, beş sayfa linki üretirsin, ama gerçek liste kırk üründen oluşur. Üçüncü sayfaya tıklayan müşteri boş ekran görür.
Kural nettir: sayma ve listeleme sorguları aynı filtre kümesini paylaşmalıdır. Bunu tek bir yerde tanımlanan ortak bir koşul bloğuyla sağlarsın. Ayrıca istenen sayfa numarası gerçek sayfa sayısını aşıyorsa, kullanıcıyı boş ekranda bırakmak yerine son geçerli sayfaya yönlendirmek gerekir. Aynı disiplin sıralama parametreleri için de geçerli: kullanıcıdan gelen sıralama değeri asla doğrudan sorguya girmemeli, izin verilen kolon listesiyle eşleştirilmelidir. Aksi halde geçersiz bir değer hem boş liste hem güvenlik açığı üretir.
Boş açılan kategori sayfalarının neden dağılımı
- Kategori ağacı ve ilişki kayıtları 40%
- Yayın durumu ve stok filtreleri 30%
- Önbellek ve CDN kopyaları 20%
- Sayfalama ve sıralama 10%
Önbellek: bir kere boş kaydedilen sayfa saatlerce boş kalır
En can sıkıcı senaryo şudur: sorun bir saat önce çözülmüştür ama sayfa hâlâ boş görünür. Çünkü kategori boşken oraya giren bir ziyaretçi veya bir tarama botu, o boş çıktının önbellekte saklanmasına yol açmıştır. Bundan sonra gelen herkes veritabanına hiç uğramadan o boş kopyayı alır. Sen tarayıcını yenilersin, kendi oturumun önbelleği atladığı için doluyu görürsün ve sorunun bittiğini sanırsın.
Burada iki kural var. Birincisi, boş sonuç asla önbelleğe yazılmamalıdır; sıfır satır dönen bir kategori çıktısı ya hiç saklanmaz ya da çok kısa ömürle saklanır. İkincisi, ürün veya kategori kaydedildiğinde ilgili kategori sayfalarının önbellek anahtarları hedefli biçimde düşürülmelidir. Tüm siteyi temizlemek işe yarar ama trafik yoğunken sunucuyu yorar. Bir dijital ürün satış yazılımı seçerken "kategori güncellemesinde hangi önbellekler düşüyor" sorusunu mutlaka sor; cevabı net olmayan sistem seni bu döngüye tekrar sokar.
Bir kategori sayfası sıfır ürünle açıldığında bunu kayda al ve panelde göster. Böylece hatayı müşteriden değil kendi raporundan öğrenirsin.
Fiyat, döviz ve görsel bağımlılıkları listeyi sessizce kırpar
Kategori listesi genelde ürünün fiyatını ve kapak görselini birlikte çeker. Bu birliktelik INNER JOIN ile kurulduysa, fiyat kaydı olmayan veya görseli yüklenmemiş her ürün listeden düşer. E-pin işinde bu son derece sık yaşanır: yeni bir ürün grubu açılır, fiyatlar bir sonraki gün girilmek üzere bekletilir, o gün kategori yarı boş görünür. Döviz kuruna bağlı fiyatlandırma kullanıyorsan tablo daha da kırılgandır; kur kaydı düşmediği bir günde ilgili ürünlerin fiyatı hesaplanamaz ve satır üretilmez.
Sağlam kurgu, fiyat ve görseli zorunlu değil tamamlayıcı veri olarak ele alır. Fiyat yoksa "fiyat için iletişime geç" etiketi, görsel yoksa kategori varsayılan görseli devreye girer; ürün listeden hiçbir koşulda düşmez. Kur verisi için de son geçerli kura geri düşen bir mekanizma şarttır. Bu tür savunmalar, bir e-pin satış yazılımının olgunluğunu gösteren en somut işaretlerdir ve özellik listesinde açıkça yer almalıdır.
Teşhisi sıraya koy, tahmin etmeyi bırak
Bu hatayı kovalarken en büyük zaman kaybı rastgele denemedir. Sıra şu olmalı: önce tarayıcı önbelleğinden ve CDN'den bağımsız bir istekle sayfayı çek, gerçekten boş mu diye doğrula. Sonra kategori sorgusunu filtresiz çalıştır ve satır sayısını gör. Satır geliyorsa suçlu filtrelerdir; filtreleri tek tek geri ekleyerek hangisinin kestiğini bul. Satır hiç gelmiyorsa suçlu ilişki kayıtlarıdır; ürün-kategori tablosunu doğrudan sorgula.
Bu dört adım, vakaların neredeyse tamamını on beş dakikada çözer. Daha önemlisi, aynı sırayı bir kontrol listesine dönüştürüp her ürün aktarımından sonra uyguladığında sorun bir daha müşteriye ulaşmaz. Katalog sağlığı, e-pin işinde stok kadar kritiktir: görünmeyen ürün, olmayan üründür. Fiyat sayfasında hangi paketin katalog denetim raporlarını içerdiğini karşılaştırabilirsin.
| Kontrol | Ne yapılacak | Beklenen sonuç |
|---|---|---|
| Önbellek bağımsız istek | Sayfayı temiz oturumla çek | Boşluk gerçekten sunucudan geliyor mu |
| Filtresiz sorgu | Tüm WHERE koşullarını kaldır | Satır sayısı sıfırdan büyük olmalı |
| Kategori yayın durumu | Üst ve alt kategorileri kontrol et | Hepsi yayında olmalı |
| Alt dal kapsaması | Alt kategori ürünleri dahil mi | Üst kategori toplamı alt toplamlara eşit |
| Sayma-liste eşliği | İki sorgunun filtresini kıyasla | Birebir aynı koşul bloğu |
| Fiyat ve görsel JOIN | LEFT JOIN'e çevir | Eksik veriyle de satır dönmeli |
| Boş sonuç kaydı | Sıfır ürünlü sayfayı logla | Panelde uyarı görünmeli |
Katalogun her zaman dolu açılsın
Pinova, yinelemeli kategori ağacı, tamamlayıcı veri mantığı ve hedefli önbellek geçersizleştirmeyle boş kategori sayfasını baştan imkânsız hale getirir.
Üst kategorim neden hep boş açılıyor?
Ürünler en alt kategoriye bağlıdır ve sorgu alt dalları kapsamıyorsa üst kategoride hiç kayıt bulamaz. Sorgunun tüm alt kategori kimliklerini içermesi gerekir.
Panelde ürünleri görüyorum ama sitede yok, neden?
Panel çoğu zaman yayın durumu ve tarih koşullarını uygulamaz, site uygular. Kategori taslakta kalmış ya da yayın tarihi geçersiz olabilir.
Sorunu çözdüm ama sayfa hâlâ boş görünüyor
Boş çıktı önbelleğe düşmüş olabilir. İlgili kategori önbelleğini temizle ve sıfır sonuçlu çıktıların hiç saklanmaması için kuralı değiştir.
İkinci sayfa neden boş geliyor?
Toplam sayıyı bulan sorgu ile listeyi çeken sorgunun filtreleri farklıdır. İki sorgu aynı koşul bloğunu paylaşmalı ve aşan sayfa numarası son sayfaya yönlenmelidir.
Boş kategori sayfası bir yazılım kazası değil, bir tasarım tercihinin sonucudur: sistem eksik veriyi tolere etmek yerine satırı silmeyi seçer. Toleranslı kurgulanmış bir katalogun nasıl davrandığını görmek için canlı demo üzerinde bir kategoriyi kasten yarım bırakıp sayfanın yine dolu açıldığını kendi gözlerinle test et.

