Google’da Neden Üst Sıralara Çıkamıyorum: En Sık Yapılan SEO Hataları

Yıllardır site yönetiyorsunuz, içerik üretiyorsunuz ama Google’da bir türlü istediğiniz sıraya çıkamıyorsunuz. “SEO yapıyoruz” diyorsunuz ama rakipleriniz sizin önünüzde. Bu yazıda teknik SEO açısından bakacağız konuya. Sysadmin gözüyle, sunucu tarafında yapılan hataları, log analizlerini ve düzeltme yollarını konuşacağız. Pazarlama değil, sistem yöneticisinin perspektifinden SEO.

Robots.txt ile Kendinizi Google’a Kapıyorsunuz

Bu hatayı düşündüğünüzden çok daha fazla sitede görüyorum. Development ortamından production’a geçişte robots.txt dosyası güncellenmeden kaldı, hepsi bu. Ama sonuç felakete yol açabiliyor.

# Robots.txt içeriğini kontrol et
curl -s https://siteniz.com/robots.txt

# Ya da wget ile
wget -q -O - https://siteniz.com/robots.txt

# Belirli bir user-agent için nasıl görünüyor kontrol et
curl -A "Googlebot" https://siteniz.com/robots.txt

Bir müşterinin sitesinde şunu gördüm:

User-agent: *
Disallow: /

Dev ortamında herkesin sitenizi görmesini engellemek için yazılmış, production’a taşınmış, kimse fark etmemiş. Site altı ay boyunca Google tarafından indekslenmemiş. Altı ay.

Doğru yapı şöyle olmalı:

User-agent: *
Disallow: /admin/
Disallow: /wp-admin/
Disallow: /private/
Allow: /

Sitemap: https://siteniz.com/sitemap.xml

Nginx log’larından Googlebot’un sitenizi ne sıklıkla ziyaret ettiğini de kontrol edebilirsiniz:

grep "Googlebot" /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

Bu komut son ziyaretleri tarihe göre gruplar. Eğer Googlebot hiç gelmiyorsa ya da çok seyrek geliyorsa, bir sorun var demektir.

HTTPS Yönlendirme Sorunları

SSL geçişini yaptınız, “tamam artık HTTPS’deyiz” dediniz ama yönlendirmeleri doğru kurgulamadınız. Google hem http hem https versiyonunu ayrı site olarak görüyor, link gücünüz ikiye bölünüyor.

# Tüm olası varyasyonları test et
curl -I http://siteniz.com
curl -I https://siteniz.com
curl -I http://www.siteniz.com
curl -I https://www.siteniz.com

# Redirect zincirini takip et
curl -L -I https://siteniz.com 2>&1 | grep -E "HTTP|Location"

Doğru Nginx konfigürasyonu şöyle olmalı:

# HTTP'yi HTTPS'e yönlendir
server {
    listen 80;
    server_name siteniz.com www.siteniz.com;
    return 301 https://siteniz.com$request_uri;
}

# WWW'yi non-www'ye yönlendir (ya da tersi, tutarlı olun)
server {
    listen 443 ssl;
    server_name www.siteniz.com;
    return 301 https://siteniz.com$request_uri;
}

# Ana server bloğu
server {
    listen 443 ssl;
    server_name siteniz.com;
    # ... geri kalan konfigürasyon
}

301 ile 302 farkına dikkat edin. 301 kalıcı yönlendirmedir ve link gücünü aktarır. 302 geçici yönlendirmedir ve aktarmaz. Pek çok geliştiricinin 302 kullandığını görüyorum, bu büyük bir hata.

# Yönlendirme kodunu kontrol et
curl -o /dev/null -s -w "%{http_code}n" http://siteniz.com

Sayfa Hızı Bir Lüks Değil, Zorunluluk

Google 2021’den beri Core Web Vitals’ı ranking faktörü olarak kullanıyor. Yavaş site, düşük sıra. Bu kadar basit. Peki sunucu tarafında ne yapabilirsiniz?

# Apache'de mod_deflate ile Gzip sıkıştırma
sudo a2enmod deflate

# /etc/apache2/mods-enabled/deflate.conf
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
    AddOutputFilterByType DEFLATE application/javascript application/json
    AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
    AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

Nginx için:

# nginx.conf içine ekleyin
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript 
           application/javascript application/xml+rss 
           application/json image/svg+xml;
gzip_disable "MSIE [1-6].";

Sıkıştırmanın çalışıp çalışmadığını kontrol edin:

curl -H "Accept-Encoding: gzip" -I https://siteniz.com | grep -i content-encoding
# content-encoding: gzip görmelisiniz

Browser caching için Nginx:

location ~* .(jpg|jpeg|png|gif|ico|css|js|pdf|txt|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Bir müşterimin sitesini optimize ettiğimde, sadece Gzip ve browser caching ekleyerek sayfa yüklenme süresini 4.2 saniyeden 1.8 saniyeye düşürdük. Organic trafik üç ayda yüzde otuz arttı. Sadece bu iki değişiklikle.

Duplicate Content: Google’ı Şaşırtmayın

Aynı içerik farklı URL’lerde erişilebilir durumdaysa, Google hangi sayfayı sıralamaya alacağını bilemez. Link gücünüz dağılır.

# Sitenizdeki duplicate URL patterns'ı bul
grep -E "GET /.*?.*" /var/log/nginx/access.log | 
  awk '{print $7}' | sort | uniq -c | sort -rn | head -30

Canonical tag ile doğru URL’yi Google’a söyleyin. Bu HTML tarafında yapılsa da Nginx’ten de header olarak ekleyebilirsiniz:

# Belirli sayfa tipleri için canonical header ekle
location / {
    add_header Link "<https://siteniz.com$request_uri>; rel="canonical"";
}

URL parametrelerinden kaynaklanan duplicate content için Nginx’te şu çözümü kullanabilirsiniz:

# UTM parametrelerini sil, canonical URL'ye yönlendir
if ($args ~* "utm_") {
    rewrite ^(.*)$ $1? permanent;
}

Bu yaklaşım tartışmalı, if kullanımı Nginx’te bazı durumlarda sorun çıkarabilir. Ama UTM parametreleri için oldukça güvenli.

404 ve 5xx Hataları Sizi Batırıyor

Kırık linkler hem kullanıcı deneyimini hem de SEO’yu olumsuz etkiliyor. Özellikle sitenizin farklı bölümlerine gelen 404’ler ciddi sorun.

# Son 24 saatteki 404'leri say
grep " 404 " /var/log/nginx/access.log | 
  awk '{print $7}' | sort | uniq -c | sort -rn | head -20

# 500 hatalarını izle
grep " 5[0-9][0-9] " /var/log/nginx/access.log | 
  awk '{print $7}' | sort | uniq -c | sort -rn | head -20

# Googlebot'un hangi URL'lerde 404 aldığını bul
grep "Googlebot" /var/log/nginx/access.log | grep " 404 " | 
  awk '{print $7}' | sort | uniq -c | sort -rn

Eski URL yapısından yeni yapıya geçiş yaptıysanız, redirect map kullanın. Nginx’te:

# /etc/nginx/redirect_map.conf
map $uri $redirect_uri {
    /eski-sayfa-1    /yeni-sayfa-1;
    /kategori/eski   /yeni-kategori;
    /blog/2020/yazi  /blog/yazi;
}

server {
    # ...
    include /etc/nginx/redirect_map.conf;
    
    if ($redirect_uri) {
        return 301 $redirect_uri;
    }
}

Bu yöntem, yüzlerce redirect’i yönetmek için çok daha temiz. Tek tek location blokları yazmak yerine bir map dosyası tutuyorsunuz.

Sitemap Yönetimi

Sitemap oluşturup Google Search Console’a eklemek yetmiyor. Dinamik, güncel ve doğru bir sitemap şart.

# Sitemap'in erişilebilir olduğunu kontrol et
curl -s -o /dev/null -w "%{http_code}" https://siteniz.com/sitemap.xml
# 200 görmelisiniz

# Sitemap boyutunu kontrol et (50MB sınırı var)
curl -s https://siteniz.com/sitemap.xml | wc -c

# XML geçerliliğini kontrol et
curl -s https://siteniz.com/sitemap.xml | xmllint --noout - 2>&1

Sitemap’te 404 veren URL var mı kontrol edin:

#!/bin/bash
# sitemap_check.sh
SITEMAP_URL="https://siteniz.com/sitemap.xml"

# URL'leri çek
URLs=$(curl -s $SITEMAP_URL | grep -oP '(?<=<loc>)[^<]+')

# Her URL'yi kontrol et
echo "$URLs" | while read url; do
    STATUS=$(curl -o /dev/null -s -w "%{http_code}" "$url")
    if [ "$STATUS" != "200" ]; then
        echo "HATA: $url - HTTP $STATUS"
    fi
done

Bu scripti cron’a ekleyin, her gün çalıştırın:

# Crontab'a ekle
0 6 * * * /usr/local/bin/sitemap_check.sh >> /var/log/sitemap_check.log 2>&1

Core Web Vitals ve Server-Side Optimizasyon

Largest Contentful Paint (LCP), First Input Delay (FID) ve Cumulative Layout Shift (CLS). Bunlar Google’ın ölçtüğü metrikler. Sunucu tarafından LCP’yi doğrudan etkileyebilirsiniz.

Time to First Byte (TTFB) LCP’nin en kritik bileşeni. TTFB’yi ölçün:

curl -o /dev/null -s -w "Connect: %{time_connect}snTTFB: %{time_starttransfer}snTotal: %{time_total}sn" 
  https://siteniz.com

TTFB 200ms altında olmalı. Daha yüksekse sunucu tarafında sorun var.

PHP-FPM kullananlar için:

# PHP-FPM pool ayarlarını optimize et
# /etc/php/8.1/fpm/pool.d/www.conf

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

Redis ile PHP session caching:

# php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

Database sorguları yavaşlatıyor mu? MySQL slow query log’u açın:

# MySQL'de slow query log
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';

# Slow query'leri analiz et
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

Hreflang ve Çok Dilli Site Sorunları

Türkiye’deki birçok şirket çok dilli site yönetiyor. Hreflang hataları yaygın ve ciddi.

# Hreflang tag'lerini kontrol et
curl -s https://siteniz.com | grep -i hreflang

# Header üzerinden de gönderebilirsiniz
# Nginx için:
add_header Link '<https://siteniz.com/tr/>; rel="alternate"; hreflang="tr", <https://siteniz.com/en/>; rel="alternate"; hreflang="en"';

Dil bazlı yönlendirme için Nginx’te GeoIP kullanabilirsiniz:

# nginx.conf
geoip_country /usr/share/GeoIP/GeoIP.dat;

map $geoip_country_code $lang {
    default  en;
    TR       tr;
    DE       de;
}

server {
    location / {
        root /var/www/html;
        # Dil bazlı yönlendirme yap ama zorunlu tutma
        # Kullanıcı tercihine saygı göster
    }
}

Log Analizi ile SEO Sorunlarını Erken Tespit Edin

En güçlü silahınız log dosyaları. Doğru analiz edince çok şey görürsünüz.

# GoAccess ile gerçek zamanlı log analizi
sudo apt install goaccess
goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/html/report.html

# Googlebot crawl hızını analiz et
grep "Googlebot" /var/log/nginx/access.log | 
  awk '{print $4}' | 
  sed 's/[//' | 
  cut -d: -f1,2 | 
  sort | uniq -c | 
  awk '{print $2, $1}' | 
  sort

# En çok crawl edilen sayfalar
grep "Googlebot" /var/log/nginx/access.log | 
  awk '{print $7}' | sort | uniq -c | sort -rn | head -20

# Googlebot'un aldığı hata kodları
grep "Googlebot" /var/log/nginx/access.log | 
  awk '{print $9}' | sort | uniq -c | sort -rn

Bu analizleri otomatize edin. Haftalık rapor alan bir cron scripti yazın, Google Search Console verisiyle karşılaştırın.

Structured Data ve Schema Markup Doğruluğu

Schema markup hatası olan siteler rich snippet alamaz, bu da tıklanma oranını düşürür. Sunucu tarafında doğrulama yapabilirsiniz:

# JSON-LD schema'yı sayfadan çek ve kontrol et
curl -s https://siteniz.com | 
  python3 -c "
import sys, json, re
html = sys.stdin.read()
schemas = re.findall(r'<script type="application/ld+json">(.*?)</script>', html, re.DOTALL)
for s in schemas:
    try:
        data = json.loads(s)
        print('Geçerli JSON-LD:', data.get('@type', 'Tip bulunamadı'))
    except json.JSONDecodeError as e:
        print('JSON Hatası:', e)
"

Sunucu Güvenliği ve SEO İlişkisi

Güvenlik açıkları olan siteler Google tarafından uyarı alır, hatta kara listeye girer. Bu SEO için tam felaket.

# Google Safe Browsing API ile kontrol
curl "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=API_KEY" 
  -H "Content-Type: application/json" 
  -d '{
    "client": {"clientId": "mycompany", "clientVersion": "1.0"},
    "threatInfo": {
      "threatTypes": ["MALWARE", "SOCIAL_ENGINEERING"],
      "platformTypes": ["ANY_PLATFORM"],
      "threatEntryTypes": ["URL"],
      "threatEntries": [{"url": "https://siteniz.com"}]
    }
  }'

# SSL sertifika süresini kontrol et
openssl s_client -connect siteniz.com:443 -servername siteniz.com 2>/dev/null | 
  openssl x509 -noout -dates

SSL sertifikanız süresi dolmak üzereyse, Googlebot bunu not eder. Certbot ile otomatik yenileme kurulmamışsa hemen kurun:

# Certbot otomatik yenileme
certbot renew --dry-run
# Başarılıysa cron'a ekle
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -

Sonuç

SEO’yu sadece pazarlama departmanına bırakmak en büyük hata. Sistem yöneticisi olarak sunucu tarafında yapılan onlarca şey, sitenizin Google’daki başarısını doğrudan etkiliyor. Robots.txt gözden geçirin, yönlendirmeleri kontrol edin, log dosyalarını düzenli analiz edin, sayfa hızını optimize edin.

Burada anlattıklarım teori değil. Bunların her birini sahada gördüm, her birini çözdüm. Bir site için altı ay boyunca robots.txt yüzünden kayıp yaşandı, bir diğeri yanlış yönlendirme nedeniyle trafigini ikiye böldü, bir başkası yavaş TTFB yüzünden rakiplerinin gerisinde kaldı.

Ayda bir kez sunucularınızı SEO gözüyle de gözden geçirin. Bir checklist oluşturun: robots.txt kontrolü, 404 analizi, yönlendirme kontrolü, SSL durumu, sayfa hızı ölçümü. Bu rutin, büyük sorunları küçükken yakalar. Ve unutmayın, teknik altyapı sağlamsa içeriğiniz çok daha etkili çalışır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir