SEO için Log Analizi Nasıl Yapılır?
SEO ve GEO Danışmanı | | 9 dk okuma

SEO için log analizi, sunucunun erişim kayıtlarını (access log) okuyarak Googlebot ile yapay zeka botlarının siteyi gerçekte nasıl taradığını ölçen bir teknik SEO çalışmasıdır. Erişim kayıtları hangi botun hangi adresi ne zaman istediğini, sunucunun hangi durum koduyla yanıt verdiğini satır satır gösterir. Tarama bütçesinin nereye harcandığı bu satırlardan okunur.
Tarama bütçesi optimizasyonu yazımda log analizinin ayrı bir yazı konusu olduğunu yazmıştım, o yazıda söz verilen log analizi yazısı budur. Taramanın teknik SEO içindeki yerini kurucusu olduğum rankZup'ın blogundaki teknik SEO nasıl yapılır yazısında anlattık.
Erişim kaydı nedir, bir satırında hangi alanlar bulunur?
Erişim kaydı web sunucusunun aldığı her isteği tek satır olarak yazdığı metin dosyasıdır. Apache ile Nginx'te yaygın kayıt biçimi "combined" adını taşır. Aşağıdaki satır example.com sitesi için kurulmuş bir örnektir.
66.249.66.1 - - [05/Oct/2026:09:14:32 +0300] "GET /blog/ornek-yazi/ HTTP/1.1" 200 18452 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Combined biçimindeki bir satır soldan sağa şu yedi bilgiyi taşır.
- IP adresi: isteği yapan istemcinin adresi (66.249.66.1).
- Kimlik ile kullanıcı alanları: kimlik doğrulaması yoksa tire olarak yazılır.
- Tarih ile saat: isteğin alındığı an, saat dilimiyle birlikte.
- İstek satırı: yöntem, istenen adres, protokol (GET /blog/ornek-yazi/ HTTP/1.1).
- Durum kodu: sunucunun yanıtı (200).
- Boyut: yanıtın bayt cinsinden büyüklüğü (18452).
- Yönlendiren adres (referer) ile kullanıcı aracısı (user agent): son iki alan tırnak içinde yazılır.
Örnekteki Chrome/W.X.Y.Z ifadesi Google'ın belgesinde Chrome sürümünün yerini tutar. Gerçek kayıtta bu bölümde zamanla değişen bir sürüm numarası yazar.
Log analizi neden gereklidir?
Log analizi gereklidir, çünkü sunucuya ulaşan her isteği botun adı, adresi, saatiyle birlikte yalnız erişim kayıtları tutar. Search Console'daki Tarama İstatistikleri raporu yalnız Google'ın tarayıcılarını kapsar, adresleri örnek liste olarak verir. Google bu raporda bazı isteklerin sayılmayabileceğini, rakamların sunucu kayıtlarından biraz farklı çıkabileceğini belirtir. Aşağıdaki tablo iki kaynağı yedi özellikte karşılaştırır.
| Özellik | Erişim kayıtları | Tarama İstatistikleri raporu |
|---|---|---|
| Kapsanan istemciler | Sunucuya ulaşan her istemci: arama motoru botları, yapay zeka botları, tarayıcılar | Yalnız Google'ın tarayıcıları |
| Adres ayrıntısı | Her isteğin tam adresi | Her grup için örnek adresler, tam liste değil |
| Bot kimliği | Kullanıcı aracısı metni, doğrulamayı siz yaparsınız | Google'ın kendi verisi, Googlebot türüne göre gruplanır |
| Tarama amacı | Yer almaz | Keşif ya da yenileme olarak ayrılır |
| Sunucuya ulaşmayan istekler | Görünmez | DNS hataları ile sunucuya ulaşamayan istekler yanıt tablosunda yer alır |
| Dönem | Sunucunun sakladığı kayıt kadar | Ana makine durumu son 90 gün için değerlendirilir |
| Erişim | Sunucu ya da hosting paneli yetkisi | Search Console'da kök düzeyinde bir mülk |
Google'ın yardım belgesine göre Tarama İstatistikleri raporu ileri düzey kullanıcılar içindir. Aynı belge bin sayfadan küçük bir sitenin bu ayrıntıda tarama verisine ihtiyaç duymadığını yazar.
Erişim kayıtları nereden alınır?
Erişim kayıtları üç yerden alınır: hosting paneli, sunucudaki kayıt dosyaları, içerik dağıtım ağının (CDN) kayıtları.
- Hosting paneli: cPanel'deki Ham Erişim (Raw Access) arayüzü her alan adının kaydını .gz dosyası olarak indirir. Arşivleme seçeneğini açtığınızda eski kayıtlar ev dizininizdeki logs klasöründe birikir.
- Apache ya da Nginx dosyaları: dosyanın yolu sunucu yapılandırmasında yazar. Apache'de CustomLog, Nginx'te access_log yönergesine bakın.
- CDN kayıtları: CDN önbellekten yanıtladığı isteği kaynak sunucuya iletmez, o istek sunucunun kaydına düşmez. Cloudflare bu kayıtları Logpush özelliğiyle dışarı aktarır.
CDN arkasındaki sunucu varsayılan ayarda ziyaretçinin değil CDN'in IP adresini kaydeder. Cloudflare gerçek adresi CF-Connecting-IP başlığında iletir, Googlebot'u doğrulamak için sunucu kaydına bu başlığı yazdırın.
Kayıtlardaki Googlebot nasıl doğrulanır?
Googlebot doğrulaması kayıttaki IP adresine ters alan adı sistemi (DNS) sorgusu çalıştırılarak ya da adres Google'ın yayınladığı IP aralıklarıyla eşleştirilerek yapılır. Kullanıcı aracısı metni taklit edilebildiği için "Googlebot" yazan her satır Google'dan gelmez. Google'ın tarayıcı isteklerini doğrulama belgesi elle doğrulamayı aşağıdaki üç adımla tarif eder.
- Kayıttaki IP adresi için
hostkomutuyla ters DNS sorgusu çalıştırın. - Dönen alan adının googlebot.com, google.com ya da googleusercontent.com olduğunu kontrol edin.
- Dönen alan adı için
hostkomutunu yeniden çalıştırın. Çıkan IP adresi kayıttaki adresle aynı olmalıdır.
host 66.249.66.1
host crawl-66-249-66-1.googlebot.com
Büyük dosyalarda IP adreslerini Google'ın JSON dosyası olarak yayınladığı aralıklarla eşleştirin. Googlebot gibi genel tarayıcıların aralıkları common-crawlers.json dosyasında adres aralığı (CIDR) biçiminde yer alır.
Komut satırıyla log analizi nasıl yapılır?
Komut satırıyla log analizi grep, awk, sort, uniq komutlarıyla altı adımda yapılır. Örnek komutlar combined biçimindeki access.log dosyası için yazılmıştır: birinci alan IP adresi, yedinci alan istenen adres, dokuzuncu alan durum kodudur.
- Kullanıcı aracılarını sayın. Çıktı, siteye en çok istek yapan istemcileri sıralar.
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20 - İstekleri bot adına göre sayın.
grep -oE 'Googlebot|GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User' access.log | sort | uniq -c | sort -rn - Googlebot satırlarını ayrı bir dosyaya alın. İkinci komut her IP adresinin ters DNS adını yazar, Google'ın belgesindeki üç alan adından biriyle bitmeyen adresleri ayıklayın.
grep 'Googlebot' access.log > googlebot.log awk '{print $1}' googlebot.log | sort -u | while read ip; do echo "$ip $(host "$ip" | awk '{print $NF}')"; done - Durum kodlarının dağılımını çıkarın.
awk '{print $9}' googlebot.log | sort | uniq -c | sort -rn - En çok taranan adresleri listeleyin.
awk '{print $7}' googlebot.log | sort | uniq -c | sort -rn | head -20 - Parametreli adresleri, yani soru işareti içerenleri ayırın. İkinci komut bu adreslerin sayısını toplam Googlebot isteğiyle yan yana yazar.
awk '$7 ~ /\?/ {print $7}' googlebot.log | sort | uniq -c | sort -rn | head -20 awk '$7 ~ /\?/ {p++} END {print p+0, "/", NR}' googlebot.log
Sıkıştırılmış kaydı açmadan okumak için dosyayı zcat ile komuta aktarın.
zcat access.log.gz | grep 'Googlebot' > googlebot.log
Log analizinde nelere bakılır?
Log analizinde altı şeye bakılır: parametreli adresler, yönlendirme zincirleri, hata kodları, taranmayan önemli sayfalar, bölüm bazında tarama sıklığı, yanıt süresi. İlk üçü boşa giden taramayı gösterir.
- Parametreler: aynı sayfanın farklı sıralanmış sürümleri gibi parametreli adresler kopya içerik tarattırır. Google bu adreslerin birleştirilmesini, birleştirilemiyorsa robots.txt ile engellenmesini önerir.
- Yönlendirme zincirleri: 301 ya da 302 dönen adresleri listeleyin, hedef adres de yönlendiriyorsa zincir vardır. Google uzun yönlendirme zincirlerinin taramayı olumsuz etkilediğini yazar.
- 404 ile 5xx: Google 5xx yanıtı aldığında tarama kapasitesi sınırını düşürür. Kalıcı olarak kaldırılmış sayfada 404 doğru yanıttır.
- Taranmayan önemli sayfalar: önemli adreslerinizi bir dosyaya yazın, kayıtlarda geçmeyenleri aşağıdaki komutla bulun.
- Bölüm bazında sıklık: isteklerin /blog/ ya da /urunler/ gibi dizinlere dağılımı taramanın sitenin hangi bölümünde yoğunlaştığını gösterir.
- Yanıt süresi: combined biçimi süreyi içermez. Apache'de %D, Nginx'te $request_time değişkenini kayıt biçimine ekleyin.
awk '{sub(/\?.*/, "", $7); print $7}' googlebot.log | sort -u > taranan.txt
grep -vxFf taranan.txt onemli.txt
awk '{sub(/\?.*/, "", $7); split($7, a, "/"); print "/" a[2]}' googlebot.log | sort | uniq -c | sort -rn | head -20
İlk iki komut onemli.txt dosyasındaki yollardan (her satırda /blog/ornek-yazi/ gibi bir yol) hiç taranmayanları yazar. Üçüncü komut istekleri ilk dizine göre sayar. Taranmayan bir sayfanın iç link alıp almadığını kontrol edin, iç link yapısını Screaming Frog ile Gephi kullanarak çizmeyi ayrı bir yazıda anlattım. Tarama verisini trafik verisiyle tek tabloda birleştirmenin yolu SEO'da veri analizi yazımda yer alır.
Yapay zeka botları erişim kayıtlarında nasıl tanınır?
Yapay zeka botları erişim kayıtlarında kullanıcı aracısı metnindeki adlarıyla tanınır. Adların kaynağı şirketlerin kendi belgeleridir: OpenAI'nin tarayıcı belgesi, Anthropic'in destek yazısı, Perplexity'nin tarayıcı belgesi. Aşağıdaki tablo bu üç belgedeki sekiz adı şirketin bildirdiği amaçla birlikte verir.
| Şirket | Kayıttaki ad | Şirketin bildirdiği amaç |
|---|---|---|
| OpenAI | GPTBot | Üretken yapay zeka modellerinin eğitiminde kullanılabilecek içeriği tarar |
| OpenAI | OAI-SearchBot | Siteleri ChatGPT'nin arama özelliklerinde gösterir |
| OpenAI | ChatGPT-User | Kullanıcının ChatGPT'de başlattığı işlemde sayfayı ziyaret eder, otomatik tarama yapmaz |
| Anthropic | ClaudeBot | Model eğitimine katkı sağlayabilecek web içeriğini toplar |
| Anthropic | Claude-User | Kullanıcı Claude'a soru sorduğunda siteye erişir |
| Anthropic | Claude-SearchBot | Arama sonuçlarının kalitesini artırmak için web'i tarar |
| Perplexity | PerplexityBot | Siteleri Perplexity arama sonuçlarında gösterir, model eğitimi için taramaz |
| Perplexity | Perplexity-User | Kullanıcının sorusu üzerine sayfayı ziyaret eder |
Google-Extended kayıtlarda görünmez. Google bu adın ayrı bir kullanıcı aracısı metni olmadığını, robots.txt belirteci olarak kullanıldığını yazar. Kullanıcı aracısı yapay zeka botlarında da taklit edilebilir, üç şirket botlarının IP adreslerini JSON dosyası olarak yayınlar. OpenAI ile Perplexity, kullanıcının başlattığı isteklerde robots.txt kurallarının uygulanmayabileceğini belirtir.
Kayıtlar botun sayfayı istediğini gösterir, markanın yapay zeka cevaplarında geçip geçmediğini göstermez. O ölçümü yapay zeka görünürlüğü ölçümü yazımda anlattım.
Log analizi için hangi araçlar kullanılır?
Log analizi için üç araç seçeneği kullanılır: komut satırı, elektronik tablo, Screaming Frog Log File Analyser.
- Komut satırı: ek yazılım gerektirmez, dosyayı satır satır işler. Yukarıdaki komutlar bu yolun örneğidir.
- Elektronik tablo: süzülmüş Googlebot satırlarını Excel ya da Google Sheets'e alıp özet tabloyla gruplayın. Dosyayı önce komut satırında süzmek tabloyu küçültür.
- Screaming Frog Log File Analyser: Windows, macOS, Linux için masaüstü programıdır. Apache ile W3C Extended kayıt biçimlerini destekler.
Log File Analyser'ın resmi sayfasına göre program arama motoru botlarını otomatik doğrular, en çok ile en az taranan adresleri gösterir. Yüklediğiniz adres listesini kayıtlarla eşleştirerek taranmayan sayfaları, yetim sayfaları bulur. Ücretsiz sürüm 1.000 kayıt satırı ile tek projeyle sınırlıdır.
Log analizinde sık yapılan hatalar nelerdir?
Log analizinde sık yapılan altı hata aşağıdadır.
- Kullanıcı aracısına güvenip IP adresini doğrulamamak. Sahte Googlebot istekleri tarama sayısını olduğundan yüksek gösterir.
- CDN kullanan sitede yalnız kaynak sunucunun kaydına bakmak. Önbellekten karşılanan istekler o dosyada yoktur.
- Google-Extended adını kayıtlarda aramak. Google-Extended bir kullanıcı aracısı değil, robots.txt belirtecidir.
- Kullanıcı aracısını Chrome sürüm numarasıyla birlikte aramak. Google sürüm numarasının zamanla arttığını yazar, aramada joker karakter kullanılmasını önerir.
- Her 404 satırını hata saymak. Google, yerine yenisi konmadan kaldırılmış sayfada 404'ün doğru yanıt olduğunu belirtir.
- Görsel, CSS, JavaScript isteklerini sayfa taramasıyla birlikte saymak. Googlebot sayfayı işlemek için bu kaynakları da ister, adres listesini dosya uzantısına göre ayırın.
Erişim kayıtları paylaşılırken kişisel veri nasıl korunur?
Erişim kayıtları paylaşılırken kişisel veri, IP adresleri maskelenerek ya da yalnız bot satırları gönderilerek korunur. IP adresi kişisel veridir: Avrupa Komisyonu, Genel Veri Koruma Tüzüğü (GDPR) kapsamındaki kişisel veri örnekleri arasında IP adresini sayar. Kişisel Verileri Koruma Kurumu çerez rehberinde IP bilgisinin maskelenmesini kimlik belirleme riskini azaltan bir teknik olarak anar.
Ajansa ya da danışmana ham kaydı değil, süzülmüş googlebot.log dosyasını gönderin. Tüm kayıt gerekiyorsa aşağıdaki örnek komut IPv4 adreslerinin son bölümünü sıfırlar. Maskelenmiş adreste ters DNS sorgusu doğru sonuç vermez, Googlebot doğrulamasını maskelemeden önce yapın.
awk '{sub(/\.[0-9]+$/, ".0", $1); print}' access.log > access-maskeli.log
Log analizinin sonucu nasıl ölçülür?
Log analizinin sonucu, düzeltmeden sonra aynı komutlar yeni kayıtlarda çalıştırılıp iki dönemin sayıları karşılaştırılarak ölçülür. Eşit uzunlukta iki dönem seçin, şu dört değeri not edin.
- Parametreli adreslerin Googlebot istekleri içindeki payı.
- 301, 404, 5xx yanıtlarının sayısı.
- Önemli sayfa listesinden taranmayanların sayısı.
- Günlük Googlebot isteği sayısı.
awk '{print substr($4, 2, 11)}' googlebot.log | uniq -c
Bu komut Googlebot isteklerini güne göre sayar. Günlük sayıları Tarama İstatistikleri raporundaki toplam tarama isteği grafiğiyle yan yana koyun, iki kaynak aynı yönü gösteriyorsa ölçüm tutarlıdır.
Taha Yelkenci
2010'dan beri SEO. rankZup kurucusu. Sorunuz mu var? Bana yazın →
← Önceki yazı
Sonraki yazı →
Bunlar da ilginizi çekebilir
24 Ocak 2020 · 3 dk
10 Ağustos 2020 · 3 dk
1 Eylül 2019 · 3 dk