Sunucu günlüklerinizde AI crawler'ları nasıl kontrol edilir
Erişim günlüğünüzün user agent alanında GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot ve PerplexityBot gibi token'ları arayın, ardından aldıkları durum kodlarına bakın. User agent tek başına hiçbir şeyi kanıtlamaz; bu yüzden her kaynak IP'yi sağlayıcının yayımladığı IP listesiyle, Google ve Apple için ise ters ve ileri DNS ile doğrulayın.
robots.txt, crawler'lardan ne yapmalarını istediğinizi söyler. Erişim günlüğünüz ise gerçekte ne olduğunu gösterir: hangi AI crawler'ları geldi, hangi sayfaları istedi ve sunucunuz ne yanıt verdi. Elinizdeki en doğrudan kanıttır ve günlük dosyalarından ve bir terminalden fazlasını gerektirmez. Aşağıdaki örnekler nginx ve Apache'nin varsayılan olarak kullandığı birleşik günlük biçimini kullanır.
Bu sayfada
- Erişim günlüğünde bir AI crawler ziyareti nasıl görünür?
- AI crawler ziyaretlerini nasıl sayarım?
- Her crawler gerçekte ne aldı?
- Bir ziyaretin gerçekten OpenAI, Anthropic ya da Perplexity'den geldiğini nasıl doğrularım?
- Googlebot, Applebot ve CCBot'u nasıl doğrularım?
- Sahte AI crawler'ları nasıl görünür?
- Günlükler size neyi söylemez?
Erişim günlüğünde bir AI crawler ziyareti nasıl görünür?
Birleşik biçimde her satır istemci IP'sini, zamanı, istek satırını, durum kodunu, yanıt boyutunu, yönlendireni ve user agent'ı içerir. nginx bunu $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" olarak tanımlar; Apache'nin combined biçimi de aynı alanlara sahiptir. OpenAI'nin eğitim crawler'ından bir ziyaret şöyle görünür:
20.171.206.5 - - [12/Nov/2026:10:00:01 +0000] "GET /pricing HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
Aranacak token'lar sağlayıcıların belgelediği olanlardır: GPTBot, OAI-SearchBot ve ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot ve Claude-User (Anthropic); PerplexityBot ve Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer ve CCBot. Google-Extended ya da Applebot-Extended'ı hiçbir zaman görmezsiniz. Google, Google-Extended'ın ayrı bir user agent dizesi olmadığını, Apple ise Applebot-Extended'ın tarama yapmadığını söylüyor; ikisi de yalnızca robots.txt token'ıdır.
AI crawler ziyaretlerini nasıl sayarım?
Her satırı çift tırnak karakterinden böldüğünüzde user agent 6. alana düşer. Yalnızca bu alanı eşleştirmek, adında bir botun adı geçen URL'lerden doğan yanlış eşleşmeleri önler. Aşağıdaki komut, güncel günlük ve döndürülmüş sıkıştırılmış günlükler boyunca crawler başına ziyaretleri sayar:
zcat -f /var/log/nginx/access.log* \
| awk -F'"' '{print $6}' \
| grep -Eo 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|meta-externalagent|meta-webindexer|CCBot' \
| sort | uniq -c | sort -rn
Yolu Apache için uyarlayın; çoğunlukla /var/log/apache2/access.log* ya da /var/log/httpd/access_log* olur. zcat -f hem düz hem gzip'li dosyaları okur. Beklediğiniz bir crawler yoksa bu tek başına engel kanıtı değildir: günlüklerinizin kapsadığı dönemde hiç uğramamış olabilir.
Her crawler gerçekte ne aldı?
Ziyaretlerden çok yanıtlar önemlidir. Her isteğe 403 alan bir crawler uğramış ama hiçbir şey okumamıştır. Bu komutlar durum kodlarını, en çok istenen yolları ve crawler'ın robots.txt'yi çekip çekmediğini gösterir:
# Status codes returned to PerplexityBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /PerplexityBot/ {split($3, s, " "); print s[1]}' | sort | uniq -c
# Most requested paths for OAI-SearchBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /OAI-SearchBot/ {split($2, r, " "); print r[2]}' | sort | uniq -c | sort -rn | head -20
# Did ClaudeBot fetch robots.txt, and what did it get?
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /ClaudeBot/ && $2 ~ /robots\.txt/ {split($3, s, " "); print s[1]}' | sort | uniq -c
Çoğunlukla 200 görmek istersiniz. Çok sayıda 403 ya da 429 bir güvenlik duvarı kuralına veya hız sınırına işaret eder. robots.txt için 5xx yanıtları ciddidir: RFC 9309'a göre robots.txt için sunucu hatası alan bir crawler tüm sitenin engelli olduğunu varsaymak zorundadır.
Siteniz bir CDN'in arkasındaysa iki şey değişir. CDN'in engellediği istekler kaynak sunucunuza hiç ulaşmaz, dolayısıyla onun günlüklerinde hiç görünmez; bunun yerine CDN'in kendi güvenlik olaylarına bakın. Ayrıca ziyaretçi IP'sini geri yüklemezseniz kaynak sunucu CDN'in adresini kaydeder. Örneğin Cloudflare özgün IP'yi CF-Connecting-IP başlığında gönderir ve varsayılan olarak bir Cloudflare IP'si kaydedilir.
Bir ziyaretin gerçekten OpenAI, Anthropic ya da Perplexity'den geldiğini nasıl doğrularım?
Bu sağlayıcılar ajanlarının kullandığı IP aralıklarını yayımlar: OpenAI openai.com/gptbot.json, openai.com/searchbot.json ve openai.com/chatgpt-user.json adreslerinde; Anthropic claude.com/crawling/bots.json adresinde; Perplexity perplexity.ai/perplexitybot.json ve perplexity.ai/perplexity-user.json adreslerinde. Anthropic, listesindeki bir kaynak IP'nin crawler'ın Anthropic'ten geldiğini gösterdiğini söylüyor. Bu üçünün hiçbiri ters DNS doğrulamasını belgelemiyor; bu yüzden listeleri kullanın.
Dosyalar aynı yapıyı paylaşır: ipv4Prefix ya da ipv6Prefix girdilerinden oluşan bir prefixes listesi. Bu yüzden küçük bir betik bir IP'yi hepsine karşı kontrol edebilir:
python3 - 20.171.206.5 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "log-check"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print(ip, "listed" if any(ip in n for n in nets) else "NOT listed")
EOF
Belirli bir crawler olduğunu iddia eden IP'leri listelemek için günlük üzerinde awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' komutunu çalıştırın ve çıktıyı sort | uniq -c | sort -rn ile süzün. Her birini ilgili listeyle karşılaştırın. Listeler değişir; bu yüzden eski bir kopya tutmak yerine her seferinde yeniden çekin.
Googlebot, Applebot ve CCBot'u nasıl doğrularım?
Google, Apple ve Common Crawl ters ve ileri DNS kontrolü belgeliyor. IP'nin ana bilgisayar adına bakın, alan adını kontrol edin, sonra o ana bilgisayar adını sorgulayıp aynı IP'ye döndüğünü doğrulayın:
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1
Google için ana bilgisayar adı, crawler'a bağlı olarak googlebot.com, google.com ya da googleusercontent.com ile bitmelidir; Google ayrıca aralıklarını da yayımlar, Googlebot için bunlar common-crawlers.json içindedir. Apple için applebot.apple.com altında olmalıdır, aralıklar applebot.json içindedir. Common Crawl için crawl.commoncrawl.org altında olmalıdır ve Common Crawl, başka crawler'ların CCBot adını yalan yere kullandığı konusunda uyarıyor.
Sahte AI crawler'ları nasıl görünür?
Veri kazıyıcılar filtreleri aşmak için sıklıkla tanınmış bir crawler'ın user agent'ını ödünç alır. Tipik işaretler:
- User agent bir crawler'ı adıyla anıyor, ancak IP o sağlayıcının yayımladığı listede değil ya da ters DNS'i eşleşmiyor.
- Kaynak, sağlayıcının listelemediği bir ev tipi ağ ya da bulut sağlayıcısı.
- İstemci robots.txt'yi hiç istemiyor veya robots.txt'nin o crawler için engellediği yolları istiyor.
- İstek hızı ya da örüntüsü, aynı ad altındaki doğrulanmış trafikten keskin biçimde ayrılıyor; örneğin arama ya da oturum açma uç noktalarına yönelik ani yığılmalar.
Ters sorun da var: sıradan bir tarayıcı user agent'ı kullanan bir crawler günlük satırından hiç tanımlanamaz. Cloudflare 2025'te Perplexity'nin yayımlanan aralıklarının dışındaki IP'lerden beyan edilmemiş, tarayıcıya benzer user agent'larla tarama yaptığını gözlemlediğini söyledi; Perplexity bu anlatıya itiraz etti ve trafiğin bir kısmını üçüncü taraf bir hizmete bağladı. Günlükler tek başına bunun gibi durumları çözemez; yayımlanan IP aralıklarıyla doğrulamanın iki yönde de önemli olması bu yüzdendir.
Günlükler size neyi söylemez?
Günlükler kaynak sunucunuza ulaşanı gösterir. CDN'inizin kaynak sunucudan önce neyi engellediğini, 200 dönen bir sayfanın metni mi yoksa yalnızca bir betik kabuğu mu içerdiğini veya bir crawler bugün gelseydi izin alıp almayacağını göstermez. Ayrıca yalnızca sakladığınız dönemi kapsarlar ve sessiz sitelerde AI crawler'ları nadiren görülebilir.
Bir AISeeWhy hesabında birleşik biçimde bir erişim günlüğü yükleyebilirsiniz (düz ya da .gz, en fazla 50 MB); günlük analiz edilir ve silinir, her AI crawler'ın istekleri durum kodlarıyla sayılır ve sağlayıcıların yayımladığı IP aralıklarına karşı kontrol edilir.
Sık sorulan sorular
Günlüklerimde neden Google-Extended'ı görmüyorum?
Google, Google-Extended'ın ayrı bir user agent dizesi olmadığını söylüyor. Taramayı Google'ın mevcut crawler'ları yapar; token yalnızca içeriğin nasıl kullanılabileceğini denetler. Apple'ın tarama yapmadığını söylediği Applebot-Extended için de aynısı geçerlidir.
Günlüklerimdeki user agent'a güvenebilir miyim?
Hayır. Herkes istediği user agent'ı gönderebilir. Onu bir iddia olarak değerlendirin ve sağlayıcının yayımladığı IP aralıklarıyla ya da Google, Apple ve Common Crawl için ters ve ileri DNS sorgusuyla doğrulayın.
Günlüklerimde AI crawler ziyareti yok. Engelli miyim?
Zorunlu değil. Crawler henüz uğramamış olabilir, CDN'iniz onu kaynak sunucudan önce engellemiş olabilir veya günlükleriniz yalnızca CDN'in IP adreslerini kaydediyor olabilir. CDN'inizin güvenlik olaylarına bakın ve sayfayı her crawler'ın user agent'ıyla test edin.
ChatGPT-User trafiği bir crawler mıdır?
OpenAI, ChatGPT-User'ın belirli kullanıcı eylemleri için kullanıldığını ve web'i otomatik olarak taramakta kullanılmadığını söylüyor. Ziyaretleri genellikle birinin ChatGPT'ye bir sayfayı sormasının ardından gelir; bu yüzden az sayıda olur.
Kaynaklar
- nginx: ngx_http_log_module (combined log format)
- Apache HTTP Server 2.4: Log files
- OpenAI: Overview of OpenAI crawlers
- Anthropic: Does Anthropic crawl data from the web, and how can site owners block the crawler?
- Perplexity: Perplexity crawlers
- Google: Verifying Google crawlers and fetchers
- Google: Common crawlers, including Google-Extended
- Apple: About Applebot
- Common Crawl: CCBot
- RFC 9309: Robots Exclusion Protocol
- Cloudflare: Restoring original visitor IPs
- Cloudflare: Perplexity is using stealth, undeclared crawlers to evade website no-crawl directives
- Perplexity: Agents or bots? Making sense of AI on the open web