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 logs klasö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ğerAnlamı
$166.249.66.1İstemcinin IP adresi
$2, $3- -Kimlik ve kullanıcı adı, pratikte boş
$4[24/Sep/2026:06:12:45Tarih ve saat
$5+0300]Saat dilimi
$6"GETHTTP metodu
$7/blog/ornek-yazi/İstenen URL (yol ve sorgu)
$8HTTP/1.1"Protokol
$9200Durum kodu
$1018342Gö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.log

Bu 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.1

Bunu elle yapmak yerine benzersiz IP'ler için bir döngü kullanıyorum:

dogrula.sh
#!/usr/bin/env bash
# Googlebot iddiasındaki IP'leri ters ve ileri DNS ile doğrular
awk '{print $1}' googlebot.log | sort -u > ipler.txt
: > dogru_ipler.txt

while read -r ip; do
  ad=$(host "$ip" | awk '/pointer/ {print $NF}' | sed 's/\.$//' | head -n 1)
  case "$ad" in
    *.googlebot.com|*.google.com)
      # İleri DNS aynı IP'ye dönüyor mu?
      if host "$ad" | awk '/address/ {print $NF}' | grep -qxF "$ip"; then
        echo "$ip" >> dogru_ipler.txt
      else
        echo "SAHTE (ileri DNS tutmuyor): $ip $ad"
      fi ;;
    *) echo "SAHTE: $ip ${ad:-ters kayıt yok}" ;;
  esac
done < ipler.txt

# Sadece doğrulanmış IP'lerden gelen satırları tut
awk 'NR==FNR {ok[$1]; next} $1 in ok' dogru_ipler.txt googlebot.log > dogrulanmis.log
wc -l dogrulanmis.log

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 -rn

Sağ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 -30

En çok taranan URL'ler

awk '{print $7}' dogrulanmis.log | sort | uniq -c | sort -rn | head -50

Bu 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 -20

Bu 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 -c

Log 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 -rn

Burada 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