Filtreli kategori sayfalarında hangi kombinasyon dizine girmeli?

Bir e-ticaret kategorisinde 8 filtre grubu ve her grupta onlarca değer varsa, olası URL sayısı katalogdaki ürün sayısını çok hızlı geçer. Bu URL'lerin neredeyse hepsi birbirinin alt kümesidir ve kimse onları aramaz. Ama hepsi link olarak sayfada durduğu için Googlebot onları tek tek keşfetmeye çalışır.

Öte yandan "kırmızı elbise" gibi bir sorguyu karşılayacak en iyi sayfa da çoğu zaman bir filtre sayfasıdır. Yani mesele filtreleri kapatmak değil, hangilerinin dizine girmeyi hak ettiğine karar verip gerisini taramadan uzak tutmak.

Talep var mı? Her şey buradan başlar

Bir filtre kombinasyonunun dizine açık olması için tek geçerli sebep, o kombinasyonu birebir karşılayan bir arama talebinin olmasıdır. "Kırmızı elbise" aranır. "Nike erkek koşu ayakkabısı" aranır. "Erkek koşu ayakkabısı 42 numara" ise çok nadir aranır; aransa bile arayan kişi genelde kategori sayfasına gelip bedeni kendisi seçer. "Kırmızı, pamuklu, M beden, 500-1000 TL arası elbise" diye arama yapan yoktur.

Bu yüzden karar sırası şöyle: önce talep, sonra URL. Teknik altyapıyı talebi olmayan binlerce kombinasyonu dizine sokacak şekilde kurmak, sonra onları noindex ile temizlemeye çalışmaktan çok daha pahalıdır.

Talebi doğrulamak

Ücretli araç olmadan da talebi görmek mümkün. Ben şu kaynaklara bakıyorum:

  • Search Console Performans raporu: Kategori sayfalarınızın zaten gösterim aldığı sorgular içinde renk, marka, malzeme veya cinsiyet geçenleri süzün. Sorgu filtresinde özel regex kullanabilirsiniz; ifadeyi yazarken GSC regex aracı işinizi kolaylaştırır. Kategori URL'si gösterim alıyor ama sorgu "kırmızı" içeriyorsa, o talebi karşılayacak ayrı bir sayfa eksik demektir.
  • Site içi arama logları: Kullanıcıların kendi sitenizde ne aradığı en dürüst veridir. Sık tekrar eden "marka + tür" veya "renk + tür" kalıpları aday listesine girer.
  • Google otomatik tamamlama ve "Diğer kullanıcılar şunları da aradı" kutuları: Hacim vermez ama kalıbın var olup olmadığını gösterir.
  • Google Ads Anahtar Kelime Planlayıcı: Ücretsiz hesapla aralık bazında hacim verir. Kesin sayı değil ama karşılaştırma için yeterli.

Bu sürecin tamamını ücretli araç olmadan anahtar kelime araştırması yazısında anlattım. Burada önemli olan, her filtre tipi için "bu gruba ait kombinasyonlar aranıyor mu" sorusunu bir kez cevaplayıp kurala dönüştürmek.

Kural seti

Benim kullandığım kural seti şu. Siteye göre ayarlanır ama iskeleti hep aynı kalıyor.

  1. Tek filtre, talebi olan grup: Kategori + marka, kategori + renk, kategori + cinsiyet, kategori + malzeme gibi kombinasyonlar dizine açık olabilir. Grup bazında karar verilir: renk grubu açıksa tüm renkler açılmaz, sadece yeterli ürünü olanlar açılır.
  2. İki filtre, yalnızca beyaz listedeki çiftler: "Marka + tür" veya "cinsiyet + tür" gibi gerçekten aranan çiftler açılır. Her iki filtrenin tüm değerleriyle çarpımı açılmaz, önceden belirlenmiş liste açılır.
  3. Üç ve daha fazla filtre: Dizine kapalı. Link olarak da sunulmaz.
  4. Beden, fiyat aralığı, sıralama, stok durumu, görünüm (liste/grid), sayfa başına ürün sayısı: Hiçbir zaman dizine açık değil. Bu parametreler robots.txt ile taramadan da uzak tutulur.
  5. Aynı grupta çoklu seçim (kırmızı ve mavi birlikte): Dizine kapalı.
  6. Az ürünlü kombinasyon: Dizine açık bir grup bile olsa, altında birkaç ürün kalmıyorsa o sayfa açılmaz. Eşiği siteye göre belirliyorum ama tek ürünlü bir "kategori" sayfası kimseye hizmet etmiyor.
  7. Sonuçsuz kombinasyon: 200 ve "ürün bulunamadı" mesajı değil, 404. Aksi halde soft 404 raporları dolar.

URL yapısı: temiz yol mu, parametre mi?

Dizine açık kombinasyonlara kalıcı, okunabilir ve tek bir URL verin. Kapalı olanlar parametreyle kalsın. Bu ayrım hem kuralı kodda uygulamayı hem de robots.txt yazmayı çok kolaylaştırır.

KombinasyonURLDurum
Kadın elbise + kırmızı/kadin-elbise/kirmizi/Dizine açık, self-canonical
Erkek koşu ayakkabısı + Nike/erkek-kosu-ayakkabisi/nike/Dizine açık, self-canonical
Kırmızı + M beden/kadin-elbise/kirmizi/?beden=mrobots.txt ile kapalı
Kırmızı + fiyata göre sıralı/kadin-elbise/kirmizi/?sirala=fiyat-artanrobots.txt ile kapalı

Temiz URL'lerde değer sırası sabit olmalı. /nike/erkek-kosu-ayakkabisi/ ve /erkek-kosu-ayakkabisi/nike/ aynı anda çalışmamalı; biri diğerine 301 ile gitmeli.

Parametre sırasını normalleştirmek

Parametreli URL'lerde de aynı sorun var: ?renk=kirmizi&beden=m ile ?beden=m&renk=kirmizi aynı sayfadır. Kullanıcı hangi sırayla tıklarsa tıklasın, sistem tek bir sıralı forma yönlendirmelidir. Basit bir PHP örneği:

normalize.php
<?php
// Filtre parametrelerini sabit sıraya dizer, küçük harfe çevirir, boşları atar
function normalizeQuery(array $query): array
{
    $sira = ['marka', 'renk', 'beden', 'fiyat', 'sirala'];
    $temiz = [];
    foreach ($sira as $anahtar) {
        if (!isset($query[$anahtar]) || !is_string($query[$anahtar]) || $query[$anahtar] === '') {
            continue;
        }
        $degerler = array_unique(array_map(
            fn($d) => mb_strtolower(trim($d)),
            explode(',', $query[$anahtar])
        ));
        sort($degerler);
        $temiz[$anahtar] = implode(',', $degerler);
    }
    return $temiz; // bilinmeyen parametreler (utm vb.) bilerek atılır
}

$istenen = $_GET;
$normal = normalizeQuery($istenen);

// Gelen sorgu normal formdan farklıysa 301 ile tek adrese yönlendir
if (http_build_query($normal) !== http_build_query($istenen)) {
    $yol = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $hedef = $yol . ($normal ? '?' . http_build_query($normal) : '');
    header('Location: ' . $hedef, true, 301);
    exit;
}

Burada utm parametrelerini de attım. Kampanya takibi bozulmasın istiyorsanız o parametreleri yönlendirmeden önce analitik tarafında okumanız ya da istisna listesine eklemeniz gerekir.

Crawl tuzaklarını önlemek

Googlebot linkleri takip eder; butonlara tıklamaz, form göndermez. Crawl tuzağının kaynağı neredeyse her zaman filtre değerlerinin düz <a href> linki olarak sunulmasıdır. Kural şu: dizine açık kombinasyonlar gerçek link, geri kalanı değil.

  • Dizine açık filtreler (renk, marka) <a href="/kadin-elbise/kirmizi/"> şeklinde link olsun.
  • Beden, fiyat, sıralama gibi seçimler form elemanı ya da JavaScript ile URL'yi güncelleyen butonlar olsun.
  • Buna rağmen parametreli URL'ler bir yerden sızacaktır (paylaşılan linkler, eski şablonlar). robots.txt bunun güvenlik ağıdır.
robots.txt
User-agent: *
# Sıralama, fiyat, beden ve görünüm parametreleri taranmasın
Disallow: /*?*sirala=
Disallow: /*?*fiyat=
Disallow: /*?*beden=
Disallow: /*?*gorunum=

İç linklerdeki nofollow bu iş için güvenilir değildir; Google onu da ipucu olarak değerlendirir. Taramayı gerçekten kesmek istiyorsanız ya linki kaldırın ya da robots.txt kullanın. Kuralı yayına almadan önce dizine açık kalması gereken temiz URL'leri de mutlaka test edin; joker karakterler sandığınızdan geniş eşleşebilir.

Canonical kuralları

  • Dizine açık filtre sayfası kendini canonical gösterir. Ana kategoriye canonical vermek, sayfayı açıp aynı anda kapatmak demektir.
  • Parametre sırası farkı, utm ekleri gibi gerçek kopyalar normal forma 301 ile ya da canonical ile toplanır.
  • Üç filtreli bir kombinasyonu en yakın açık sayfaya canonical etmek yaygın bir yöntemdir, ama içerik farklı olduğu için Google bunu sık sık yok sayar. Asıl çözüm bu URL'lerin keşfedilmemesidir.
  • robots.txt ile engellenen URL'deki canonical görülmez. Bir URL için ya birini ya diğerini seçin.

Canonical, noindex ve robots.txt arasındaki farkı ve hatalı kombinasyonları canonical, noindex ve robots.txt yazısında ayrıca ele aldım.

Karar tablosu

Filtre tipiTalepDizine açık mı?Link türüTarama
MarkaGenelde yüksekEvet (yeterli ürün varsa)<a href>, temiz URLAçık
RenkKategoriye göre değişirTalep varsa evet<a href>, temiz URLAçık
Cinsiyet, yaş grubuGenelde yüksekEvet, çoğu zaman alt kategori olarak<a href>Açık
Malzeme, stilDeğişkenDoğrulanırsa evet<a href>Açık
Marka + tür (beyaz liste)DoğrulanmışEvet<a href>Açık
Beden, numaraÇok düşükHayırForm / JSrobots.txt
Fiyat aralığıYokHayırForm / JSrobots.txt
Sıralama, görünümYokHayırForm / JSrobots.txt
Üç ve üzeri filtreYokHayırLink verilmezGerekirse noindex
Sonuçsuz kombinasyonYokHayırLink verilmez404

Özetle

Filtre yönetimi aslında bir liste yönetimidir: hangi grup ve hangi çiftler dizine açık, bunu talebe göre belirleyip kodda uygularsınız. Açık olanlar temiz URL, gerçek link ve self-canonical alır. Kapalı olanlar parametreyle, form veya JavaScript üzerinden çalışır ve robots.txt ile taramadan uzak tutulur. Parametre sırası tek forma indirgenir, sonuçsuz sayfalar 404 döner.

Filtre sayfaları açıldıktan sonra onlara başlık, kısa bir giriş metni ve alt kategori linkleri eklemek de ayrı bir iş; içerik tarafını e-ticaret kategori sayfaları yazısında anlattım. Listeyi yılda bir değil, sezon değişimlerinde ve Search Console'da yeni sorgu kalıpları gördükçe güncelliyorum.

Comments / questions

If you have a question about any topic or wish to contact me: Telegram or send an email to [email protected] Thanks!

Related pages