Nginx ve Apache (.htaccess) ile AI Botlarını Engelleme: Hazır Kurallar
Kısaca: robots.txt bir nezaket protokolüdür ve uymayan botlar için bağlayıcı değildir. Nginx'te map direktifi veya Apache'de RewriteCond ile User-Agent başlığına göre sunucu seviyesinde engelleme yapabilirsiniz. Yanlış kural tüm siteyi kapatabilir; curl -A "Bot-Adı" https://siteniz.com komutuyla canlıya almadan test edin.
Neden Sunucu Seviyesinde Engelleme Gerekir?
robots.txt dosyası, tarayıcılara hangi içeriğe erişmemeleri gerektiğini söyleyen bir talimattır. Ancak GPTBot, ClaudeBot, CCBot gibi eğitim amaçlı botların yanı sıra kötü niyetli scraper'lar bu kurallara uymayabilir. Sunucu seviyesinde engelleme, HTTP isteği işlenmeden önce belirli User-Agent'ları reddettiği için kesin bir kontrol sağlar.
Önemli: Bu yöntem, botun User-Agent başlığını değiştirmesi durumunda etkisiz kalır. Ancak resmi botlar (GPTBot, ClaudeBot vb.) genellikle tanımlanabilir User-Agent kullanır ve IP aralıklarını da doğrulayabilirsiniz.
Nginx ile User-Agent Engelleme
Yöntem 1: map Direktifi (Önerilen)
Nginx'te map direktifi, User-Agent başlığını kontrol edip bir değişken atar. Bu yöntem performanslıdır ve birden fazla bot için temiz bir yapı sunar. nginx.conf veya site yapılandırma dosyanızın http bloğuna ekleyin:
http {
map $http_user_agent $blocked_bot {
default 0;
~*GPTBot 1;
~*ChatGPT-User 1;
~*ClaudeBot 1;
~*Claude-Web 1;
~*CCBot 1;
~*PerplexityBot 1;
~*Bytespider 1;
~*Amazonbot 1;
}
server {
listen 80;
server_name siteniz.com;
if ($blocked_bot) {
return 403;
}
# Diğer yapılandırmalar...
}
}
Açıklama: ~* büyük-küçük harf duyarsız regex eşleşmesi yapar. Eşleşen User-Agent için $blocked_bot değişkeni 1 olur ve if bloğu 403 Forbidden yanıtı döner. default 0; satırı, listelenmeyen tüm botlara izin verir.
Yöntem 2: if Direktifi (Basit Durumlar İçin)
Tek bir bot engellemek için doğrudan server veya location bloğunda kullanabilirsiniz:
server {
listen 80;
server_name siteniz.com;
if ($http_user_agent ~* (GPTBot|ClaudeBot|CCBot)) {
return 403;
}
# Diğer yapılandırmalar...
}
Uyarı: Nginx'te if direktifi bazı durumlarda beklenmedik davranışlara yol açabilir. Karmaşık kurallarda map tercih edilmelidir.
Yapılandırmayı Yeniden Yükleme
sudo nginx -t # Sözdizimi kontrolü
sudo systemctl reload nginx
Apache ile User-Agent Engelleme (.htaccess)
mod_rewrite ile Engelleme
Apache'de .htaccess dosyanıza veya <Directory> bloğuna aşağıdaki kuralları ekleyin. mod_rewrite modülünün etkin olması gerekir:
RewriteEngine On
# AI eğitim botlarını engelle
RewriteCond %{HTTP_USER_AGENT} GPTBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ChatGPT-User [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ClaudeBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} CCBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} PerplexityBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Bytespider [NC]
RewriteRule .* - [F,L]
Açıklama: [NC] büyük-küçük harf duyarsız eşleşme, [OR] bir sonraki koşulla VEYA bağlacı, [F] 403 Forbidden yanıtı, [L] son kural (eşleşirse diğer kurallara geçme).
mod_authz_core ile Engelleme (Apache 2.4+)
Daha modern ve performanslı bir yöntem:
<IfModule mod_authz_core.c>
<RequireAll>
Require all granted
Require not env blocked_bot
</RequireAll>
</IfModule>
SetEnvIfNoCase User-Agent "GPTBot" blocked_bot
SetEnvIfNoCase User-Agent "ClaudeBot" blocked_bot
SetEnvIfNoCase User-Agent "CCBot" blocked_bot
SetEnvIfNoCase User-Agent "PerplexityBot" blocked_bot
Yanlış Kuralın Tüm Siteyi Kapatma Riski
Sunucu seviyesinde engelleme kuralları, sözdizimi hatası veya mantık hatası içerdiğinde tüm ziyaretçileri etkileyebilir. Yaygın hatalar:
- Yanlış regex:
if ($http_user_agent ~ *GPTBot)gibi boşluk hatası Nginx'i başlatmayı engelleyebilir. - Geniş kural:
RewriteCond %{HTTP_USER_AGENT} .*tüm User-Agent'ları engeller, siteyi herkes için kapatır. - Parantez hatası: Apache'de kapatılmamış
<IfModule>veya Nginx'te eksik süslü parantez. - Sonsuz döngü: Yanlış
RewriteRuleyapılandırması 500 Internal Server Error'a yol açabilir.
Önlem: Canlı sunucuda değişiklik yapmadan önce mutlaka test ortamında veya yerel sunucuda deneyin. Nginx için nginx -t komutu sözdizimi hatalarını yakalar ancak mantık hatalarını bulamaz.
curl ile Test Yöntemi
Kuralları canlıya almadan önce curl komutuyla farklı User-Agent'lar göndererek test edin:
Engellenmiş Bot Testi
curl -A "GPTBot/1.0" https://siteniz.com -I
Beklenen çıktı:
HTTP/1.1 403 Forbidden
Normal Tarayıcı Testi
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" https://siteniz.com -I
Beklenen çıktı:
HTTP/1.1 200 OK
Boş User-Agent Testi
curl -A "" https://siteniz.com -I
Bazı scraper'lar User-Agent göndermez. Boş User-Agent'ı da engellemek isterseniz:
Nginx:
if ($http_user_agent = "") {
return 403;
}
Apache:
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule .* - [F,L]
Ek Güvenlik Önerileri
- Rate limiting: Nginx'te
limit_req_zoneveya Apache'demod_ratelimitile aşırı istek yapan IP'leri yavaşlatın. - IP doğrulama: GPTBot gibi resmi botlar, IP aralıklarını yayınlar. Reverse DNS kontrolü ile sahtecilik önlenebilir (örn. OpenAI'ın IP'lerini doğrulama).
- WAF kullanımı: Cloudflare, AWS WAF gibi hizmetler, User-Agent tabanlı kuralları yönetmek için daha esnek arayüzler sunar.
- Log izleme: Engellenen istekleri loglayarak hangi botların sıklıkla geldiğini takip edin.
Sık Sorulan Sorular
Engellenmiş bir botu yanlışlıkla tüm siteye uyguladım, nasıl geri alırım?
Nginx için nginx.conf veya site yapılandırma dosyasındaki ilgili if veya map bloğunu yoruma alın (# ile başlatın) ve sudo systemctl reload nginx çalıştırın. Apache için .htaccess dosyasındaki RewriteCond satırlarını silin veya yoruma alın. Değişiklik hemen etkili olur. Emin değilseniz, yedek yapılandırma dosyasını geri yükleyin.
User-Agent başlığını değiştiren botları engelleyebilir miyim?
User-Agent başlığı istemci tarafından kolayca değiştirilebilir, bu nedenle %100 güvenilir değildir. Daha sağlam bir çözüm için IP tabanlı engelleme, CAPTCHA, JavaScript challenge (Cloudflare gibi) veya davranış analizi (anormal istek hızı, belirli endpoint'lere odaklanma) kullanın. Resmi botlar genellikle User-Agent'ı değiştirmez, ancak kötü niyetli scraper'lar normal tarayıcı gibi görünebilir.
robots.txt'e uyduğunu iddia eden bir bot hâlâ içeriğimi tarıyor, ne yapmalıyım?
Önce botun gerçekten robots.txt'i okuduğunu doğrulayın (sunucu loglarında /robots.txt isteği olmalı). Eğer okuyup yine de tarama yapıyorsa, robots.txt kuralınızı kontrol edin (sözdizimi hatası, yanlış User-agent adı). Sorun devam ederse, yukarıdaki sunucu seviyesi engelleme yöntemlerini uygulayın. Botun IP adresini tespit edip firewall seviyesinde engellemek de bir seçenektir. Resmi botlar için (GPTBot, ClaudeBot) platform sağlayıcısının destek kanallarından şikayette bulunabilirsiniz.
Tüm AI botlarını engellemek SEO'ya zarar verir mi?
GPTBot, ClaudeBot, CCBot gibi eğitim amaçlı botları engellemek, Google Arama sıralamasını doğrudan etkilemez çünkü bunlar Googlebot'tan ayrıdır. Ancak Google-Extended'ı engellerseniz, Gemini uygulamaları ve Vertex AI için kullanımı durdurursunuz; bu da Google Arama'yı etkilemez. Googlebot'u yanlışlıkla engellemeyin (User-Agent: Googlebot). Perplexity, ChatGPT arama gibi platformlarda görünmek istemiyorsanız, ilgili botları (PerplexityBot, OAI-SearchBot) engelleyebilirsiniz; bu durum geleneksel arama motoru trafiğinizi azaltmaz.