AI Botları Sitenize Girebiliyor mu? Doğrulama Rehberi
Aynı URL'e aynı dakika içinde iki istek gitti. Birincisi sıradan bir masaüstü tarayıcı user-agent'ıyla: 200, 57 KB gövde. İkincisi GPTBot/1.2 user-agent'ıyla, aynı adrese, aynı sunucuya: 403, 1,2 KB. Dönen şey sayfa değildi; güvenlik katmanının hata ekranıydı.
Bu, GEO hizmeti satan bir ajansın kendi sitesinde çıktı. Can sıkıcı tarafı şu: o sitenin robots.txt dosyasında GPTBot'u engelleyen tek bir satır yoktu. Aksine bütün AI tarayıcıları tek tek listelenmiş, hepsine Allow: / verilmişti. Dosya "buyurun" diyordu, sunucunun önündeki katman "hayır" diyordu, ve bu "hayır" hiçbir panelde, hiçbir raporda görünmüyordu.
Aylardır içerik üretiyor, şema ekliyor, sayfa hızıyla uğraşıyorsanız ve yanıtlarda hiç görünmüyorsanız, önce bunu kontrol edin. Diğer her şey bunun üstüne kurulu.
robots.txt izin vermez, izin beyan eder
robots.txt bir sözleşme değil, bir niyet beyanıdır. Metin dosyasına yazdığınız Allow: / satırı, botun sunucunuza bağlanabildiği anlamına gelmez; botun bağlanabildiği takdirde o yolu taramasının sizce uygun olduğu anlamına gelir. İki farklı katmandan bahsediyoruz:
- Beyan katmanı:
robots.txt,llms.txt,noindexetiketleri. Botun uyması beklenen kurallar. Uyum gönüllü. - Uygulama katmanı: sunucu, CDN, güvenlik duvarı. Bağlantının kurulup kurulmadığına karar veren yer. Uyum zorunlu, çünkü karar zaten orada veriliyor.
İkinci katmanda verilen "hayır"ın en tehlikeli özelliği sessiz olması. Bir sayfayı yanlışlıkla noindex yaparsanız Search Console size söyler. Sunucunuz GPTBot'a 403 dönüyorsa hiçbir yerde uyarı çıkmaz — sadece o botun geldiği yanıtlarda hiç görünmezsiniz, ve bunun sebebini içerik kalitesine yorarsınız.
Engel genelde şu beş yerden birinde durur:
Hosting güvenlik duvarı. Paylaşımlı hostinglerde ve birçok VPS panelinde varsayılan olarak açık gelen "kötü bot" listeleri vardır. Bu listeler yıllardır güncelleniyor ve tanımadığı user-agent'ı şüpheli sayan bir mantıkla çalışıyor. Yeni AI tarayıcıları çoğu listede "bilinmeyen crawler" tarafına düşüyor.
CDN bot yönetimi. Cloudflare, Akamai, Fastly gibi katmanlarda "bot mücadelesi" (bot fight / challenge) modları bulunur. Bu modlar JavaScript çalıştıramayan istemciyi otomatik olarak şüpheli sayar. AI tarayıcılarının büyük kısmı JavaScript çalıştırmaz. Cloudflare'in ayrıca AI botlarına özel bir engelleme anahtarı da var ve bazı planlarda varsayılan açık gelebiliyor.
CMS güvenlik eklentisi. WordPress tarafında Wordfence, iThemes gibi eklentiler kendi bot kuralları taşır. Eklenti güncellemesi, sizin hiç dokunmadığınız bir kuralı geri getirebilir.
Hız sınırlama. Bir bot dakikada belli sayıda istek eşiğini aşınca 429 veya 503 alır. Büyük site tarıyorsanız bu eşik AI tarayıcıları için düşük kalabilir.
Ülke veya ASN engeli. "Türkiye dışından gelen trafiği kısıtla" tarzı bir kural, bulut sağlayıcılarının veri merkezlerinden gelen bütün bot trafiğini de keser. AI tarayıcıları veri merkezinden gelir.
Beş dakikalık test: curl ile doğrudan sorun
Tahmin etmeyin, ölçün. Test tek bir prensibe dayanıyor: aynı URL'e önce normal tarayıcı user-agent'ıyla, sonra bot user-agent'ıyla istek atıp iki cevabı karşılaştırmak. Tek başına bir bot cevabı bir şey söylemez; karşılaştırma söyler.
Önce referans (baseline) ölçümü. Normal bir tarayıcı gibi davranın:
curl -s -o /dev/null -w "%{http_code} %{size_download}\n" \
-A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36" \
https://siteniz.com/onemli-sayfa
Çıktı örneğin 200 57342 gelir: durum kodu ve indirilen bayt sayısı. Bu iki sayı sizin referansınız. Şimdi aynı URL'i altı farklı bot kimliğiyle deneyin:
for UA in \
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.2; +https://openai.com/gptbot" \
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ClaudeBot/1.0; +claudebot@anthropic.com" \
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)" \
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.0; +https://openai.com/searchbot" \
"Mozilla/5.0 (compatible; Google-Extended)" \
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
do
printf "%-14s " "${UA:0:60}"
curl -s -o /dev/null -w "%{http_code} %{size_download}\n" -A "$UA" https://siteniz.com/onemli-sayfa
done
Googlebot burada kontrol grubudur. Googlebot 200 alıp GPTBot 403 alıyorsa, engel "bot olduğu için" değil, "hangi bot olduğuna göre" konulmuş demektir — yani birinin yazdığı bir kural var, tesadüf değil.
Testi ana sayfada değil, gerçekten önemsediğiniz bir iç sayfada yapın. Bazı kurallar sadece belirli dizinlere uygulanır; ana sayfa açıkken /hizmetler/ altı kapalı olabilir.
Aynı döngüyü üç adres için daha çalıştırın: /robots.txt, /sitemap.xml ve varsa /llms.txt. Bunlar botun ilk uğradığı dosyalardır. robots.txt dosyanız bota 403 dönüyorsa içindeki bütün Allow satırları anlamsızdır — bot dosyayı hiç okuyamamıştır. Sitemap kapalıysa da bot sayfa listenizi öğrenemez, sadece bulabildiği bağlantılardan ilerler.
Sonuçları okumak
| Cevap | Büyük ihtimalle |
|---|---|
200 + referansa yakın boyut | Erişim var, sorun burada değil |
403 / 401 | Net engel. Güvenlik duvarı veya CDN kuralı |
200 ama boyut çok küçük (1-15 KB) | Mücadele/challenge sayfası. Kod başarı diyor, içerik yok |
429 | Hız sınırlaması |
503 veya uzun bekleyip zaman aşımı | Hız sınırı ya da geçici koruma modu |
| Hiç cevap yok, bağlantı kurulamıyor | IP veya ağ seviyesinde engel |
En sinsi satır üçüncüsü. 200 gördüğünüz için sorun yok sanırsınız; oysa bota giden şey "tarayıcınızı doğruluyoruz" ekranıdır. Bu yüzden sadece durum kodunu değil, boyutu da ölçün. -w içindeki %{size_download} tam olarak bunun için var.
Testin iki sınırı var, ikisini de bilerek kullanın. Birincisi: bir kez engellenen IP adresi bir süre kara listede kalabilir; peş peşe on test attıysanız sonraki ölçümleriniz kendi testinizin ürettiği engeli ölçüyor olabilir. Testler arasına birkaç dakika koyun, mümkünse farklı bir ağdan tekrarlayın. İkincisi: siz gerçek GPTBot değilsiniz. Sadece o ismi taşıyan bir user-agent gönderiyorsunuz. Eğer sunucu ters DNS doğrulaması yapıyorsa gerçek bota davranışı farklı olabilir — bu yüzden curl testi bir ipucu, log kaydı ise kanıttır.
Log doğrulama: kanıt erişim kaydındadır
curl testi temiz çıksa bile şu soru cevapsız kalır: bot gerçekten geldi mi? Bunu sadece sunucu erişim logu söyler.
Log satırında üç şey aranır: istemci IP'si, istenen yol, dönen durum kodu. Bot user-agent'ını arayıp gelen satırların kodlarına bakın. Hepsi 200 ise erişim var. Aralarında 403 varsa hangi yollarda olduğuna bakın; genelde bir desen çıkar.
Log dosyası nerede: cPanel'de Metrics > Raw Access, Plesk'te Websites & Domains > Logs, DirectAdmin'de Site Summary / Logs. Nginx veya Apache'ye doğrudan erişiminiz varsa /var/log/nginx/access.log ve /var/log/apache2/access.log standart yollardır. Cloudflare kullanıyorsanız sunucu logu size Cloudflare'in IP'sini gösterir; asıl istemciyi görmek için CF-Connecting-IP başlığını loglamanız gerekir. Cloudflare panelindeki AI Crawl Control ekranı da hangi botun ne kadar istek attığını ve kaçının engellendiğini ayrıca gösterir; llms.txt ve bot yönetimi tarafını AI tarayıcı yönetimi rehberimizde ayrıntılı ele aldık.
Bir uyarı: user-agent alanı serbest metindir, isteyen istediğini yazar. Logda gördüğünüz her "GPTBot" gerçek GPTBot değildir. İki doğrulama yolu var. Ters DNS: IP'yi host <ip> ile çözün, dönen alan adı sağlayıcının kendi alanı olmalı; sonra o alan adını ileri yönde tekrar çözüp aynı IP'ye çıktığını doğrulayın. Resmi IP listesi: OpenAI, Anthropic ve Google tarayıcı IP aralıklarını kendi sitelerinde JSON olarak yayınlar; logdaki IP o aralıkta mı diye bakın. İkisi de tutmuyorsa o satır bir taklit, ve muhtemelen zaten engellenmesi gereken bir trafik.
Sayfa tarayıcıda dolu, kaynakta boş
İkinci sessiz kayıp türü budur. Durum kodu 200, boyut normal, log temiz — ama bot sayfada hiçbir şey görmüyor.
Sebep şu: içerik istemci tarafında JavaScript ile üretiliyor. Tarayıcı JS'i çalıştırdığı için siz dolu sayfa görüyorsunuz; bot çalıştırmadığı için boş bir <div> alıyor. Googlebot bir dereceye kadar render eder, AI tarayıcılarının çoğu etmez.
Kontrolü tek komutla yapın:
curl -s -A "GPTBot/1.2" https://siteniz.com/onemli-sayfa | grep -c "sayfadaki-benzersiz-bir-cumle"
0 dönüyorsa metin HTML kaynağında yok. 1 veya üstü dönüyorsa var. Aynı komutu sayfa başlığı, ana <h1> ve varsa SSS bloğunuzdaki bir soru için tekrarlayın.
Çözüm sunucu tarafı render (SSR) veya derleme anında ön-render (SSG): HTML sunucudan dolu gelir, JS sadece etkileşim ekler. Bu bizim kendi sitemizde de bilinçli bir karar — her rota için derleme anında gerçek HTML üretiliyor, çünkü GEO satan bir sitenin kendi sayfalarının bot tarafından okunabilir olması pazarlık konusu değil. GEO yatırımınız aylardır sonuç vermiyorsa, üç ay geçti sonuç yok yazımızdaki teşhis sırasının ilk maddesi tam olarak budur.
Engeli kaldırırken: maliyet gerçek
"Hepsini aç" tavsiyesi eksik bir tavsiyedir. Bot trafiğinin faturası gerçektir: bant genişliği, sunucu CPU'su, paylaşımlı hostingde kaynak limitine çarpma riski. Agresif tarayan bir bot küçük bir siteyi yavaşlatabilir.
Denge şöyle kurulur. Arama ve yanıt botlarını açın — OAI-SearchBot, PerplexityBot, Googlebot ve benzerleri kullanıcı sorusuna cevap üretirken gelir ve size atıf getirebilir. Eğitim amaçlı taramada seçim sizindir — GPTBot ve Google-Extended içeriğinizi model eğitimi için de kullanır; kapatmanın bedeli, o modelin genel bilgisinde markanızın hiç yer almaması. Engellemek yerine yavaşlatın: tamamen kapatmak yerine hız sınırını makul bir seviyeye çekin, örneğin saniyede birkaç istek. Bot içeriği alır, sunucu ayakta kalır.
Kural yazarken tek tek user-agent hedefleyin; "bilinmeyen tüm botlar" gibi geniş kurallar bir sonraki yeni tarayıcıyı da otomatik olarak keser ve siz aylar sonra fark edersiniz.
Hosting sağlayıcısına ne söylenmeli
Panelde kural bulamadıysanız destek talebi açın. Belirsiz talep belirsiz cevap alır. Şu üç bileşeni verin:
- Ölçüm: "Aynı URL, normal tarayıcı user-agent'ıyla 200 ve 57 KB dönüyor;
GPTBot/1.2user-agent'ıyla 403 ve 1,2 KB dönüyor." Komutu ve çıktıyı da ekleyin. - Talep: "Sunucu güvenlik duvarında ve mod_security kurallarında şu user-agent'lara uygulanan engellemeyi kaldırın: GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended."
- Kanıt isteği: "Hangi kuralın tetiklendiğini ve hangi katmanda (WAF, mod_security, bot listesi) olduğunu bildirin."
Üçüncü madde önemli: kuralın adını öğrenirseniz, aynı kural bir güncellemeyle geri geldiğinde neye bakacağınızı bilirsiniz. Bu tür teknik doğrulamayı çalıştığınız ajansın yapıp yapmadığını sorgulamak için ajans değerlendirme sorularımıza bakabilirsiniz.
Bunu ayda bir tekrarlayın
Bu bir kurulum işi değil, bir bakım işi. Engeli kaldırdınız diye kapanmış olmuyor: eklenti güncellemesi eski kuralı geri getirir, CDN sağlayıcısı yeni bir varsayılan açar, hosting firması bot listesini yeniler. Hiçbiri size haber vermez.
Aylık rutin üç adımdan ibaret ve gerçekten beş dakika sürer: (1) yukarıdaki curl döngüsünü üç ayrı sayfada çalıştırın — ana sayfa, bir hizmet sayfası, bir blog yazısı; (2) çıktıyı tarih atarak bir yere kaydedin, böylece bir sonraki ay farkı görürsünüz; (3) erişim logunda son 30 günün bot satırlarındaki 403 sayısına bakın, sıfır olmalı. Sonuçları yanıt trafiğiyle birlikte okumak isterseniz AI trafiğini GA4 ile ölçme yazısındaki kurulum bu tabloyu tamamlar.
Bu testi kendi sitenizde çalıştırıp anlamlandıramadığınız bir çıktı aldıysanız, ölçümü bize gönderin — iletişim sayfasından ulaşabilirsiniz.
Sıkça Sorulan Sorular
robots.txt dosyamda AI botlarına izin verdiysem erişim garanti midir?
Hayır. robots.txt bir beyandır, uygulama değildir. Bot sunucunuza bağlanabildiği anda o dosyayı okur ve kurallara uyar; ancak bağlantının kurulup kurulmayacağına sunucu, CDN ve güvenlik duvarı katmanı karar verir. O katmanda konulmuş bir engel robots.txt'i hiç devreye sokmadan isteği 403 ile geri çevirir ve bu reddedilme hiçbir panelde uyarı üretmez. Bu yüzden izin beyanı ile gerçek erişim ayrı ayrı doğrulanmalıdır.
Bot user-agent'ıyla yaptığım istek 200 döndü ama boyut çok küçük, bu ne anlama gelir?
Büyük ihtimalle bota gerçek sayfa değil, bir doğrulama veya mücadele (challenge) ekranı dönmüştür. Bu ekranlar teknik olarak başarılı bir HTTP cevabı olduğu için durum kodu 200 görünür, ama içinde sayfanızın metni yerine JavaScript tabanlı bir kontrol vardır ve JavaScript çalıştırmayan bot hiçbir içerik göremez. Ayırt etmek için normal tarayıcı user-agent'ıyla aldığınız boyutla karşılaştırın; 57 KB yerine 1-15 KB arası bir değer görüyorsanız içerik teslim edilmemiş demektir.
Erişim logunda gördüğüm GPTBot kaydının gerçek olduğunu nasıl anlarım?
User-agent alanı serbest metindir ve isteyen herkes kendini GPTBot olarak tanıtabilir, bu yüzden isim tek başına kanıt değildir. İki doğrulama yöntemi vardır: ters DNS sorgusunda IP adresinin sağlayıcının kendi alan adına çözülmesi ve o alan adının ileri yönde tekrar aynı IP'ye çıkması; ya da IP adresinin sağlayıcının kendi sitesinde yayınladığı resmi tarayıcı IP aralıkları içinde bulunması. İkisi de tutmuyorsa o kayıt taklittir ve gerçek bot ziyareti sayılmamalıdır.
Bütün AI botlarını açmak sunucuma zarar verir mi?
Bot trafiğinin bant genişliği ve CPU maliyeti gerçektir, özellikle paylaşımlı hostingde kaynak limitine çarpabilirsiniz. Ancak doğru cevap tamamen engellemek değil, hız sınırlaması kurmaktır: saniyede birkaç istekle sınırlanmış bir bot içeriğinizi zamanla yine alır, sunucunuz da yükün altında kalmaz. Kararı botun türüne göre verin; kullanıcı sorusuna cevap üretirken gelen arama botlarını açık tutmak size atıf getirir, model eğitimi amaçlı taramada ise seçim tamamen sizindir.
Bu testi ne sıklıkta tekrarlamam gerekir?
Ayda bir yeterlidir ve pratikte beş dakika sürer. Tekrar gerekli çünkü engel bir kez kaldırıldığında kalıcı olarak kapanmaz: güvenlik eklentisi güncellemesi eski kuralı geri getirebilir, CDN sağlayıcısı yeni bir korumayı varsayılan olarak açabilir, hosting firması bot listesini yenileyebilir. Bunların hiçbiri size bildirim göndermez, dolayısıyla düzenli ölçüm tek erken uyarı mekanizmasıdır.