SEO Denetim Bulguları: 14 Sitemde Tekrar Tekrar Çıkan Hatalar ve Çözümleri

Kendi 14 sitelik jekcms filomu denetlerken hep aynı sorunlar çıkıyor: boş yasal sayfalar, soft-404, bozuk hreflang, spam iç linkler — belirti, tespit, çözüm.

SEO Denetim Bulguları: 14 Sitemde Tekrar Tekrar Çıkan Hatalar ve Çözümleri

Kendi 14 sitelik jekcms filomu denetlerken hep aynı sorunlar çıkıyor: boş yasal sayfalar, soft-404, bozuk hreflang, spam iç linkler — belirti, tespit, çözüm.

Müşteri sitesi denetlemiyorum; kendi sitelerimi denetliyorum. On dört içerik sitesi, hepsi jekcms üzerinde, toplamda 5.500'ün üzerinde yazı — en büyüğü tek başına 2.300 yazıyı aşıyor. Aynı filoya aynı kontrolleri defalarca uygulayınca insan artık şaşırmıyor: karşıma çıkanlar neredeyse hiç egzotik değil. Her seferinde kılık değiştirmiş aynı bir avuç sorun.

Listeye geçmeden bir itiraf: bu yazının eski sürümü, denetlenen site ve hata sayılarına dair büyük bir toplam istatistikle açılıyordu. O rakamları sildim. Artık doğrulayamıyorum ve konusu "sorun bulmak" olan bir yazı, sahibinin doğrulayamadığı bir rakamla açılmamalı. Aşağıdaki her şey kendi kurulumlarımda yaşandı. Her bulgu için sıra aynı: belirti, nasıl tespit ettim, ne düzeltti.

Gizlice bomboş olan yasal sayfalar

Belirti: On dört sitenin dördünde gizlilik ve kullanım şartları sayfaları bembeyaz açılıyordu. Uzun süre kimse fark etmedi — kendi gizlilik politikasını kim okur ki? Ben de AdSense başvurusu hazırlarken fark ettim. Yani mümkün olan en kötü anda, çünkü boş yasal sayfa doğrudan ret gerekçesi düzeyinde bir kusur.

Tespit: Temanın legal.php dosyası diskte duruyordu ve boyutu gayet makuldü: 14.616 bayt. O 14.616 baytın tamamı NUL karakteriydi. Bir dosya transferi içeriği sıfırlarken uzunluğu korumuştu; "dosya var mı" kontrolü de boyut kontrolü de geçiyordu. Foyayı ortaya çıkaran tek satır:

grep -rlP '\x00' --include='*.php' themes/

Çözüm: Git'ten geri yükleme, sonra da hatanın tekrarını imkânsız kılmak. CI artık her push'ta NUL bayt ve boş PHP stub taraması yapıyor; bir şey bulursa build'i düşürüyor. O bekçi aynı gün, Haziran 2026'da yazıldı ve o günden beri ekmeğini fazlasıyla çıkardı.

Soft-404: aslında 404 olması gereken 200

Belirti: Search Console, gerçekten var olmayan URL'lerde "Soft 404" uyarısı veriyordu. Sayfalar boş bir iskelet döndürüyordu — header var, footer var, arası bomboş — ama durum kodu 200.

Tespit: Var olmadığını bildiğiniz bir URL'ye tek komut:

curl -sI https://ornek.com/blog/boyle-bir-yazi-yok | head -1

Çıktı HTTP/2 200 ise elinizde bir soft-404 var demektir.

Kök neden: Klasik bir PHP sıralama hatası. 404 durumu, header.php çıktı göndermeye başladıktan SONRA set ediliyordu; header'lar çoktan gitmiş olduğu için PHP sessizce 200'de kalıyordu. Çözüm: Durum kodunu tek bir bayt çıktı üretilmeden önce kararlaştırmak, üstüne hata sayfasına noindex meta eklemek. Uyarayım: Google'ın etkilenen bölümlere güveni yavaş geri döndü. Bu hatanın faturası gün değil ay cinsinden kesiliyor.

87 sayfanın ilan ettiği tek bir hreflang çifti

Belirti: Türkçe dokümantasyon sayfaları var, indekslenmiş, içerik olarak da gayet iyi — ama Türkçe sorgularda beklenenin altında performans gösteriyor.

Tespit: Derin bir docs sayfasını curl'leyip head kısmını gerçekten okudum. 87 docs sayfasının HER BİRİ, hangi sayfada olursanız olun aynı hreflang çiftini ilan ediyordu: /docs ve /tr/dokumantasyon. Kendini ilan eden tek bir sayfa yoktu. Google, hreflang kümesinin karşılıklı olmasını ve öz-referans içermesini şart koşar; başkasının URL'lerini ilan ederseniz kümenin tamamı sessizce çöpe gider.

Çözüm: Çift artık istek yolundan üretiliyor; her sayfa kendi iki dil varyantını ilan ediyor. Türkçe sluglar da makine aynası İngilizce değil, gerçekten yerelleştirilmiş (/tr/hakkimizda, /tr/fiyatlandirma). Bu maceranın uzun hali hreflang ve canonical strateji yazısında.

Yaklaşık 2.700 yazıya dokunan veritabanı kayması

Belirti: Sinsi türden — hiçbir yerde hata sayfası yok, yazılar sadece sessizce yanlış davranıyor. Yetim kategori referansları. Dizin öneki eksik görsel yolları: yazı sorunsuz açılıyor ama hero görseli 404. Birbiriyle çelişen alanlar.

Tespit: Her sitenin veritabanına karşı koşulan bir SQL tarama seti. Kalıp hep aynı: hiçliğe işaret eden referansları bul. Örneğin artık var olmayan kategorilere bağlı yazılar:

SELECT p.id, p.slug FROM posts p
LEFT JOIN categories c ON c.id = p.category_id
WHERE c.id IS NULL;

Çözüm: Haziran 2026'da on dört veritabanında tek scriptli onarım turu — toplamda yaklaşık 2.700 yazıya dokunuldu. Asıl ders onarım değildi ama. Ders şuydu: kayma görünmez biçimde birikiyor. Tarama sorguları artık bir dosyada yaşıyor ve düzenli aralıklarla yeniden koşuluyor; "bir tuhaflık var" hissine kalmıyor.

Yanlış meta taşıyan 137 yazı

Belirti: Sayfayla eşleşmeyen arama snippet'leri — başka yazılara ait ya da hiçbir şeye ait olmayan meta açıklamaları. Ziyaretçi bir şey bekleyerek tıklıyor, başka bir şeye iniyor. Bu uyumsuzluk davranışa, davranış da sıralamaya yansıyor.

Tespit: Aynı filo taraması sırasında çıktı. Kayıtlı meta açıklamayı bağlı olduğu yazıyla karşılaştırın; yazının hiç değinmediği konulardan bahseden açıklama, hatayı ele veriyor.

Çözüm: 137 hatalı meta tek seferde temizlendi. Sezgiye aykırı ama doğru: boş meta açıklama, yanlış olanından iyidir. Google snippet'i gerçek içerikten üretir ve onun tahmini bir yalandan her zaman daha isabetlidir.

Sitelerimi katalog spamına çeviren otomatik linkleyici

Bu yara tamamen kendi açtığım bir yara; sahiplenerek anlatayım.

Belirti: Aynı anahtar kelimenin her geçtiği yerde linke dönüştüğü sayfalar, paragraf paragraf. Tek tek bakınca her link savunulabilir görünüyordu. Toplamda ise siteler affiliate kataloğu gibi okunuyordu. Bunun bir AdSense reddine katkı verdiğine inanıyorum — şablon kokan metnin üzerine mekanik iç linkleme bindiğinde, incelemecinin "reklam için üretilmiş" refleksi tam olarak buna tetikleniyor.

Tespit: Dürüst cevap: göz. Rastgele beş yazı açın ve bir yabancı gibi okuyun. Yazı başına link sayan bir sorgu aykırı değerleri doğrular, ama sorunu ölçmeden önce zaten görürsünüz.

Çözüm: Yavaş ve sıkıcı olanı. Yazı yazı, linkler editoryal seçildi — okurun gerçekten gitmek isteyeceği yerde kaldı, geri kalan her yerde silindi. Muhakemenin scripti yok. Otomatik linkleyici hâlâ alet çantamda ama sıkı frenli çalışıyor ve çıktısı yayına girmeden gözden geçiriliyor.

Hayır demeyi bilmeyen sayfalama

Belirti: On iki gerçek sayfası olan bir blogda ?page=500, 200 koduyla boş bir liste döndürüyordu. Tarayıcılar bu URL'leri buldu, istemeye devam etti ve crawl bütçesini sonsuz bir hiçlikte yaktı.

Tespit:

curl -so /dev/null -w '%{http_code}\n' 'https://ornek.com/blog?page=9999'

Çözüm: Aralık dışı sayfa numaraları jekcms'te artık gerçek 404 döndürüyor. Küçük bir değişiklik; crawl istatistiklerindeki etkisi ise anında görünür oldu.

Yanlış dildeki excerpt'ler

Belirti: İki dilli sitelerde Türkçe listeleme sayfalarında İngilizce özetler, tersinde de tam tersi. Ziyaretçiye sadece özensiz görünüyor. Google içinse, yol bazında tertemiz ayrılmış sayfaların dil sinyalini bulandırıyor.

Tespit: Kaba sezgisel yöntemler burada gayet iş görüyor. İngilizce bağlaçlar Türkçe bir excerpt alanında doğal yolla neredeyse hiç geçmez:

SELECT id, slug FROM posts
WHERE lang = 'tr'
AND (excerpt LIKE '% the %' OR excerpt LIKE '% and %');

Sütun adlarını kendi şemanıza uyarlayın; fikir taşınabilir.

Çözüm: Excerpt'i doğru dildeki gövdeden yeniden üretmek — sonra da yanlış metnin nereden sızdığını bulmak. Benimkiler, varsayılan olarak yanlış alandan okuyan bir import yolundan sızıyordu; veriyi düzeltip boruyu düzeltmeseydim, temizlik tam olarak bir sonraki import'a kadar dayanırdı.

Bu listenin ortak paydası

Bunların hiçbiri içerik kalitesi sorunu değil. Hepsi tesisat. Ve her biri bir curl komutu, bir grep ya da kısa bir SQL sorgusuyla tespit edilebildi — ortada ücretli bir araç yok. Bütün rutini tek paragrafa sıkıştırmam gerekse: var olmaması gereken URL'leri isteyip durum koduna bakın, hreflang etiketlerini ana sayfada değil derin bir sayfada okuyun, dosyalarınızı imkânsız olana karşı tarayın ve veritabanını hiçliğe işaret eden referanslar için süpürün.

Mekanik olanların değil de stratejik olanların listesi ayrı bir yazı: Google sıralamalarını öldüren 5 CMS hatası. Kontrolleri alışkanlıklarınıza değil platforma gömmek isterseniz, jekcms'in artık neleri otomatik yaptığı dokümantasyonda. Bu düzeltmelerin birkaçının ürüne kod olarak girmesinin tek bir nedeni var: aynı şeyi ikinci kez bulmaktan yoruldum.

Yazar

Celil Uyanıkoğlu

25 yılı aşkın süredir bilgi işlem sektöründe çalışan bir bilgisayar mühendisi. jekcms'i geliştiriyor ve kendi yayın ağındaki sitelerin tamamını jekcms üzerinde çalıştırıyor — burada yayımlanan her rehber önce o canlı kurulumlarda denenir.

Tüm yazılarını gör →

Hemen Sipariş Verin

Tek seferlik ödeme, ömür boyu erişim. Kurulum 30 dakika.

Fiyatlara Bak
  • 30 dakikada kurulum ve yayın
  • 13 profesyonel tema
  • AVIF/WebP görsel optimizasyonu
  • Otomatik SEO — Sitemap, Schema.org
  • ZeroTrack çerezsiz analitik

Yeniliklerden ilk sen haberdar ol

Yeni özellikler, sürüm notları ve CMS rehberleri — ayda birkaç e-posta, spam yok.