GPTBot, ClaudeBot ve PerplexityBot'u Sunucu Loglarında Takip Etmek: Pratik Rehber
Sunucu erişim logları, AI tarayıcılarının sitenizi nasıl tükettiğini gösteren tek doğrulanabilir kaynaktır. GPTBot, ClaudeBot ve PerplexityBot için User-Agent doğrulaması ve birkaç awk tarifiyle ham log satırlarını aksiyon alınabilir tarayıcı zekasına çevirin.
Sunucu erişim logları, AI tarayıcılarının içeriğinizi gerçekten ne sıklıkta ve ne derinlikte tükettiğini gösteren tek doğrulanabilir kaynaktır. GPTBot, ClaudeBot ve PerplexityBot için doğru User-Agent imzalarını, yayımlanmış IP aralıklarını ve reverse DNS doğrulamasını birleştirdiğinizde, ham log satırları aksiyon alınabilir tarayıcı zekasına dönüşür. Bu rehber Nginx ve Apache erişim logları için awk ve grep tarifleri, bot kimlik doğrulaması ve haftalık bir izleme tablosu kurma adımlarını içerir.
Sunucu logları neden AI tarayıcı aktivitesi için temel gerçek
Üçüncü parti analitik araçlarının çoğu bot trafiğini varsayılan olarak eler. Google Analytics, Mixpanel veya benzeri ürünler insan oturumu odaklıdır; GPTBot'un siteyi tarayıp tarayıp gitmediğini size söylemez. Sunucu erişim logu ise filtre uygulamaz: her isteği, User-Agent'ını, IP adresini ve döndürülen status kodunu kaydeder.
Loglar üç soruyu netleştirir. Hangi URL'i hangi motor ne sıklıkta yeniden çekiyor? Bir içerik güncellemesi yaptıktan sonra tarama hızlandı mı, yavaşladı mı? Hangi sayfa indekslenmiş gibi görünüyor ama anlık kullanıcı sorgularında çekilmiyor? Search Console size sadece Google'ı, GA size sadece insan oturumlarını verir; logları okumak bu boşluğu kapatır.
Kritik bir ayrım var: AI tarayıcıları iki farklı modda çalışır. Eğitim tarayıcıları (GPTBot, ClaudeBot, PerplexityBot'un standart tarama modu) toplu çalışır; bir motor günlerce siteye uğramayabilir, sonra bir gece yüzlerce URL'i sırayla çeker. Anlık çekim ajanları (Claude-User, Perplexity-User, OAI-SearchBot) ise kullanıcı promptu geldiği anda ilgili URL'leri çeker. İlk grup indeks katmanını besler; ikinci grup, gerçek alıntı sinyalidir.
Bot kimliği: gerçek User-Agent imzaları ve doğrulama
GPTBot
OpenAI GPTBot'un User-Agent dizisini ve hangi IP aralıklarından geldiğini resmi dokümantasyonda yayımlar; site operatörleri bu listeyi indirip gelen istekleri doğrulayabilir. Tipik bir log satırında UA şuna benzer:
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.2; +https://openai.com/gptbot
OpenAI ayrıca SearchGPT için ayrı bir token (OAI-SearchBot) ve ChatGPT'nin kullanıcı tetiklemeli çekim trafiği için ChatGPT-User tokenini ayırır. Üçü de farklı amaçlara hizmet eder; robots.txt'de hepsini ayrı yönetmeniz gerekir.
ClaudeBot vs Claude-User
Anthropic ClaudeBot'u genel web taraması için, Claude-User'ı ise kullanıcı promptu tetiklediği anlık çekimler için ayrı tutar ve her birini robots.txt üzerinden ayrı ayrı yönetebilmenizi destekler. Yalnızca User-agent: ClaudeBot bloğu yazıp "Anthropic'i kapattım" sanmak yanılgıdır; Claude-User hâlâ kullanıcı sorgusu geldiğinde sayfanızı çekebilir.
PerplexityBot vs Perplexity-User
Perplexity ise PerplexityBot'u indeksleme tarayıcısı, Perplexity-User'ı kullanıcı tetiklemeli çekim ajanı olarak ayırır ve robots.txt itaat profillerinin farklı olduğunu belgeler. Bu ayrım son aylarda şeffaflık tartışmasının da merkezindeydi: Perplexity-User'ın bazı durumlarda crawl-delay direktiflerine uymadığı raporlandı; bu yüzden log tarafından doğrulama daha da kritik.
UA taklidini reverse DNS ile yenmek
User-Agent dizisi taklit edilebilir; veri kazıma çiftlikleri kendilerini GPTBot ilan eden istekler atar. Doğrulamanın altın standardı forward-confirmed reverse DNS'tir. Gelen IP'yi reverse DNS ile çözün, dönen hostname'in beklenen domaini içerip içermediğine bakın, sonra o hostname'i tekrar forward DNS ile çözüp orijinal IP'ye gidip gitmediğini kontrol edin.
$ host 20.171.207.1
1.207.171.20.in-addr.arpa domain name pointer crawl-20-171-207-1.openai.com.
$ host crawl-20-171-207-1.openai.com
crawl-20-171-207-1.openai.com has address 20.171.207.1
İki yön de eşleşmediyse istek sahtedir; UA'sı ne derse desin yok sayın.
Nginx ve Apache için awk ve grep tarifleri
Aşağıdaki tarifler hem Nginx default formatına hem Apache combined formatına uyar; her iki formatta da $7 alanı request URI, $9 alanı status koddur. Tarih combined formatta $4 alanındadır.
Bot başına günlük istek sayısı
awk '/GPTBot|ClaudeBot|PerplexityBot|Claude-User|Perplexity-User|OAI-SearchBot/ {
match($0, /(GPTBot|ClaudeBot|PerplexityBot|Claude-User|Perplexity-User|OAI-SearchBot)/, b)
print substr($4, 2, 11), b[1]
}' access.log | sort | uniq -c | sort -rn
Çıktı: tarih ve bot başına istek sayısı. Bir botun günlük hacmi sıçradığında veya sıfırlandığında hemen görürsünüz.
Her botun en sık çektiği 20 URL
grep "GPTBot" access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
Aynı tarifi ClaudeBot, PerplexityBot, Claude-User, Perplexity-User için tekrarlayın. Hangi sayfaların alıntı adayı olduğunu — yani motorun değerli gördüğünü — bu liste söyler.
Status kod dağılımı (404 ve 5xx avı)
grep "GPTBot" access.log | awk '{print $9}' | sort | uniq -c | sort -rn
GPTBot'un sürekli 404 aldığı bir URL kümesi varsa o sayfa alıntı havuzundan düşmüş demektir; 5xx ise daha kötü, sayfa yeniden taramaya bile alınmaz.
Tarama aralığı (crawl-gap) analizi
Aynı URL'e ardışık iki ziyaret arasındaki saat farkını ölçün. Bir sayfanın tarama aralığı 7 günden 30 güne çıktıysa motor ilgisini kaybetmiştir; tersi olursa içerik güncellemeniz işe yaramıştır.
Tarama sıklığı ve derinliği ne anlatır
Yüksek yeniden tarama frekansı, motorun ilgili URL'i alıntı adayı havuzunda taze tutmaya değer bulduğu anlamına gelir. İçerik güncellemesinden sonra ani düşüş ise sıralamadan düşürme sinyalidir. En güçlü sinyal şu: anlık çekim ajanları (Claude-User, Perplexity-User, OAI-SearchBot) sayfanıza vurduğunda, şu an bir kullanıcının sorduğu bir soruda sayfanızın gerçekten alıntılandığı veya alıntılanmaya aday olduğu anlamına gelir. Statik tarayıcı (GPTBot, ClaudeBot) hitleri var ama anlık takip yoksa: indekslisiniz, ama yanıt yüzeyine çıkmıyorsunuz.
Logları haftalık per-bot panele dönüştürmek
Küçük bir SQLite tablosu kurmak yeterli:
CREATE TABLE bot_hits (
date TEXT,
bot TEXT,
url TEXT,
status INTEGER,
hits INTEGER,
PRIMARY KEY (date, bot, url, status)
);
Yukarıdaki awk tariflerinin çıktısını gece bir cron ile bu tabloya yazın. Sonra haftalık üç soru sorun: Bot başına toplam hit haftadan haftaya nasıl değişti? Hangi URL'ler bu hafta hiç çekilmedi? 5xx oranı bir bot için sıçradı mı?
Uyarı kuralları için pratik eşikler. Tek bir bottan 5xx oranı %5'i geçtiğinde, bir botun haftalık hit sayısı dört haftalık ortalamanın %50 altına düştüğünde, yeni yayımlanan bir URL 14 gün içinde hiç taranmadığında bildirim alın. Günlük veride gürültü çoktur — sağlayıcılar toplu tarama yapar — haftalık pencere bunu yumuşatır.
Yaygın tuzaklar
Sahte UA'lar. Bir IP "GPTBot" diyor diye gerçekten OpenAI olduğu anlamına gelmez; reverse DNS doğrulaması yapmadan bir UA'ya güvenmeyin.
Robots.txt yanılgısı. Robots Exclusion Protocol RFC 9309 olarak resmî standart hâline geldi ve büyük AI tarayıcıları bu standarda atıf yapar; ancak User-agent: ClaudeBot direktifiyle sadece eğitim tarayıcısını engellediğinizi unutmayın — Claude-User ayrı bir tokendir ve onun için ayrı kural yazmadıkça anlık çekimler devam eder.
Tüm AI UA'larını eğitim sanmak. Bir Perplexity-User isteği canlı bir kullanıcının şu an sizden bilgi istediği anlamına gelir; bunu eğitim trafiğiyle aynı kovaya koymak en değerli alıntı sinyalini gözden kaçırmaktır.
Çok agresif log rotasyonu. Cloudflare'in ağ ölçümleri GPTBot'un siteler arasında en aktif AI eğitim tarayıcısı olduğunu, ClaudeBot ve PerplexityBot'un da kayda değer hacme sahip olduğunu ve operatörlerin önemli bir bölümünün en az bir AI botu blokladığını gösteriyor; haftalık desenleri görmek için en az 30 günlük log saklayın, aksi halde tarama aralığı analizi yapamazsınız.
Log sinyallerini sürekli AI alıntı takibi iş akışına dönüştürmek için GEON arayüzünden bu verileri tek panelde toplayabilirsiniz; ama temeli kuran şey, sunucunuzun ham erişim logudur.
Deniz
İçerik & GEO Stratejisi