Jak opravit chyby 404 po nasazení webu nebo aplikace
Pokud vaše aplikace funguje lokálně, ale stránky po nasazení vracejí 404, nejčastější příčinou je chybějící směrování jednostránkové aplikace (SPA): server hledá soubor /dashboard, který neexistuje, protože tato trasa existuje jen v JavaScriptu. Oprava je pravidlo záložního směrování, které vrací index.html pro aplikační trasy. Další příčiny jsou soubory chybějící ve výstupu sestavení, cesty citlivé na velikost písmen, rozdíly v koncovém lomítku, špatná základní cesta a API trasy, které nebyly nasazeny.
Nejdřív si zapište přesně, která URL vrací 404 a jak jste se na ni dostali. Vzorec obvykle přímo ukáže příčinu.
Krok 1: Najděte vzorec
| Co vidíte | Nejpravděpodobnější příčina | Kam dál |
|---|---|---|
| Úvodní stránka funguje; odkazy fungují; obnovení nebo přímé otevření hluboké adresy vrací 404 | Chybí záložní SPA směrování | Krok 2 |
| Každá stránka vrací 404, včetně úvodní | Publikována špatná složka, nebo se sestavení nenasadilo | Krok 3 |
| Stránky se načtou, ale obrázky, písma nebo skripty vrací 404 | Soubory chybí ve sestavení, nebo jsou cesty špatně | Krok 4 |
Funguje /about/, nefunguje /about (nebo naopak) | Zpracování koncového lomítka | Krok 5 |
/About nefunguje, ale /about ano | Server citlivý na velikost písmen | Krok 4 |
Stránka se načte, ale datová volání na /api/... vrací 404 | API není nasazeno nebo směrováno | Krok 6 |
| Staré URL z předchozího webu vrací 404 | Chybí přesměrování | Krok 7 |
| Jen na vlastní doméně | Nastavení DNS nebo domény | Krok 8 |
Pro zobrazení skutečného stavového kódu otevřete vývojářské nástroje (pravý klik → Prozkoumat), přejděte na záložku Síť, obnovte stránku a podívejte se na stav prvního požadavku.
Krok 2: Přidejte záložní SPA směrování
Tohle je klasický případ. V jednostránkové aplikaci React, Vue nebo Svelte má server jen hrstku skutečných souborů: index.html a několik JavaScriptových a CSS souborů. Trasy jako /dashboard nebo /projects/42 zpracovává směrovač v prohlížeči.
- Kliknutí na odkaz funguje: směrovač změní URL a vykreslí novou stránku, aniž by se ptal serveru.
- Obnovení nebo přímé otevření odkazu selže: prohlížeč se serveru zeptá na
/dashboard, server takový soubor nemá a vrátí 404.
Oprava je pravidlo, které říká: pokud požadavek neodpovídá skutečnému souboru, vraťte index.html se stavem 200 a nechte převzít směrovač. Jak to přidat, závisí na hostingu (ověřte aktuální dokumentaci hostingu, protože podrobnosti se mění):
| Hosting | Typické záložní pravidlo |
|---|---|
| Netlify | Soubor _redirects v publikované složce s řádkem /* /index.html 200 |
| Vercel | Přepis v vercel.json ze všech cest na /index.html (frameworkové předvolby to často řeší samy) |
| Cloudflare Pages | Když není žádný 404.html v nejvyšší úrovni, poskytuje výchozí záložní odpověď ve stylu SPA |
| Nginx | try_files $uri $uri/ /index.html; v bloku location / |
| Apache | Pravidlo přepisu v .htaccess, které posílá požadavky na neexistující soubory na index.html |
| GitHub Pages | Žádné přepisy na straně serveru; běžná řešení jsou směrování přes hash nebo 404.html, které přesměruje |
Ujistěte se, že pravidlo nepohltí skutečné soubory: požadavky na /assets/app.js musí dál vracet JavaScriptový soubor. Pokud místo něj vracejí index.html, dostanete prázdnou stránku s chybou „Failed to load module script“. Viz oprava prázdné bílé stránky.
Dejte také směrovači zachytávací trasu, aby URL, které neodpovídají žádné stránce, zobrazily přátelské „Stránka nenalezena“ místo prázdna.
Pokud nemůžete změnit nastavení serveru, směrování přes hash (URL jako /#/dashboard) problém obchází, protože část za # se na server nikdy neposílá. Je to spíš provizorní řešení než první volba: URL jsou méně hezké a hůř se indexují ve vyhledávačích.
Frameworky, které stránky renderují na serveru nebo je generují při sestavení (Next.js, Astro a podobné), obvykle mají skutečné soubory nebo serverové trasy pro každou stránku, takže tento problém je tam méně častý. Jejich ekvivalentem je stránka, která nebyla vygenerována při sestavení.
Krok 3: Zkontrolujte, co bylo skutečně nasazeno
Pokud se všechno vrací jako 404, server pravděpodobně neobsluhuje vaši sestavenou aplikaci.
- Správná složka. Hosting musí publikovat výstup sestavení (běžně
distpro Vite,buildpro Create React App,outpro statický export Next.js), ne kořen projektu. - Sestavení proběhlo. Přečtěte si log nasazení. Pokud sestavení selhalo, hosting možná nenasadil nic, nebo starou verzi.
index.htmlje v nejvyšší úrovni publikované složky, ne v podsložce.- Základní cesta sedí. Pokud je aplikace servírována z
priklad.cz/app/, musí být sestavena s touto základní cestou (baseve Vite,basenamev React Routeru), jinak každá trasa a každý asset mine cíl.
Krok 4: Opravte chybějící soubory a špatné cesty
Když se stránky načtou, ale assety vrací 404:
- Citlivost na velikost písmen. macOS a Windows obvykle berou
Logo.pngalogo.pngjako stejný soubor. Většina Linuxových serverů ne. Každý odkaz musí přesně odpovídat skutečnému názvu souboru. - Soubory mimo sestavení. Ve Vite se soubory v
public/kopírují beze změny a odkazují se z kořene (/logo.png). Soubory importované v kódu se zabalí do bundlu. Soubor někde jinde v projektu se nemusí nasadit vůbec. - Relativní cesty.
images/photo.jpgse vyhodnocuje vzhledem k aktuální URL, takže se rozbije na/blog/post-1. Použijte/images/photo.jpg. - Nahrané soubory uložené na lokální disk. Pokud se uživatelské nahrávky zapisovaly do vlastní složky serveru, po nasazení nové verze zmizí. Použijte správné úložiště souborů.
Krok 5: Jednotně řešte koncová lomítka
/about a /about/ jsou různé URL. Hostingy se liší v tom, zda lomítko přidávají nebo odebírají, a neshoda s vašimi odkazy nebo s směrovačem může vést k 404 nebo smyčkám přesměrování. Zvolte jeden styl, nechte odkazy používat ten samý a nastavte hosting, aby druhou variantu přesměroval na tu zvolenou. Konzistence pomáhá i vyhledávačům, které jinak mohou vidět dvě kopie každé stránky.
Krok 6: Opravte API trasy, které vracejí 404
Pokud se stránka načte, ale v záložce Síť se požadavky na /api/... vrací s 404:
- Backend není nasazen. Statický hosting slouží jen soubory; backend musí běžet někde jinde.
- Cesta se v produkci směruje jinak. Ve vývoji mohl proxy přeposílat
/apina samostatný server. V produkci hosting potřebuje ekvivalentní přepis, nebo frontend musí volat skutečnou adresu API. - Záložní SPA směrování to zachytilo. Požadavek na API, který vrací
index.htmlse stavem 200, znamená, že záložní pravidlo je příliš široké. Vyjměte z něj/api/*.
Publikovaná aplikace posílá požadavky na /api/orders a vrací 404, ale v náhledu fungují. Zkontrolujte, jak je /api směrováno v náhledu a v publikované aplikaci, a udělejte tak, aby publikovaný frontend dosáhl backendu stejným způsobem.
Krok 7: Přesměrujte staré URL
Pokud jste přešli z jiného webu nebo jste přestavěli strukturu, staré URL, která lidé a vyhledávače stále používají, budou vracet 404. Od každé staré URL přidejte trvalé přesměrování 301 na její nový domov. Veďte seznam a po spuštění otestujte vzorek. Náš návod ke stěhování WordPress webu pokrývá sestavení tohoto seznamu.
Krok 8: Zkontrolujte doménu
Pokud aplikace funguje na adrese hostingu, ale na vaší vlastní doméně vrací 404, doména může ukazovat na špatný projekt, nebo hosting k vašemu webu ještě nepřipojil doménu. Zkontrolujte záznamy DNS a nastavení domény u hostingu. Viz jak připojit vlastní doménu.
Udělejte skutečnou stránku 404 užitečnou
Některé 404 jsou správné: někdo překlepl URL. Udělejte z té stránky užitečnou:
- Krátkou zprávu a odkaz na úvodní stránku a klíčové sekce
- Vyhledávací pole, pokud web vyhledávání má
- Stejnou hlavičku a navigaci jako zbytek webu
Tam, kde to vaše nastavení umožňuje, vraťte pro neexistující stránky skutečný stavový kód 404. Zpráva „nenalezeno“ vrácená se stavem 200 je to, čemu vyhledávače říkají měkká 404, a může plýtvat jejich časem procházení a mást indexování.
Časté chyby
- Testovat jen klikáním. Vždy testujte vložením hlubokých URL do nové záložky a obnovením.
- Záložní pravidlo, které chytá všechno. Assety a API trasy vracejí
index.html, což způsobuje prázdné stránky a matoucí chyby API. - Nesouhlasící velikost písmen, která se projeví jen na serveru.
- Nasazení zdrojové složky místo výstupu sestavení.
- Přestavba URL bez přesměrování. Každý starý odkaz se stane 404.
404 v Mythex
V Mythex publikujete z pracovního prostoru a statické frontendy se nasazují jako statické weby. Pokud publikovaná stránka vrací 404, dejte agentovi přesnou URL, napište, zda se to děje při obnovení, nebo při kliknutí, a co ukazuje záložka Síť, a požádejte ho o kontrolu směrování. Po opravě publikujte znovu, protože živá aplikace je snímek, dokud ji znovu nepublikujete. Pokud jste nedávno projekt změnili a živý web vypadá staře, publikujte znovu a udělejte tvrdé obnovení. Pokud sestavení selže, použijte v dialogu publikace Fix with AI. Viz Jak publikovat a Řešení problémů s publikací v dokumentaci a náš návod jak ladit aplikaci postavenou s AI.
Kontrolní seznam 404
- Zapsáno, které URL vrací 404 a zda při kliknutí, obnovení, nebo obojím
- Záložní SPA pravidlo vrací
index.htmlpro aplikační trasy, se stavem 200 - Záložní pravidlo vynechává skutečné soubory a
/api/* - Směrovač má zachytávací trasu „nenalezeno“
- Publikována je složka výstupu sestavení a sestavení proběhlo
- Základní cesta odpovídá místu, kde je aplikace servírována
- Velikost písmen v názvech souborů odpovídá každému odkazu
- Cesty k assetům začínají
/ - Styl koncového lomítka je konzistentní
- API trasy nasazeny a směrovány v produkci
- 301 přesměrování pro staré URL
- Hluboké odkazy otestovány vložením do nové záložky
Otázky
Proč dostanu 404, když v React aplikaci obnovím stránku?
V jednostránkové aplikaci trasy jako /dashboard existují jen v JavaScriptu. Kliknutí na odkaz funguje, protože směrovač je vyřídí v prohlížeči, ale obnovení se server zeptá na soubor /dashboard, který neexistuje. Oprava je pravidlo záložního směrování, které pro aplikační trasy vrací index.html.
Jak přidám záložní SPA směrování na Netlify, Vercel nebo Nginx?
Na Netlify přidejte soubor _redirects s řádkem /* /index.html 200. Na Vercelu přidejte přepis v souboru vercel.json, který pošle všechny cesty na /index.html. Na Nginx použijte try_files $uri $uri/ /index.html; v bloku location. Ověřte si dokumentaci svého hostingu, protože pravidla se mění.
Proč mi obrázky nebo soubory po nasazení vrací 404?
Obvykle soubor není ve výstupu sestavení, velikost písmen v cestě nesouhlasí (servery jsou často citlivé na velikost písmen, kde váš notebook není), nebo je cesta relativní, i když by měla začínat lomítkem.
Má chybějící stránka vracet skutečný stav 404?
Ano. Zobrazte nápomocnou stránku nenalezeno, ale se stavem 404 tam, kde to vaše nastavení umožňuje. Vyhledávače považují zprávu „nenalezeno“ vrácenou se stavem 200 za měkkou 404, což plýtvá časem procházení a může mást indexování.