Kırık link, sitendeki bir linkin 404, 410 ya da hiç yanıt vermeyen bir adrese gitmesi demek. Soft 404 bunun tersi: var olmayan bir sayfa "200 OK" diyor ya da sessizce ana sayfaya yönleniyor. Kırık linki ya düzeltir, ya kaldırır ya da ölü adresi aynı ihtiyacı karşılayan bir sayfaya yönlendirirsin. Soft 404'te ise bilinmeyen adreslerin gerçek bir 404 durum kodu döndürmesini sağlarsın; üstüne istediğin kadar yardımcı bir sayfa koyabilirsin.
Site menüsü rehberi bu konuya iki paragrafla değiniyor. Burası atölye kısmı.
AdSense çıkmaz sokakları neden önemsiyor?
AdSense program politikaları, yanıltıcı site gezintisi başlığı altında, sahte indirme düğmelerinin hemen yanında "Linking to content that doesn't exist" (var olmayan içeriğe link vermek) maddesini sayıyor. Eski bir yazıdaki birkaç ölü link aldatma sayılmaz. Ama menüsünün yarısı 404 veren bir site bitmemiş görünür. Hesap kurulum sayfası da açık: site yapım aşamasındaysa, açılmıyorsa ya da gezinmesi zorsa hesap kurulamıyor.
Soft 404 başka bir yerden can yakar. İnceleyen kişiye bozuk görünmez, ama kırık linklerini senden saklar. Yanlış yazılan her adres ana sayfaya düşüyorsa hatayı ne sen görürsün ne de link denetleyicin.
Tarama neye bakıyor?
Approvalens raporunda bu konuya dokunan beş bulgu var, her birinin kendi kuralı var:
| Bulgu | Neye istek atıyoruz | Ne sorun sayılıyor |
|---|---|---|
| Kırık bağlantılar | Açtığımız her sayfa, artı açmadığımız en fazla 120 site içi link (arşiv, etiket, sayfalama adresleri hariç) | 4xx kodu ya da yanıt yok (açtığımız sayfadaki sunucu hatası bir alt satıra gider). 401, 403, 429 ve 503 sayılmaz: genelde hız sınırına takıldığımızı gösterir. %3 altı not, %3 ya da 10 adresten itibaren uyarı, %15'ten itibaren kritik |
| Sayfalar hatasız açılıyor | Açtığımız her sayfa | Sunucu hatası, zaman aşımı, reddedilen bağlantı. 404'ler Kırık bağlantılar'da sayılır, hiçbir şey iki kez sayılmaz |
| Olmayan sayfalar 404 veriyor | Rastgele tek bir adres: /approvalens-<12 onaltılık karakter>-not-found |
Ana sayfaya yönlenip 200 (not) ya da başka bir yerde 200 (uyarı) |
| Kırık görseller | Alan adında barındırılan en fazla 40 görsel | %10 ya da fazlası yüklenmiyorsa |
| Kırık dış bağlantılar | Açtığımız sayfaların metnindeki en fazla 25 dış link | 404, 410 ya da artık çözülmeyen alan adı |
Soft 404 testi tek bir istek; erişim kaydında approvalens- arayarak bulabilirsin. Ayrıntılar yöntem sayfasında.

Gerçek bir örnek: taradığımız bir sitede istek gönderilen 873 site içi adresten 24'ü kırıktı, yaklaşık %3.

Kanıt listesi ölü adresi ve kodunu gösteriyor, ona link veren sayfayı değil. O sitede Aralık 2027 takvim sayfasını açıp HTML'inde 2028-ocak aramak, "sonraki ay" linkini birkaç saniyede buldurdu.
Soft 404 ve "her şey ana sayfaya" kalıbı
Google'ın tarama hataları sayfası soft 404'ü, kullanıcıya sayfanın var olmadığını söyleyen ama 200 (başarılı) durum kodu döndüren bir adres olarak tanımlıyor. Özel hata sayfasına da itirazı yok, yeter ki kod dürüst kalsın: "Custom 404 pages are created solely for users." Yani özel 404 sayfası yalnızca kullanıcı için; sunucu yine 404 döndürmeli.
Küçük sitelerde en sık görülen hâli, olmayan her adresi ana sayfaya yönlendirmek. Google'ın site taşıma rehberi çok sayıda eski adresi ana sayfa gibi tek ve alakasız bir hedefe yönlendirmemeni söylüyor; bunun soft 404 sayılabileceğini de ekliyor.
Kendin dene:
$ curl -sI https://ornekblog.com/boyle-bir-sayfa-yok-123 | head -3
HTTP/2 301
location: https://ornekblog.com/
Sorun bu. Görmek istediğin:
$ curl -sI https://ornekblog.com/boyle-bir-sayfa-yok-123 | head -1
HTTP/2 404
Genelde nereden çıkar:
- WordPress eklentisi: işi "bütün 404'leri ana sayfaya yönlendirmek" olan bir eklenti. Kapat.
- Apache:
ErrorDocument 404 https://ornekblog.com/. Apache'nin çekirdek belgeleri tam URL verildiğinde istemcinin asıl hata kodunu değil bir yönlendirme kodu aldığını yazıyor. Yerel yol kullan:ErrorDocument 404 /404.html. - nginx:
error_page 404 https://ornekblog.com/;. nginx URL hedeflerinde varsayılan olarak 302 döndürüyor. Yerineerror_page 404 /404.html;yaz. - JavaScript uygulaması: her rotada 200 koduyla "Bulunamadı" gösteren bir uygulama. Next.js ayrıntısı aşağıda.
404 mü, 410 mu, yönlendirme mi?
Google için neredeyse fark yok. HTTP durum kodları sayfası 429 hariç bütün 4xx kodlarına aynı şekilde davranıldığını söylüyor. 410 niyetini daha net anlatır ama mucize bekleme: Search Console sayfa dizine ekleme yardımı Googlebot'a bir adresi kalıcı olarak unutturmanın yolu olmadığını kabul ediyor ve ekliyor: sayfa yerine bir şey konmadan kaldırıldıysa 404 sorun değil.
Asıl karar, yönlendirmenin dürüst olup olmadığı. Google: sayfa taşındıysa ya da sitende açık bir karşılığı varsa 301 kullan.

2024 tarihli bir alışveriş rehberinin yerini 2026 sürümü aldıysa 301 tartışmasız. Tek bir ürünün silinen incelemesinin karşılığı ise kategori sayfası değil; o adres 404 versin, 404 sayfanda da kategori linki dursun. Zayıf yazıları toplu siliyorsan hangisini birleştirip hangisini atacağına düşük değerli içerik rehberi ile karar ver.
Bütün kırık linkleri bulmak
Tek kaynak yetmiyor, birleştir:
| Kaynak | Ne verir | Sınırı |
|---|---|---|
| Approvalens raporu | Ölü adresler ve kodları; URL kopyalama ve CSV düğmeleri | Yalnızca taramanın ulaştığı kadarı; link veren sayfayı söylemez |
| Search Console, sayfa dizine ekleme raporu | "Not found (404)" ve "Soft 404" nedenleri | Google'ın gördüğü adresler, başka sitelerden gelen eskiler dahil |
| URL Denetimi | "Referring page": Google'ın adresi bulurken kullanmış olabileceği sayfa | Tek seferde tek adres |
| Sunucu erişim kaydı | Her gerçek 404 isteği ve yönlendiren sayfa | Kayıtlara erişim gerekir |
| WordPress link denetleme eklentisi | Yazılardaki her link | Siteyi yavaşlatabilir; bir kez çalıştır, sonra kaldır |
Yaygın "combined" kayıt biçiminde (nginx'in varsayılanı) durum kodu 9., yol 7., yönlendiren sayfa 11. alan:
$ awk '$9 == 404 {print $7, $11}' access.log | sort | uniq -c | sort -rn | head
41 /wp-content/uploads/2023/04/eksi-maya.jpg "https://ornekblog.com/eksi-maya-yapimi/"
12 /category/genel/ "https://ornekblog.com/eski-yazi/"
Son sütun, hangi sayfayı düzenleyeceğini söylüyor.
Kırık linkler nereden çıkar?
| Neden | Nasıl görünür | Çözüm |
|---|---|---|
| Kalıcı bağlantı yapısı değişti | /2023/05/eksi-maya/ → /eksi-maya/ |
Tek bir kalıp yönlendirme, sonra yazılardaki linkleri güncelle |
| Yazı silindi ya da birleştirildi | İlgili yazı kutuları ve menü hâlâ ona gidiyor | Karşılığına 301, yoksa 404 ve linkleri kaldır |
| HTTP→HTTPS ya da alan adı değişikliği | Yazı içinde mutlak http://eski-alanadi.com/... linkleri |
Veritabanında arama-değiştirme ve site geneli yönlendirme |
| Taşıma sonrası görseller | Yeni sunucuda eksik /wp-content/uploads/... dosyaları |
Medya klasörünü yeniden yükle ya da görselleri kaldır |
| Göreli link hatası | /rehber/ sayfasındaki href="blog/yazi", /rehber/blog/yazi adresine gider |
Site içi yolları / ile başlat |
| Şablon linkleri | Var olmayan sayfalar için üretilen "sonraki ay", "sonraki sayfa", etiket linkleri | Linki yalnızca hedef varsa yazdır |
| Dış link çürümesi | Taşınan ya da kaybolan kaynaklar | Çalışan bir kaynakla ya da arşiv kopyasıyla değiştir |
Platforma göre çözüm
WordPress
WordPress, bir yazının eski kısa adını yenisine zaten 301 ile yönlendiriyor (`wp_old_slug_redirect`). Kalıcı bağlantı yapısı değiştiyse ya da yazı silindiyse yönlendirme eklentisi gerekir. Yoast SEO Premium'da yönlendirme yöneticisi "Yoast SEO → Redirects" altında; türler arasında "301 Moved Permanently" ve "410 Content Deleted" var. Rank Math'in Redirections modülü "Rank Math SEO → Redirections" altında ve o da "410 Content Deleted" sunuyor. Bağımsız yönlendirme eklentileri de aynı işi görür. Birini kullan, üçünü değil.
Taşıma sonrası eski mutlak adresler için WP-CLI'ın search-replace komutu serileştirilmiş veriyi bozmadan değiştiriyor. Önce --dry-run ile dene:
wp search-replace 'http://eski-alanadi.com' 'https://ornekblog.com' --skip-columns=guid --dry-run
Blogger
Blogger'da iki araç da hazır (Blogger Yardım): Settings → "Errors and redirects" → Custom redirects → Add. Silinen adresi ve hedefi gir; yazı silindiyse "Permanent" seçeneğini aç. Aynı bölümdeki Custom 404, Blogger'ın bulunamadı sayfasındaki mesajı değiştiriyor (ayarlar sayfası). Oraya arama kutunu ve en önemli etiket linklerini koy.
Next.js (App Router)
Bir kısa adın içeriği yoksa next/navigation içinden notFound() çağır, sayfayı app/not-found.tsx ile tasarla. not-found.js belgelerindeki akış uyarısına dikkat: akışla (streaming) gönderilen yanıtlarda 200, akışsız yanıtlarda 404 dönüyor. Akış durumunda Next.js sayfaya <meta name="robots" content="noindex"> ekliyor, yani Google sayfayı dizine almıyor. Bizim kontrol ise yalnızca durum koduna bakıyor, bu durumu yine işaretler. Gerçek 404 istiyorsan içeriğin var olduğunu akış başlamadan kontrol et.
Statik üretilen rotalarda export const dynamicParams = false, bilinmeyen kısa adlar için 404 döndürüyor. Yönlendirmeler next.config içine:
async redirects() {
return [{ source: '/blog/:slug', destination: '/rehber/:slug', permanent: true }]
}
permanent: true 308 gönderir; Google 308'i 301 ile aynı sayıyor. Yönlendirme işinden sonra fazladan adım olup olmadığına yönlendirme zinciri rehberinden bak. Silinen adresleri site haritasından da çıkar: XML site haritası hataları.
Sorun bütün siteyse
Çok sayıda sayfa 5xx hatası ya da zaman aşımı veriyorsa "Sayfalar hatasız açılıyor" bulgusu çıkar. Bu link sorunu değil, barındırma sorunu. Site kapalı veya kullanılamıyor rehberi ile başla.
Ücretsiz tarama site içi linklerine istek atar, uydurma bir adresle soft 404 testi yapar ve bulduğu her ölü adresi listeler.
Sık sorulan sorular
Kaç kırık link AdSense başvurumu reddettirir?
Google bir sayı açıklamıyor. Risk görünürlükle artıyor: ölü bir menü öğesi ya da kategori linki, 2019'dan kalma bir yazının dibindeki eski kaynak linkinden çok daha önemli.
Garanti olsun diye bütün 404'leri ana sayfaya yönlendireyim mi?
Hayır. Google çok sayıda eski adresi ana sayfa gibi alakasız tek bir sayfaya yönlendirmenin soft 404 sayılabileceğini söylüyor. Yalnızca gerçek bir karşılık varsa yönlendir.
Silinen yazılar için 404 yerine 410 şart mı?
Değil. Google 429 dışındaki bütün 4xx kodlarına aynı davranıyor. Yönlendirme aracın sunuyorsa ve silmenin bilinçli olduğunu kayda geçirmek istiyorsan 410 kullan.
Search Console hiç sahip olmadığım adresler için 404 gösteriyor. Düzeltmeli miyim?
Genelde hayır. Adres hiç var olmadıysa ya da karşılığı olmadan kaldırıldıysa doğru yanıt 404. Yalnızca kendi sayfalarının hâlâ link verdiği adresleri düzelt.
Eskimiş ya da yanlış bir şey mi gördün? Bize yaz, düzeltelim.
Bu rehberi İngilizce oku →Ücretsiz tarama
Kendi siteni kontrol et
Ücretsiz tarama: uygunluk puanı ve tüm sorunlar, genelde birkaç dakikada.