Canonical, noindex ve robots.txt ne zaman kullanılır? (karar tablosu)

Teknik denetimlerde en sık gördüğüm hata bu üç aracın birbirinin yerine kullanılması. Bir sayfa dizinden çıksın diye robots.txt'e ekleniyor, filtre sayfalarına aynı anda hem canonical hem noindex veriliyor, sayfalama sayfaları birinci sayfaya canonical ediliyor. Sonra Search Console'da kimsenin açıklayamadığı durumlar birikiyor.

Sorun araçlarda değil. Her biri farklı bir aşamada çalışıyor: biri taramayı, biri dizine eklemeyi, biri sinyal birleştirmeyi kontrol ediyor. Hangisinin ne yaptığını netleştirmeden doğru seçim yapılamıyor.

Üç araç, üç ayrı aşama

Google bir URL ile kabaca üç adımda uğraşır: taramak (crawl), işleyip dizine eklemek (index) ve aynı içeriğe sahip URL'ler arasından bir temsilci seçmek (canonicalization). Bu üç araç zincirin farklı halkalarına dokunur. Karışıklığın neredeyse tamamı bu halkaları birbirine karıştırmaktan çıkıyor.

robots.txt: taramayı kontrol eder

robots.txt Googlebot'a "bu URL'yi isteme" der, o kadar. Dizine eklemeyi engellemez. Engellenen bir URL'ye site içinden ya da dışarıdan link varsa Google o URL'yi içeriğini hiç görmeden dizine ekleyebilir; sonuçlarda açıklaması olmayan çıplak bir satır olarak görünür. Search Console'da bunun karşılığı "robots.txt tarafından engellenmesine rağmen dizine eklendi" (Indexed, though blocked by robots.txt) durumudur.

robots.txt'in asıl işi tarama kaynağını korumaktır: sonsuz parametre kombinasyonları, sıralama URL'leri, sepete ekleme linkleri gibi Googlebot'un vakit harcamasını istemediğiniz alanlar. Bir de şunu unutmamak lazım: dosya herkese açıktır. Gizli kalmasını istediğiniz bir dizini robots.txt'e yazmak, onu herkese ilan etmek demektir.

noindex: dizine eklemeyi kontrol eder

noindex bir direktiftir (directive), yani Google buna uyar. Sayfayı tarar, noindex'i görür ve sayfayı dizinden çıkarır ya da hiç eklemez. İki şekilde verilir: HTML içinde meta robots etiketiyle veya HTTP yanıtında X-Robots-Tag başlığıyla.

<!-- HTML sayfalar için -->
<meta name="robots" content="noindex">
HTTP/1.1 200 OK
X-Robots-Tag: noindex

Buradaki kritik nokta şu: Google noindex'i görebilmek için sayfayı taramak zorunda. Tarama engellenmişse etiket hiç okunmaz.

canonical: birleştirmeyi önerir

rel="canonical" bir ipucudur (hint), direktif değildir. "Bu içeriğin tercih ettiğim adresi şu" dersiniz; Google bunu iç linkler, site haritası, yönlendirmeler, HTTPS ve içerik benzerliği gibi diğer sinyallerle birlikte tartar ve kendi seçimini yapar. Seçtiği adresi URL denetimi aracında "Google tarafından seçilen standart URL" (Google-selected canonical) alanında görürsünüz.

Canonical'ın asıl değeri sinyalleri birleştirmesidir. Kopya URL'lere gelen linkler ve diğer sinyaller tercih edilen adreste toplanır. noindex'te böyle bir birleştirme yoktur; sayfa sadece dizinden çıkar, değeri bir yere aktarılmaz.

Yanlış kombinasyonlar neden çalışmaz

noindex ile robots.txt engelini birlikte kullanmak

En yaygın hata bu. Sayfaya noindex eklenir, "garanti olsun" diye robots.txt'te de engellenir. Googlebot sayfayı tarayamadığı için noindex'i hiç görmez. Sayfa zaten dizindeyse orada kalabilir, dışarıdan link alıyorsa içeriksiz haliyle dizine bile girebilir.

Doğru sıra şu: önce noindex ekleyin ve robots.txt'i açık bırakın. Google sayfaları yeniden taradıkça dizinden düşerler. Düştüklerini Search Console'da gördükten sonra, tarama maliyeti gerçekten önemliyse robots.txt engelini ekleyebilirsiniz.

Noindex'li bir sayfaya canonical vermek

A sayfası B'yi canonical gösteriyor, B'de ise noindex var. Google'a aynı anda "sinyalleri B'de topla" ve "B'yi dizine ekleme" diyorsunuz. Bu çelişkili bir sinyal. Google'ın hangisini esas alacağı belirsiz ve en iyi ihtimalle iki sayfa da düzgün sıralanmaz.

Aynı sorun tek bir sayfada da çıkar: başka bir URL'yi gösteren canonical ile noindex aynı sayfada. Google'ın kendi belgelerinde de kopya içeriği birleştirmek için noindex kullanılmaması öneriliyor. Benim kuralım basit: canonical hedefi her zaman 200 dönen, dizine eklenebilir ve kendini canonical gösteren bir sayfa olmalı.

Sayfalama sayfalarını birinci sayfaya canonical etmek

/kategori?sayfa=2 sayfasının canonical'ını /kategori yapmak düzenli görünür ama yanlıştır. İkinci sayfa birinci sayfanın kopyası değil, başka ürünler listeliyor. Google böyle bir canonical'ı büyük ihtimalle yok sayar; saymazsa daha kötüsü olur ve derindeki ürünlere giden yol zayıflar. Her sayfalama sayfası kendini canonical göstermeli. rel=next/prev ise Google tarafından dizine ekleme için kullanılmıyor; eklemenin zararı yok ama bir işe de yaramıyor.

Robots.txt ile engellenmiş sayfada canonical'a güvenmek

Parametreli kopyaları robots.txt ile engellerseniz Google o sayfalardaki canonical etiketini de göremez. Hem engelleyip hem canonical ile toplamaya çalışmak ikisinin de etkisini boşa çıkarır. Birini seçmek gerekiyor: sinyal birleştirmek istiyorsanız canonical ve açık tarama, tarama maliyetini kesmek istiyorsanız robots.txt.

Karar tablosu

SenaryoDoğru araçNot
UTM, oturum, takip parametreli kopyalarcanonical (temiz URL'ye)İç linklerde bu parametreleri hiç kullanmayın
Site içi arama sonuçlarınoindex, dizinden düşünce robots.txtHiç dizine girmemişse doğrudan robots.txt yeterli
İnce etiket (tag) sayfalarınoindex veya tamamen kaldırmaDeğerli olanları içerikle güçlendirin
Staging / test sitesiHTTP şifre korumasırobots.txt tek başına yetmez
Yazdırma sürümlericanonical (asıl sayfaya)Mümkünse ayrı URL yerine print CSS
PDF dosyalarıX-Robots-Tag: noindex veya Link başlığında canonicalHTML karşılığı varsa canonical onu göstersin
Yönetim paneli, sepet, hesap sayfalarırobots.txt + kimlik doğrulamaGüvenliği robots.txt'e bırakmayın
Filtre (faceted) kombinasyonlarıDeğerliler dizine açık, gerisi robots.txt veya noindexKural setine aşağıda değindim
SayfalamaHer sayfa kendini canonical göstersinTaranabilir <a href> linkleri şart
Sıralama parametreleri (?sirala=)robots.txtİçerik aynı, sadece sıra farklı

Özel durumlar

Staging siteleri

Test ortamı için en sağlam yol HTTP kimlik doğrulamasıdır. Google şifreli bir sayfayı tarayamaz, içerik de dizine giremez. Sadece noindex'e güvenmek riskli, çünkü canlıya geçişte o noindex'in kopyalanıp canlı siteye taşındığı vakalar çok yaygın. Canlıya alma kontrol listemde ilk maddelerden biri kaynak koddaki meta robots ve sunucunun gönderdiği X-Robots-Tag başlığıdır.

PDF ve HTML olmayan dosyalar

PDF'e meta etiket koyamazsınız, bu yüzden HTTP başlığı kullanılır. Apache ve mod_headers açık bir sunucuda .htaccess ile şöyle yapılabilir:

# Tüm PDF dosyalarını dizin dışında tut
<FilesMatch "\.pdf$">
  Header set X-Robots-Tag "noindex"
</FilesMatch>

# Aynı içeriğin HTML sürümü varsa canonical'ı ona ver
<Files "urun-katalogu.pdf">
  Header set Link "<https://www.ornek.com/urun-katalogu>; rel=\"canonical\""
</Files>

İkisini aynı dosyada birlikte kullanmayın; yukarıda anlattığım çelişkinin aynısı olur. Katalog PDF'i HTML sayfanın kopyasıysa canonical, tamamen dizin dışında kalması gereken bir belgeyse noindex.

Filtreli kategori sayfaları

Filtreler bu üç aracın en çok karıştırıldığı alan. Kısa kural: gerçek arama talebi olan kombinasyonlar temiz URL ile dizine açık kalır, beden, fiyat ve sıralama gibi parametreler taramadan uzak tutulur. Hangi kombinasyonun dizine girmesi gerektiğini filtreli kategori sayfaları yazısında ayrıntılı bir kural setiyle anlattım.

Uygulamadan önce test edin

robots.txt'te yazdığınız joker karakterli bir kural, dizine açık kalmasını istediğiniz sayfaları da kolayca engelleyebilir. Değişikliği yayına almadan önce kritik URL'lerinizi robots.txt test aracı ile deneyin: ana kategoriler, ürün sayfaları, blog yazıları ve engellemek istediğiniz parametreli örnekler. Yayından sonra da Search Console'da URL denetimiyle birkaç örnek sayfayı kontrol edin; hem taramaya izin verilip verilmediğini hem de Google'ın seçtiği standart URL'yi orada görürsünüz.

Google'ın bu konudaki resmi belgeleri de kısa ve net: robots.txt'e giriş ve noindex ile dizine eklemeyi engelleme. Bir kararsızlık yaşadığınızda ilk bakacağınız yer bunlar olsun.

Özetle

  • Dizinden çıkarmak istediğim sayfa taranabiliyor mu? noindex ancak öyle görülür.
  • robots.txt'i dizinden çıkarma aracı olarak kullanmıyorum; yalnızca taramayı kısıyorum.
  • Canonical hedefleri 200 dönüyor, noindex taşımıyor ve kendini canonical gösteriyor.
  • Aynı sayfada canonical (başka URL'ye) ile noindex birlikte yok.
  • Sayfalama sayfaları kendini canonical gösteriyor, birinci sayfaya değil.
  • Staging şifreli; canlıda unutulmuş noindex veya X-Robots-Tag yok.
  • PDF gibi dosyalar için HTTP başlığı kullanıyorum.
  • Her robots.txt değişikliğini yayından önce örnek URL'lerle test ediyorum.

Kısacası: tarama maliyeti sorunuysa robots.txt, dizinde olmaması gereken sayfa varsa noindex, aynı içeriğin birden fazla adresi varsa canonical. Bir sayfaya iki araç birden uyguluyorsanız, önce bunların birbirini boşa çıkarıp çıkarmadığını kontrol edin.

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