Robots.txt'e Disallow yazmak sayfayı Google'dan gizler; bu inanç yaygın ama yanıltıcıdır. Disallow yalnızca taramayı engeller; Google bir URL'yi başka bir sayfadaki linkten öğrenirse, o sayfa arama sonuçlarında indekssiz ama görünür biçimde kalabilir. Direktifin sınırını anlamadan kullanmak iki farklı hataya açıktır: gizlemek istediğiniz sayfa görünür kalır ya da indekslenmesini istediğiniz sayfa yanlışlıkla tarama dışı kalır.
Disallow direktifinin gerçek işlevi tarama önceliklerini yönetmektir. Değerli olmayan sayfalara bot zamanı ve kaynağı harcanmasın diye yazılır; bir güvenlik veya gizlilik katmanı değildir. Bu ayrım, hangi sayfaları Disallow ile engellemeniz gerektiğini ve hangilerinde farklı bir yönteme başvurmanız gerektiğini belirler.
Güvenlik mekanizması değil, tarama yönetim aracıdır.
User-agent bloğu ve prefix eşleşmesi
Her Disallow kuralı bir User-agent bloğuna aittir. User-agent: * tüm botları kapsar; User-agent: Googlebot yalnızca Google tarayıcısını. Aynı bot için birden fazla kural yazılabilir, ancak birden fazla User-agent aynı bloğa yazılamaz; her biri ayrı blok olarak tanımlanır.
Eşleşme prefix (önek) mantığıyla çalışır. Disallow: /yonetim/ bu dizin altındaki her URL'yi engeller: /yonetim/kullanicilar, /yonetim/ayarlar, dizin listesinin kendisi. Yalnızca tek bir sayfayı engellemek istiyorsanız tam path yazmanız gerekir: Disallow: /yonetim/giris.php. Bu iki yazım biçimi arasındaki farkı karıştıran yapılandırmalar çok yaygındır.
User-agent: *
Disallow: /yonetim/
Disallow: /arama?q=
Disallow: /sepet/
User-agent: Googlebot
Disallow: /dahili-raporlar/
Boş bir Disallow satırı (Disallow:) hiçbir şeyi engellemez; tüm siteye erişimi açık bırakır. Disallow: / ise tüm siteyi engeller. Bu iki yazım arasındaki tek karakter farkı, dikkat gerektiren bir sözdizimi detayıdır.
Hangi sayfalar Disallow adayıdır
Disallow, içeriği değerli olmayan ve taranmasının bir amacı bulunmayan sayfalar için kullanılır. Bu kategorileri robots.txt dosyanıza eklerken wildcard kullanımı ve öncelik sırası açısından dikkatli olmak gerekir.
- Admin panelleri:
/wp-admin/,/admin/,/yonetim/. Taranmasının amacı yoktur; yalnızca tarama bütçesini boşa harcar. - Parametreli URL'ler:
?siralama=,?filtre=,?sayfa=. Aynı içeriği farklı kombinasyonlarda sunan bu URL'ler taranırsa duplicate içerik ve bütçe israfı birlikte çıkar. - Oturum ve sepet URL'leri:
/sepet/,/odeme/,/hesabim/. Kullanıcıya özgü, değişken içerikli bu sayfalar zaten indekslenmez; taranmaları da gereksizdir. - Geliştirme ve staging alanları:
/test/,/staging/. Geliştirme sürecindeki içeriğin indekslenmesi tutarsız sonuçlar üretir. - Teknik sistem dosyaları:
/cgi-bin/,/.git/, uygulama içi API endpoint'leri.
Tarama bütçesi küçük siteler için genellikle sorun değildir. On binlerce URL'ye sahip e-ticaret kataloglarında veya yüksek tempolu haber sitelerinde Googlebot sınırlı kaynağını öncelikli sayfalara ayırır; Disallow bu yönlendirmenin temel aracıdır.
Faceted navigation, yani filtreleme kombinasyonları, bu açıdan özellikle dikkat ister. Renk, beden, fiyat aralığı gibi filtreler çapraz uygulandığında aynı ürün setini gösteren binlerce URL türeyebilir. Disallow: /*?filtre= gibi genel bir parametre kuralı bu URL'lerin taranmasını engeller; ancak hangi parametre değerlerinin gerçekten özgün içerik sunduğunu önce analiz etmek gerekir. Yanlış genelleştirme, taranması değerli kategori veya ürün sayfalarını da kapsama dahil edebilir.
Disallow yazılmaması gereken durumlar
Bunun tersi de önemli: Disallow'u her şeye uygulamaya kalkışmak, indekslenmesi gereken sayfaları tarama dışı bırakır.
CSS ve JavaScript dosyaları engellenirse Googlebot sayfa içeriğini tam olarak işleyemez. Render süreci bu dosyalara bağlıdır; tarama engeli indexability sorununa dönüşür. Eski robots.txt belgelerinde Disallow: /wp-content/ gibi geniş dizin kuralları bu yüzden sorun yarattı. Görsel dosyaları da engellemeniz gereken bir senaryo oldukça nadirdir; Google Images görünürlüğünü kapatan bu seçim genellikle kasıtsız yapılır.
İçeriği gizlemek amacıyla Disallow kullanmak da tutarsız sonuç verir. Sayfa dışarıdan linkleniyor veya site haritasına eklenmiş durumdaysa Google URL'yi bilir ve "indeks olmadan ama gördüm" statüsüyle kayıt altına alır. Gerçek gizlilik için sunucu katmanında erişim kısıtlaması uygulanmalıdır; robots.txt buna uygun bir araç değildir.
Wildcard kullanımı: * ve $ karakterleri
Robots.txt'in resmi standardında (RFC 9309) yalnızca iki özel karakter tanımlıdır: * ve $. Google her ikisini de destekler; Bing de genel olarak uygular, ancak bazı eski botlar yalnızca literal eşleşme yapar.
* sıfır veya daha fazla karakterin yerini tutar. Disallow: /arama* hem /arama hem /arama?q=seo hem de /arama/gelismis gibi tüm türevleri engeller. URL parametrelerini wildcard ile yakalamak, her parametre kombinasyonunu ayrı satır yazmaktan çok daha sürdürülebilirdir.
# Tüm arama parametrelerini engelle
Disallow: /arama*
# Belirli bir uzantıyı tüm dizinlerde engelle
Disallow: /*.pdf$
# İz parametrelerini engelle
Disallow: /*?utm_
$ ise satır sonunu temsil eder. Disallow: /*.pdf$ yalnızca .pdf ile biten URL'leri engeller; /rehber/pdf-ornekleri gibi .pdf içeren ama bu uzantıyla bitmeyen URL'leri kapsamaz. Bu ince fark, uzantı filtrelemesinde sık gözden kaçan bir davranıştır.
Çakışma beklenmedik davranışa neden olur.
Wildcard kuralları birleştirilebilir; ancak çakışan kurallar olduğunda Google daha spesifik (daha uzun path) kuralı uygular. Disallow: /urunler/ ile Allow: /urunler/kampanya/ birlikte yazılırsa kampanya dizini erişilebilir kalır.
Disallow mu, noindex mi: hangisi ne zaman
Disallow taramayı engeller; noindex indekslemeyi. İkisi farklı katmanlarda çalışır ve birbirinin yerine geçemez.
Bir sayfaya Disallow uygularsanız Googlebot sayfayı taramaz ve dolayısıyla noindex etiketini okuyamaz. Sayfanın dışarıdan linki varsa URL Google'ın veri tabanına girer ama içerik işlenmez. Pratikte bu durum "URL biliniyor, içerik belirsiz" görünümüyle arama sonuçlarında anlamsız bir listeye yol açabilir.
İki yaklaşımın doğru kullanım senaryoları şöyle ayrılır:
| Hedef | Doğru yöntem |
|---|---|
| Tarama bütçesini koruma | Disallow |
| Sayfayı indekslenmeden çıkarma | noindex (meta robots veya HTTP header) |
| Hem taramayı hem indekslemeyi engelleme | Önce Disallow kaldır, noindex ekle, tarama gerçekleşsin |
| İçeriği kullanıcılardan gizleme | Sunucu katmanı erişim kontrolü |
Özellikle "ikisi birden yazarsam daha güvenli olur" yaklaşımı geri teper: Disallow aktifken noindex etiketinin okunması imkansızdır. Bir sayfayı kalıcı olarak arama dışında bırakmak istiyorsanız önce Disallow'u kaldırmanız, Googlebot'un sayfayı taramasına izin vermeniz ve noindex etiketini okumasını beklemeniz gerekir.
Pratikte en çok karıştırılan senaryo şudur: sayfa bir dönem yayındayken indekslendi, sonra Disallow eklendi ama Google veri tabanında URL kaydı kalmaya devam etti. Bu durumda Disallow'u kaldırıp noindex eklemek ve Search Console üzerinden "kaldırma isteği" göndermek süreci hızlandırır. Aksi hâlde Google URL'yi bildiği için kaydı tutmaya devam eder; Disallow yalnızca yeni taramaları engeller, eski kaydı silmez.
Kuralları test etme ve doğrulama
Robots.txt dosyası çalışıyor mu diye test etmeden yayına almanın maliyeti yüksektir: yanlış yazılmış tek bir kural tüm siteyi tarama dışı bırakabilir. Google Search Console'un "robots.txt tester" aracı, belirli bir bot için belirli bir URL'nin engellenip engellenmediğini URL düzeyinde kontrol eder. Bu araç hâlâ geçerlidir; ancak görsel arayüzde değil, eski Search Console sürümünün URL test menüsünde bulunur.
Yaygın test prosedürü iki adımdan oluşur: önce kurala uygun robots.txt oluşturun, ardından URL'yi uygulamadan önce sözdizimini doğrulayın. Kural yayına girdikten sonra Google'ın uygulaması anlık değildir; önbellekleme süresi saatlerden birkaç güne uzayabilir. Acil bir engelleme kaldırma için Search Console'dan "yeniden tarama iste" göndermek süreci kısaltır.
Robots.txt dosyasını Google önbelleğe alır ve bu önbelleği her tarama isteğinde değil, ayrı bir tarama döngüsünde günceller. Yani dosyada değişiklik yaptıktan sonra Googlebot eski kuralları uygulamaya devam edebilir. Kritik bir kural değişikliği yaptığınızda Search Console'un "robots.txt yenile" özelliğini kullanmak bekleme süresini kısaltır. Küçük bir güncelleme için bu adımı atlamak büyük bir sorun yaratmaz; Googlebot genellikle birkaç saat içinde güncel versiyonu çeker.
Disallow kurallarını site haritanızdaki URL'lerle çapraz kontrol edin. Sitemap'te listelenen bir URL'yi aynı anda Disallow ile engellemek çelişkili bir sinyal gönderir; Google bu durumu hata olarak değil bir öncelik belirsizliği olarak ele alır, ancak tarama davranışı tutarsızlaşabilir. Sitemap yalnızca taranmasını istediğiniz URL'leri içermeli, Disallow ise bunların dışındakileri kapsamalıdır.
Bir diğer yaygın hata, aynı dizin için hem Allow hem Disallow kuralı yazıp öncelik sırasını karıştırmaktır. Google daha spesifik kuralı uygular; eşit uzunluktaki kurallarda Allow öncelik alır. Ama bu davranışın tüm botlar için aynı olduğunu varsaymak doğru değildir; bazı botlar sıradaki kuralı uygular. Kritik Allow/Disallow çakışmalarını URL düzeyinde test ederek doğrulamak standart bir prosedür olmalıdır.
Robots.txt küçük bir dosyadır; hataları büyük etki yaratır. Googlebot'un farklı tiplerinin hangi User-agent değerini kullandığını bilmeden yazılan kurallar hedefsiz çalışır; Googlebot-Image veya Googlebot-News gibi özel botları ayrı bloklarla yönetmek, genel * kuralının kapsamadığı durumları ortadan kaldırır.