Rehberler

Web Sitenizi veya Uygulamanızı Yayınladıktan Sonra 404 Hataları Nasıl Düzeltilir

Uygulamanız yerelde çalışıyor ama yayından sonra sayfalar 404 dönüyorsa, en yaygın neden tek sayfalık uygulama (SPA) yönlendirmesinin eksik olmasıdır: sunucu, var olmayan /dashboard adlı bir dosya arar, çünkü bu rota yalnızca JavaScript içinde vardır. Düzeltme, uygulama rotaları için index.html sunan bir yedek kuraldır. Diğer nedenler arasında derleme çıktısında eksik dosyalar, büyük-küçük harfe duyarlı yollar, sondaki eğik çizgi farkları, yanlış bir temel yol ve hiç yayınlanmamış API rotaları yer alır.

Önce tam olarak hangi URL’nin 404 verdiğini ve oraya nasıl ulaştığınızı not edin. Örüntü, nedene doğrudan işaret eder.

Adım 1: Örüntüyü bulun

GördüğünüzBüyük olasılıkla nedenGidilecek adım
Ana sayfa çalışıyor; bağlantılar çalışıyor; ama yenileme ya da derin bir bağlantıyı açma 404 veriyorSPA yedeği yokAdım 2
Her sayfa 404 veriyor, ana sayfa dahilYanlış klasör yayınlanmış ya da derleme dağıtılmamışAdım 3
Sayfalar yükleniyor ama görseller, yazı tipleri ya da betikler 404 veriyorDerlemede eksik dosyalar ya da yanlış yollarAdım 4
/about/ ile çalışıyor, /about ile çalışmıyor (ya da tersi)Sondaki eğik çizgi işlemeAdım 5
/About çalışmıyor ama /about çalışıyorBüyük-küçük harfe duyarlı sunucuAdım 4
Sayfa yükleniyor ama /api/... veri istekleri 404 veriyorAPI yayınlanmamış ya da yönlendirilmemişAdım 6
Önceki bir siteden gelen eski URL’ler 404 veriyorEksik yönlendirmelerAdım 7
Yalnızca özel bir alan adındaDNS ya da alan adı kurulumuAdım 8

Gerçek durum kodunu görmek için geliştirici araçlarını açın (sağ tık → İncele), Ağ sekmesine gidin, sayfayı yeniden yükleyin ve ilk isteğin durumuna bakın.

Adım 2: SPA yedeğini ekleyin

Bu klasik sorundur. React, Vue ya da Svelte tek sayfalık bir uygulamada sunucuda yalnızca birkaç gerçek dosya bulunur: index.html ve birkaç JavaScript ile CSS dosyası. /dashboard ya da /projects/42 gibi rotaları tarayıcıdaki bir yönlendirici yönetir.

  • Bir bağlantıya tıklamak çalışır: yönlendirici URL’yi değiştirir ve yeni sayfayı sunucuya sormadan çizer.
  • Yenilemek ya da bağlantıyı doğrudan açmak başarısız olur: tarayıcı sunucudan /dashboard ister, sunucuda böyle bir dosya yoktur ve 404 döner.

Düzeltme, şu kuraldır: istek gerçek bir dosyayla eşleşmiyorsa, index.html’i 200 durum koduyla sun ve yönlendiricinin devralmasını sağla. Bunu nasıl ekleyeceğiniz sunucuya bağlıdır (ayrıntılar değiştiği için sunucunuzun güncel dokümanlarını kontrol edin):

SunucuTipik yedek kuralı
NetlifyYayınlanan klasörde /* /index.html 200 içeren bir _redirects dosyası
VercelTüm yollardan /index.html’e vercel.json içinde bir rewrite (framework ön ayarları bunu çoğu zaman kendisi halleder)
Cloudflare PagesEn üst düzeyde 404.html yoksa varsayılan olarak SPA tarzı yedek sunar
Nginxlocation / bloğunda try_files $uri $uri/ /index.html;
ApacheDosya olmayan istekleri index.html’e gönderen bir .htaccess rewrite kuralı
GitHub PagesSunucu tarafı rewrite yoktur; yaygın geçici çözümler hash yönlendirme ya da yönlendiren bir 404.html’dir

Kuralın gerçek dosyaları yutmadığından emin olun: /assets/app.js istekleri hâlâ JavaScript dosyasını döndürmelidir. Bunun yerine index.html dönüyorsa, “Failed to load module script” hatasıyla boş bir sayfa görürsünüz. Bkz. boş beyaz sayfa nasıl düzeltilir.

Ayrıca yönlendiriciye bir yakalayıcı (catch-all) rota verin; böylece hiçbir sayfayla eşleşmeyen URL’ler boş bir ekran yerine “Sayfa bulunamadı” mesajı göstersin.

Sunucu ayarlarını değiştiremiyorsanız, hash yönlendirme (/#/dashboard gibi URL’ler) sorunu önler, çünkü # sonrasındaki kısım hiçbir zaman sunucuya gönderilmez. Bu ilk tercih değil, geçici bir çözümdür: URL’ler daha çirkindir ve arama motorlarına daha az dostçadır.

Sunucuda sayfa oluşturan ya da derleme zamanında üreten çatılar (Next.js, Astro ve benzerleri) genellikle her sayfa için gerçek dosyalara ya da sunucu rotalarına sahiptir, bu yüzden bu sorun orada daha az yaygındır. Bunların karşılığı, derleme zamanında hiç üretilmemiş bir sayfadır.

Adım 3: Gerçekte neyin yayınlandığını kontrol edin

Her şey 404 veriyorsa, sunucu muhtemelen derlenmiş uygulamanızı sunmuyordur.

  • Doğru klasör. Sunucu, proje kökünü değil derleme çıktısını (Vite için genellikle dist, Create React App için build, statik bir Next.js dışa aktarımı için out) yayınlamalıdır.
  • Derleme çalıştı. Dağıtım günlüğünü okuyun. Derleme başarısız olduysa, sunucu hiçbir şey dağıtmamış ya da eski bir sürümü dağıtmış olabilir.
  • index.html en üst düzeyde yayınlanan klasörün içinde, bir alt klasörde değil.
  • Temel yol eşleşiyor. Uygulama example.com/app/ adresinde sunuluyorsa, o temel yolla derlenmelidir (Vite’ın base, React Router’ın basename), yoksa her rota ve varlık kaçırılır.

Adım 4: Eksik dosyaları ve yanlış yolları düzeltin

Sayfalar yükleniyor ama varlıklar 404 veriyorsa:

  • Büyük-küçük harf duyarlılığı. macOS ve Windows genellikle Logo.png ile logo.png’yi aynı dosya sayar. Çoğu Linux sunucusu bunu yapmaz. Her referansı gerçek dosya adıyla birebir eşleştirin.
  • Derlemenin dışındaki dosyalar. Vite’ta public/ içindeki dosyalar olduğu gibi kopyalanır ve kökten (/logo.png) referans verilir. Kodda içe aktarılan dosyalar paketlenir. Projede başka bir yerdeki bir dosya hiç yayınlanmamış olabilir.
  • Göreceli yollar. images/photo.jpg geçerli URL’ye göre çözülür, bu yüzden /blog/post-1 üzerinde bozulur. /images/photo.jpg kullanın.
  • Yerel diske kaydedilen yüklemeler. Kullanıcı yüklemeleri sunucunun kendi klasörüne yazıldıysa, yeni bir sürüm yayınlandığında kaybolurlar. Uygun bir dosya depolama kullanın.

Adım 5: Sondaki eğik çizgileri tutarlı yönetin

/about ile /about/ farklı URL’lerdir. Sunucular eğik çizgiyi ekleyip eklemediğinde ya da kaldırıp kaldırmadığında farklılık gösterir ve bağlantılarınız ya da yönlendiriciniz ile uyuşmazlık 404 hatalarına ya da yönlendirme döngülerine yol açabilir. Tek bir biçim seçin, bağlantılarınızı buna göre yapın ve sunucuyu diğer biçimi buna yönlendirecek şekilde ayarlayın. Tutarlılık arama motorlarına da yardımcı olur; aksi halde her sayfanın iki kopyasını görebilirler.

Adım 6: 404 veren API rotalarını düzeltin

Sayfa yükleniyor ama Ağ sekmesinde /api/... isteklerinin 404 döndüğünü görüyorsanız:

  • Arka uç yayınlanmamış. Statik bir sunucu yalnızca dosyaları sunar; bir arka ucun bir yerde çalışması gerekir.
  • Yol, üretimde farklı yönlendiriliyor. Geliştirmede bir proxy /api isteklerini ayrı bir sunucuya iletmiş olabilir. Üretimde sunucunun eşdeğer bir rewrite’a ihtiyacı vardır ya da ön yüzün API’nin gerçek adresine istek atması gerekir.
  • SPA yedeği isteği yakaladı. Bir API isteği 200 durum koduyla index.html döndürüyorsa, yedek kural çok geniştir. /api/* yollarını bu kuralın dışında tutun.

Yayınlanan uygulamanın /api/orders isteklerine 404 dönüyor, ama önizlemede çalışıyorlar. Önizlemede ve yayınlanmış uygulamada /api’nin nasıl yönlendirildiğini kontrol edin ve yayınlanmış ön yüzün arka uca aynı şekilde ulaşmasını sağlayın.

Adım 7: Eski URL’leri yönlendirin

Başka bir siteden taşındıysanız ya da yapıyı değiştirdiyseniz, insanların ve arama motorlarının hâlâ kullandığı eski URL’ler 404 verecektir. Her eski URL’den yeni adresine bir 301 (kalıcı) yönlendirme ekleyin. Bir liste tutun ve lansmandan sonra bir örneği test edin. WordPress sitesi taşıma rehberimiz bu listenin nasıl oluşturulacağını anlatır.

Adım 8: Alan adını kontrol edin

Uygulama sunucunun adresinde çalışıyor ama özel alan adınızda 404 veriyorsa, alan adı yanlış projeye işaret ediyor olabilir ya da sunucu alan adını henüz sitenize eklememiştir. DNS kayıtlarını ve sunucunun alan adı ayarlarını kontrol edin. Bkz. özel alan adı nasıl bağlanır.

Gerçek 404 sayfanızı yararlı hale getirin

Bazı 404’ler doğrudur: biri bir URL’yi yanlış yazmıştır. Bu sayfayı yardımcı olacak şekilde yapın:

  • Kısa bir mesaj ve ana sayfaya ile önemli bölümlere bağlantılar
  • Sitenizde arama varsa bir arama kutusu
  • Sitenin geri kalanıyla aynı üst bilgi ve gezinme

Kurulumunuz izin veriyorsa, var olmayan sayfalar için gerçek bir 404 durum kodu döndürün. 200 durum koduyla dönen bir “bulunamadı” mesajı, arama motorlarının yumuşak 404 dediği şeydir ve tarama sürelerini boşa harcayıp dizinlemeyi karıştırabilir.

Sık yapılan hatalar

  • Yalnızca tıklayarak test etmek. Her zaman derin URL’leri yeni bir sekmeye yapıştırıp yenileyerek test edin.
  • Her şeyi yakalayan bir yedek. Varlıklar ve API rotaları index.html döndürür, bu da boş sayfalara ve kafa karıştıran API hatalarına yol açar.
  • Yalnızca sunucuda bozulan uyumsuz büyük-küçük harf.
  • Derleme çıktısı yerine kaynak klasörü yayınlamak.
  • Yönlendirme olmadan URL’leri yeniden yapılandırmak. Her eski bağlantı bir 404’e dönüşür.

Mythex’te 404’ler

Mythex’te çalışma alanından yayınlarsınız ve statik ön yüzler statik siteler olarak dağıtılır. Yayınlanmış bir sayfa 404 veriyorsa, ajana tam URL’yi, yenilemede mi yoksa tıklamada mı olduğunu ve Ağ sekmesinin ne gösterdiğini verin ve yönlendirmeyi kontrol etmesini isteyin. Düzeltmeden sonra yeniden yayınlayın, çünkü canlı uygulama siz yeniden yayınlayana kadar bir anlık görüntüdür. Projeyi yakın zamanda değiştirdiyseniz ve canlı site eski görünüyorsa, yeniden yayınlayıp sert yenileme yapın. Derleme başarısız olursa yayın penceresindeki Fix with AI seçeneğini kullanın. Dokümanlarda Nasıl yayınlanır ve Yayın sorun giderme bölümlerine, ayrıca yapay zekayla yapılmış bir uygulamada hata ayıklama rehberimize bakın.

404 kontrol listesi

  • Tam olarak hangi URL’lerin 404 verdiği ve tıklamada, yenilemede ya da ikisinde birden olduğu not edildi
  • SPA yedeği uygulama rotaları için 200 durum koduyla index.html sunuyor
  • Yedek, gerçek dosyaları ve /api/* yollarını dışarıda bırakıyor
  • Yönlendiricide bir yakalayıcı “bulunamadı” rotası var
  • Yayınlanan klasör derleme çıktısı ve derleme başarılı
  • Temel yol, uygulamanın sunulduğu yerle eşleşiyor
  • Dosya adı büyük-küçük harfi her referansla eşleşiyor
  • Varlık yolları / ile başlıyor
  • Sondaki eğik çizgi biçimi tutarlı
  • API rotaları üretimde dağıtılmış ve yönlendirilmiş
  • Eski URL’ler için 301 yönlendirmeler var
  • Derin bağlantılar yeni bir sekmeye yapıştırılarak test edildi

Sorular

React uygulamamda bir sayfayı yenilediğimde neden 404 alıyorum?

Tek sayfalık bir uygulamada /dashboard gibi rotalar yalnızca JavaScript içinde var olur. Bir bağlantıya tıklamak çalışır, çünkü yönlendirici bunu tarayıcıda yönetir; ama yenileme, sunucudan var olmayan bir /dashboard dosyası ister. Düzeltme, uygulama rotaları için index.html sunan bir yedek kuraldır.

Netlify, Vercel ya da Nginx’te SPA yedeğini nasıl eklerim?

Netlify’da /* /index.html 200 içeren bir _redirects dosyası ekleyin. Vercel’de tüm yolları /index.html’e yönlendiren bir rewrite’ı vercel.json’a ekleyin. Nginx’te location bloğunda try_files $uri $uri/ /index.html; kullanın. Kurallar değiştiği için sunucunuzun dokümanlarını kontrol edin.

Yayından sonra görsellerim ya da dosyalarım neden 404 veriyor?

Genellikle dosya derleme çıktısında yoktur, yolun büyük-küçük harf durumu eşleşmiyordur (sunucular çoğu zaman dizüstü bilgisayarınızın aksine büyük-küçük harfe duyarlıdır) ya da yol bir eğik çizgiyle başlaması gerekirken göreceli yazılmıştır.

Eksik bir sayfa gerçek bir 404 durum kodu döndürmeli mi?

Evet. Yararlı bir bulunamadı sayfası sunun, ama kurulumunuz izin veriyorsa 404 durum koduyla. Arama motorları, 200 durum koduyla dönen bir “bulunamadı” mesajını yumuşak 404 olarak değerlendirir; bu da tarama süresini boşa harcar ve dizinlemeyi karıştırabilir.

Mythex · Pricing · Yapay zekayla her şeyi yapın · Web sitesi ve uygulama şablonları · Mythex karşılaştırmaları · Yapay zekayla uygulama geliştirme sözlüğü · Yapay zekayla uygulama geliştirme için ücretsiz araçlar · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)