Sunucu logları ile SEO: cPanel loglarında Googlebot analizi
Search Console'daki tarama istatistikleri faydalı ama özet veridir. Hangi URL'nin kaç kez istendiğini, Googlebot'un hangi sayfalarda 404 aldığını ya da yeni yayınladığınız bir sayfaya ne zaman geldiğini tam olarak göremezsiniz. Bunun cevabı sunucunun kendi erişim loglarındadır.
Paylaşımlı hostingte bile bu loglara ulaşmak mümkün. cPanel ham logları indirmenize izin verir; gerisi birkaç grep ve awk komutu. Ücretli bir log analiz aracına gerek yok.
cPanel'de ham logları almak
cPanel'de Metrics bölümünde Raw Access simgesi var. Buraya girdiğinizde her alan adı için o ana kadar biriken logu .gz olarak indirebileceğiniz bir liste görürsünüz. Aynı ekranda iki ayar da bulunur:
- Archive logs in your home directory at the end of each stats run every 24 hours: Logları her gün ana dizininizdeki
logsklasörüne arşivler. Bunu mutlaka açıyorum; açmazsanız eski loglar bir süre sonra kaybolur. - Remove the previous month's archived logs from your home directory at the end of each month: Disk kotası dar değilse kapalı tutuyorum. Log analizi için en az 30 gün, tercihen 90 gün veri istiyorum.
Arşiv açıksa dosyalar genelde ~/logs/alanadi.com-Sep-2026.gz gibi isimlerle birikir. SSH erişiminiz varsa doğrudan orada çalışabilirsiniz; yoksa dosyaları indirip kendi bilgisayarınızda, Linux, macOS ya da Windows'ta WSL ile aynı komutları çalıştırabilirsiniz. DNS doğrulaması için host komutu gerekiyor; Debian ve Ubuntu'da dnsutils (yeni sürümlerde bind9-host) paketiyle gelir. Dosya adları ve konumlar hosting firmasına göre biraz değişebilir.
Combined log formatı alan alan
cPanel'deki Apache logları genelde "combined" formattadır. Tipik bir satır şöyle görünür:
66.249.66.1 - - [24/Sep/2026:06:12:45 +0300] "GET /blog/ornek-yazi/ HTTP/1.1" 200 18342 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"Boşluklara göre bölündüğünde alanlar şöyle sıralanır:
| awk alanı | Değer | Anlamı |
|---|---|---|
$1 | 66.249.66.1 | İstemcinin IP adresi |
$2, $3 | - - | Kimlik ve kullanıcı adı, pratikte boş |
$4 | [24/Sep/2026:06:12:45 | Tarih ve saat |
$5 | +0300] | Saat dilimi |
$6 | "GET | HTTP metodu |
$7 | /blog/ornek-yazi/ | İstenen URL (yol ve sorgu) |
$8 | HTTP/1.1" | Protokol |
$9 | 200 | Durum kodu |
$10 | 18342 | Gönderilen bayt |
| sonrası | "-" "Mozilla..." | Referrer ve user agent |
User agent içinde boşluk olduğu için onu alan numarasıyla değil, grep ile yakalamak daha kolay. İlk dokuz alan ise sabit kaldığı sürece awk ile rahatça okunur.
Googlebot satırlarını ayıklamak
Önce ay içindeki arşivleri tek dosyada birleştiriyorum, sonra user agent'ta Googlebot geçen satırları ayırıyorum:
# Arşivlenmiş logları tek dosyada birleştir (sıra önemli: eskiden yeniye)
zcat ~/logs/alanadi.com-Jul-2026.gz ~/logs/alanadi.com-Aug-2026.gz ~/logs/alanadi.com-Sep-2026.gz > access.log
# User agent'ında Googlebot geçen satırları ayır
grep -i 'googlebot' access.log > googlebot.log
wc -l googlebot.logBu liste henüz güvenilir değil. User agent herkes tarafından taklit edilebilir; kendini Googlebot olarak tanıtan scraper'lar ve SEO araçları çok yaygındır.
Gerçek Googlebot'u doğrulamak
Google'ın önerdiği yöntem iki adımlı DNS kontrolüdür. Önce IP adresinin ters DNS kaydına bakılır; alan adı googlebot.com ya da google.com ile bitmelidir. Sonra bu alan adı tekrar IP'ye çözülür ve aynı IP'ye çıkmalıdır:
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.1Bunu elle yapmak yerine benzersiz IP'ler için bir döngü kullanıyorum:
Google ayrıca crawler'larının IP aralıklarını JSON dosyaları olarak yayınlıyor; çok büyük loglarda DNS sorgusu yerine bu listelerle karşılaştırmak daha hızlıdır. Ayrıntılar Googlebot doğrulama belgesinde var.
Durum kodu dağılımı
İlk baktığım şey, Googlebot'un aldığı yanıtların dağılımı:
awk '{print $9}' dogrulanmis.log | sort | uniq -c | sort -rnSağlıklı bir sitede 200'ler baskındır. 301 oranı yüksekse iç linkler ya da sitemap eski URL'leri gösteriyor olabilir. 404'ler kırık iç linklere ya da dış linklere işaret eder. 5xx görüyorsanız sunucu Googlebot'a hata veriyor demektir ve bu, taramanın yavaşlamasına yol açabilir. Hangi URL'lerin 404 aldığını görmek için:
awk '$9 == 404 {print $7}' dogrulanmis.log | sort | uniq -c | sort -rn | head -30En çok taranan URL'ler
awk '{print $7}' dogrulanmis.log | sort | uniq -c | sort -rn | head -50Bu listede önemli sayfalarınızı görmeyi beklersiniz. Onların yerine parametreli URL'ler, filtre kombinasyonları, takvim sayfaları ya da iç arama sonuçları görüyorsanız Googlebot'un zamanı yanlış yerde harcanıyor olabilir. Parametreli istekleri ayrıca saymak için:
awk '$7 ~ /\?/ {split($7, a, "?"); print a[1]}' dogrulanmis.log | sort | uniq -c | sort -rn | head -20Bu komut soru işaretli URL'leri yollarına göre gruplar ve hangi sayfanın parametre varyasyonlarıyla şiştiğini gösterir. Bunun gerçekten bir sorun olup olmadığı sitenin büyüklüğüne bağlıdır; bunu crawl budget gerçekten sorun mu yazısında tartıştım.
Gün bazında tarama
awk '{print substr($4, 2, 11)}' dogrulanmis.log | uniq -cLog dosyası zaten zaman sırasında olduğu için burada sort kullanmıyorum; 24/Sep/2026 gibi tarihler alfabetik sıralanınca karışır. Çıktıda ani düşüşler genelde sunucu sorunlarıyla ya da robots.txt değişiklikleriyle çakışır. Ani artışlar ise yeni bir URL kalıbının keşfedildiğini gösterebilir; o günün en çok taranan URL'lerine bakmak sebebi hemen ortaya çıkarır.
Hangi Googlebot geliyor?
"Googlebot" tek bir tarayıcı değil. Aynı user agent ailesinde akıllı telefon ve masaüstü sürümleri var, görseller için ayrı bir Googlebot-Image var. Mobil öncelikli dizine ekleme nedeniyle çoğu sitede isteklerin büyük kısmının akıllı telefon sürümünden gelmesini beklerim. Kabaca ayırmak için:
# Akıllı telefon, görsel ve diğer Googlebot isteklerini say
awk -F'"' '{
ua = $6
if (ua ~ /Googlebot-Image/) t = "gorsel"
else if (ua ~ /Mobile/) t = "akilli-telefon"
else t = "masaustu-diger"
say[t]++
} END {for (t in say) print say[t], t}' dogrulanmis.log | sort -rnBurada alanları boşluk yerine çift tırnağa göre bölüyorum; combined formatta altıncı parça user agent'tır. Masaüstü isteklerinin oranı beklenenden yüksekse bu tek başına sorun değil, ama mobil sürümde bir engel olup olmadığını kontrol etmek için iyi bir sebeptir. Görsel isteklerini ayrı görmek de faydalı: sadece HTML sayfalarının taranmasına odaklanmak istediğinizde bu satırları analizden çıkarabilirsiniz.
Terminal istemeyenler için
Komut satırıyla uğraşmak istemiyorsanız, logu doğrudan tarayıcıda analiz eden ücretsiz log analiz aracını kullanabilirsiniz. Dosya tarayıcıda işlenir; durum kodları, bot dağılımı ve en çok istenen URL'ler aynı şekilde çıkar. Büyük dosyalarda ben yine de komut satırını tercih ediyorum, çünkü sonuçları başka betiklere aktarmak kolay.
Özetle
- cPanel > Metrics > Raw Access'te günlük arşivlemeyi aç, en az 30 gün log biriktir.
- Arşivleri birleştir, Googlebot satırlarını ayır.
- Ters ve ileri DNS ile gerçek Googlebot'u doğrula, sahte satırları at.
- Durum kodu dağılımına bak: 3xx, 4xx ve 5xx oranlarını not et.
- En çok taranan URL'lerde önemli sayfalarını ara, parametre şişmesini tespit et.
- Gün bazında taramayı izle, sapmaları sunucu ve site değişiklikleriyle eşleştir.
Bir sonraki adım, bu logları sitemap ile karşılaştırıp Googlebot'un hiç uğramadığı sayfaları bulmak. Onu da Google'ın hiç ziyaret etmediği sayfaları loglarla bulmak yazısında Python ile yaptım.
Comments / questions
If you have a question about any topic or wish to contact me: Telegram or send an email to [email protected] Thanks!
Related pages
- Google'ın hiç ziyaret etmediği sayfaları loglarla bulmak (2026)
- Crawl budget gerçekten sorun mu? Hangi sitede önemli, nasıl ölçülür (2026)
- CMS taşımasından sonra kaybolan URL'leri curl ile bulmak (2026)
- hreflang hatalarını Python ile denetlemek (2025)
- Bir sitenin iç bağlantı sayılarını komut satırından çıkarmak (2025)