robots.txt izin veriyor ama sunucunuz engelliyor
robots.txt bir beyandır, sunucunuzun yanıtı ise gerçektir. İkisi çeliştiğinde markanız yapay zekâ cevaplarından sessizce düşer — ve hiçbir hata mesajı almazsınız.
Yapay zekâ tarayıcılarının sitenize erişip erişemediği tek bir soru değil, iki ayrı sorudur. Bu ikisini karıştırmak, Türkiye'deki AI görünürlük araçlarının neredeyse tamamının yaptığı hatadır ve site sahiplerini yanlış bir güven duygusuna sürükler.
Beyan: robots.txt dosyanız bu user-agent'a izin veriyor mu? Gerçek: O user-agent ile atılan gerçek HTTP isteği ne dönüyor?
İlki bir niyet açıklamasıdır. İkincisi ne olduğudur. Ve bu ikisi şaşırtıcı sıklıkla birbiriyle çelişir.
robots.txt bir kilit değil, bir ricadır
robots.txt sunucu yapılandırmasının parçası değildir. Hiçbir isteği fiziksel olarak durduramaz. Yaptığı tek şey, dosyayı okumayı kabul eden tarayıcılara ne yapmalarını istediğinizi söylemektir. Uyum tamamen botun kendi beyanına kalmıştır.
Bunun tersi de doğrudur ve asıl sorun budur: robots.txt bir isteği geçirmeyi de garanti edemez. Dosyanız Allow: / dese bile, önündeki güvenlik katmanı isteği robots.txt'ten tamamen habersiz biçimde reddedebilir.
Çelişkinin kaynağı: birbirinden habersiz iki katman
Tipik bir kurulumda bir istek şu sırayla ilerler — ve robots.txt bu zincirin en sonunda okunur:
robots.txt bu zincirin en sonunda okunur — hem de yalnızca botun kendisi tarafından. Oysa engelleme zincirin en başında gerçekleşir. Güvenlik duvarı, robots.txt'inizde ne yazdığını bilmez ve umursamaz.
Sonuç: site sahibi robots.txt'e Allow: / yazar, bir kontrol aracına girer, "13 bot da erişebiliyor" yazısını görür ve konuyu kapatır. Gerçekte ise Cloudflare bot koruması GPTBot'u aylardır 403 ile geri çeviriyordur.
Bu neden fark edilmez
Üç sebepten:
- Hata mesajı üretmez. Ziyaretçileriniz siteyi normal görür, analitik normaldir,
Google sıralamanız değişmez. Yalnızca AI cevaplarında yoksunuzdur ve bunu ölçmüyorsunuzdur.
- Sunucu günlüklerinde arama yapmak gerekir. 403 dönen bot istekleri, milyonlarca
satırlık erişim günlüğünde user-agent'a göre filtrelenmeden görünmez.
- Araçlar bakmıyor. Beyan katmanını okumak kolay ve ucuzdur: tek bir dosya indirip
ayrıştırırsınız. Gerçek katmanı ölçmek için her bot için ayrı istek atmak gerekir.
Türkiye'nin en bilinen AI tarama denetimi araçlarından biri olan Seobaz, bu sınırı kendi sayfasında açıkça belirtiyor ve soruna "katman karışıklığı" adını veriyor: araç "robots.txt katmanını ölçer, sunucu seviyesindeki engeli göstermez." Bu dürüst bir ifade — ama ölçülmeyen bir şeyin var olmadığı anlamına gelmez.
Referans isteği olmadan hüküm verilemez
Gerçek katmanı ölçerken kritik bir tuzak var: bot 403 alıyor diye hemen "bot engelleniyor" demek yanlıştır. Site zaten herkese kapalı olabilir; sunucu çökmüş, IP adresiniz kara listeye girmiş ya da coğrafi kısıtlama devrede olabilir.
Bu yüzden her ölçümde normal bir tarayıcı user-agent'ı ile referans isteği atılmalıdır:
| Referans (tarayıcı) | Bot | Sonuç |
|---|---|---|
| 200 | 200 | Erişim açık |
| 200 | 403 | Bota özel engel — asıl bulgu bu |
| 403 | 403 | Site zaten erişilemez, bot hükmü verilemez |
Üçüncü satır önemlidir. Referans kontrolü olmayan bir araç, kendi IP'si engellenmiş bir sitede "13 botun tamamı engellendi" diye alarm verir. Bu yanlış alarm, aracın tüm bulgularını şüpheli hale getirir.
Engelin imzasını tanımak
Bir 403 yanıtı tek başına sebebi söylemez. Yanıt başlıkları ve gövdesi genellikle söyler:
- Cloudflare:
cf-rayvecf-mitigatedbaşlıkları, gövdede "Just a moment" ya da
"Enable JavaScript and cookies to continue"
- Sucuri:
x-sucuri-idbaşlığı, "Sucuri WebSite Firewall" - Imperva / Incapsula:
x-iinfobaşlığı, "Incapsula incident ID" - AWS WAF:
x-amzn-waf-actionbaşlığı - DataDome:
x-datadomebaşlığı - Wordfence: "Your access to this site has been limited"
Sağlayıcıyı bilmek çözümü doğrudan verir: düzeltme, ilgili panelde AI tarayıcılarına istisna tanımlamaktan ibarettir ve genellikle tek bir kuralla biter.
429 yanıtına dikkat: kendi ölçümünüz sonucu bozabilir
Bir uyarı da ölçümü yapan tarafa: on üç botu aynı anda denerseniz hedef sunucu hız sınırı uygulayıp 429 döndürebilir. O yanıtı "WAF engelliyor" diye raporlamak yanlış alarmdır ve ölçümün kendisi ölçülen şeyi bozmuş olur.
Doğru davranış, eşzamanlılığı düşük tutmak ve 429'u kesin hüküm saymamaktır. Bilinmeyen bir sonucu "engellendi" diye kaydetmektense "ölçülemedi" demek her zaman daha doğrudur.
Kendiniz nasıl kontrol edersiniz
Araç kullanmadan, terminalden iki komutla. Önce normal bir tarayıcı gibi isteyin:
curl -s -o /dev/null -w "%{http_code}\n" \
-A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" \
https://siteniz.com/
Sonra aynı sayfayı bir AI botu gibi isteyin:
curl -s -o /dev/null -w "%{http_code}\n" \
-A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; \
GPTBot/1.2; +https://openai.com/gptbot" \
https://siteniz.com/
İlki 200, ikincisi 403 dönüyorsa bulgu kesindir. İkisi de 403 dönüyorsa sorun bota özel değildir; siteniz o IP'den zaten erişilemiyordur ve önce bunu çözmeniz gerekir.
Sağlayıcıyı öğrenmek için başlıklara bakın:
curl -sI -A "GPTBot/1.2" https://siteniz.com/ | grep -iE "server|cf-ray|cf-mitigated|x-sucuri|x-iinfo"
Bu komutu on üç bot için tek tek çalıştırmak yerine hepsini birden ölçen bir araç kullanabilirsiniz; mantık aynıdır, fark yalnızca tekrardadır.
Sunucu günlüklerinde aramak
Engellemenin ne zamandır sürdüğünü öğrenmek isterseniz erişim günlüklerinde user-agent'a göre filtreleyin:
grep -iE "GPTBot|ClaudeBot|PerplexityBot|OAI-SearchBot" access.log \
| awk '{print $9}' | sort | uniq -c | sort -rn
Çıktıda 403 sayısı 200'den fazlaysa engelleme aylardır sürüyor olabilir. Bu, düzeltmenin aciliyetini de gösterir: geçen her ay, modellerin sizi öğrenmediği bir aydır.
Cloudflare kullanıyorsanız günlüklere gerek yok: panelin Security → Events bölümünde user-agent'a göre filtreleyip hangi kuralın tetiklendiğini doğrudan görebilirsiniz.
Sağlayıcıya göre çözüm
Cloudflare. İki ayrı yerde ayar olabilir. Birincisi Security → Bots altındaki AI tarayıcı seçenekleri; ikincisi kendi yazdığınız WAF kuralları. AI botlarına izin vermek için bir Skip kuralı yazmak en temizidir:
(http.user_agent contains "GPTBot") or
(http.user_agent contains "OAI-SearchBot") or
(http.user_agent contains "ClaudeBot") or
(http.user_agent contains "PerplexityBot")
→ Skip: All remaining custom rules, Bot Fight Mode
Sucuri. Firewall panelinde Access Control → Whitelist bölümünden user-agent tabanlı istisna tanımlanır.
Paylaşımlı hosting / cPanel. ModSecurity kural setleri sık sık AI botlarını yakalar. Barındırıcınızdan ilgili kural kimliğini devre dışı bıraktırmanız gerekebilir; hangi kuralın tetiklendiği ModSecurity denetim günlüğünde yazar.
Kendi sunucunuz. nginx ya da Apache yapılandırmasında eski bir bot engelleme bloğu kalmış olabilir. grep -ri "user_agent" /etc/nginx/ genellikle bulur.
Düzelttikten sonra doğrulayın
Kural yazmak yetmez; değişikliğin gerçekten uygulandığını aynı curl komutuyla teyit edin. Cloudflare gibi katmanlarda kural yayılımı birkaç dakika sürebilir.
Doğrulama sırası:
- Bot user-agent'ı ile istek atın — 200 dönmeli
- Yanıt gövdesinin gerçek içerik olduğunu kontrol edin, boş sayfa ya da challenge değil
- Birkaç farklı sayfada tekrarlayın; kural yalnızca ana sayfaya uygulanmış olabilir
- Bir hafta sonra tekrar ölçün — bazı güvenlik ürünleri kuralları otomatik geri alır
Ne kadar sürede etkisi görünür
Kanala göre değişir. Arama yüzlü botlar (OAI-SearchBot, PerplexityBot, Claude-SearchBot) engeli kalkar kalkmaz yeniden taramaya başlar; sitenizin cevaplarda kaynak olarak görünmesi günler içinde mümkündür.
Eğitim botlarında (GPTBot, ClaudeBot, CCBot) etki modelin bir sonraki eğitim turuna bağlıdır: aylar. Bu yüzden erişimi açmak ne kadar geç kalınırsa o kadar pahalıya mal olur — kaybedilen zaman geri alınamaz.
Engellemek bazen doğru karardır
Bu yazı "her botu açın" demiyor. İçeriğiniz telife tabi, ücretli ya da özel ise eğitim botlarını engellemek tamamen meşru bir tercihtir. Haber siteleri ve yayıncılar bunu bilinçli olarak yapıyor.
Sorun engellemek değil, bilmeden engellemek. Kararın sizin olması için önce durumun ne olduğunu görmeniz gerekir. Çoğu site sahibi, robots.txt'te Allow: / yazdığı için erişimin açık olduğunu sanıyor; oysa ölçüm bambaşka bir şey söylüyor.
Sıralama: önce erişim
Erişim, yapay zekâ görünürlüğünün en alt katmanıdır. Şema işaretlemeniz, içerik kaliteniz ve otoriteniz ancak modeller sayfayı okuyabildiğinde anlam kazanır. Bot erişimi kapalıyken içerik iyileştirmesi yapmak, kapısı kilitli dükkânın vitrinini düzenlemeye benzer.
Bu yüzden teşhis sırası hep aynıdır: önce erişim, sonra varlık netliği, sonra içerik.
Markaların yapay zekâ destekli arama sistemlerindeki görünürlüğünü ölçer ve düzeltir. Ölçüm metodolojisi ham sunucu yanıtına ve tekrarlı çalıştırmaya dayanır; her bulgu kaydedilmiş bir sunucu yanıtına bağlanır.
Sık sorulanlar
robots.txt izin veriyorsa bot neden engelleniyor?
robots.txt yalnızca bir ricadır ve sunucu yapılandırmasının bir parçası değildir. Güvenlik duvarı, CDN bot koruması veya WAF kuralı, robots.txt’ten bağımsız olarak isteği 403 ile geri çevirebilir. İki katman birbirinden habersiz çalışır.
Bunu nasıl kontrol ederim?
Her AI botunun user-agent’ı ile gerçek bir HTTP isteği atıp dönen durum kodunu, aynı sayfaya normal bir tarayıcı user-agent’ı ile atılan isteğin sonucuyla karşılaştırmanız gerekir. Tarayıcı 200 alırken bot 403 alıyorsa engelleme bota özeldir.
Cloudflare kullanıyorum, otomatik olarak engelliyor mu?
Cloudflare’in yapay zekâ tarayıcılarını engelleyen ayarları vardır ve bazı planlarda varsayılan olarak etkin gelebilir. Ayarın açık olması sizin tercihiniz olabilir; sorun, çoğu site sahibinin bu ayarın varlığından haberdar olmamasıdır.