Deploy хийсний дараах 404 алдааг хэрхэн засах вэ
Хэрэв апп тань локалд ажилладаг ч deploy хийсний дараа хуудсууд 404 буцаавал хамгийн түгээмэл шалтгаан бол нэг хуудсан апп (SPA) routing дутуу байгаа явдал: сервер /dashboard гэх файлыг хайдаг ч тэр файл байдаггүй, учир нь тэр маршрут зөвхөн JavaScript дотор байдаг. Засвар нь аппын маршрутуудад index.html үйлчлэх fallback дүрэм юм. Бусад шалтгаан нь build гаралтаас дутсан файлууд, том жижиг үсэгтэй зам, trailing slash-ийн зөрүү, буруу base path, мөн хэзээ ч deploy хийгдээгүй API маршрутууд байна.
Эхлээд ямар URL 404 гарч байгааг, хаанаас хүрсэнийг тэмдэглэ. Хэв маяг нь шууд шалтгаан руу заадаг.
Алхам 1: Хэв маягийг ол
| Юу харагдаж байна | Магадлалтай шалтгаан | Очих |
|---|---|---|
| Нүүр хуудас ажилладаг; линк дарахад ажилладаг; гэхдээ шинэчлэх эсвэл шууд гүн линк нээхэд 404 | SPA fallback байхгүй | Алхам 2 |
| Бүх хуудас, нүүр хуудсыг оруулаад 404 | Буруу хавтас нийтлэгдсэн, эсвэл build deploy хийгдээгүй | Алхам 3 |
| Хуудсууд ачаалдаг, гэхдээ зураг, фонт, скрипт 404 | Build-д дутуу файл, эсвэл буруу зам | Алхам 4 |
/about/-р ажилладаг, /about-р бүтэлгүйтдэг (эсвэл эсрэгээр) | Trailing slash-ийн зохицуулалт | Алхам 5 |
/About бүтэлгүйтдэг, /about ажилладаг | Том жижиг үсэгт мэдрэмтгий сервер | Алхам 4 |
Хуудас ачаалдаг, гэхдээ /api/... өгөгдлийн дуудлага 404 | API deploy хийгдээгүй эсвэл зам холбогдоогүй | Алхам 6 |
| Өмнөх сайтын хуучин URL-ууд 404 | Redirect дутуу | Алхам 7 |
| Зөвхөн захиалгат домэйн дээр | DNS эсвэл домэйн тохиргоо | Алхам 8 |
Жинхэнэ статус кодыг харахын тулд developer tools нээ (хулганы баруун товчоор → Inspect), Network таб руу ор, дахин ачаалуулаад эхний хүсэлтийн статусыг хар.
Алхам 2: SPA fallback нэм
Энэ бол сонгодог арга. React, Vue эсвэл Svelte нэг хуудсан аппд сервер зөвхөн цөөн жинхэнэ файлтай байдаг: index.html болон зарим JavaScript, CSS. /dashboard эсвэл /projects/42 гэх маршрутуудыг хөтөч дотрох router боловсруулдаг.
- Линк дарахад ажилладаг: router URL-ийг өөрчилж, сервертэй асуухгүйгээр шинэ хуудсыг зурдаг.
- Шинэчлэх эсвэл линкийг шууд нээхэд бүтэлгүйтдэг: хөтөч
/dashboard-ийг серверээс асуух ба серверт тийм файл байхгүй тул 404 буцаана.
Засвар нь дүрэм юм: хүсэлт жинхэнэ файлтай таарахгүй бол 200 статустай index.html үйлчилж, router-т хяналтыг өгнө. Яаж нэмэх нь хостоос хамаарна (хостын одоогийн баримт бичгийг шалга, учир нь дэлгэрэнгүй нь өөрчлөгддөг):
| Хост | Ердийн fallback дүрэм |
|---|---|
| Netlify | Нийтлэгдсэн хавтсанд /* /index.html 200 агуулсан _redirects файл |
| Vercel | Бүх замыг /index.html руу чиглүүлэх rewrite vercel.json-д (framework preset ихэвчлэн үүнийг хийдэг) |
| Cloudflare Pages | Үндсэн түвшний 404.html байхгүй бол SPA маягийн fallback-ийг өгөгдмөлөөр хийдэг |
| Nginx | location / блокт try_files $uri $uri/ /index.html; |
| Apache | Файл биш хүсэлтийг index.html руу чиглүүлэх .htaccess rewrite дүрэм |
| GitHub Pages | Серверийн талын rewrite байхгүй; түгээмэл тойрох арга бол hash routing эсвэл дахин чиглүүлдэг 404.html |
Дүрэм жинхэнэ файлуудыг бүү залгиг: /assets/app.js хүсэлт JavaScript файлаа буцаах ёстой. Хэрэв index.html буцаавал “Failed to load module script” алдаатай хоосон хуудас гарна. Харна уу: цагаан хоосон хуудсыг хэрхэн засах вэ.
Мөн router-т catch-all маршрут өгөөрэй, ингэснээр ямар ч хуудсанд таарахгүй URL хоосон биш, харин “Хуудас олдсонгүй” гэсэн найрсаг мессеж харуулна.
Серверийн тохиргоог өөрчилж чадахгүй бол hash routing (/#/dashboard шиг URL) нь асуудлыг тойрдог, учир нь #-ийн дараах хэсэг серверт хэзээ ч очдоггүй. Энэ нь эхний сонголт биш, түр шийдэл: URL илүү муухай, хайлтын системд бага ээлтэй.
Серверт хуудсуудыг үүсгэдэг эсвэл build үед гаргадаг framework (Next.js, Astro болон төстэй) ихэвчлэн хуудас бүрт жинхэнэ файл эсвэл сервер маршрут байдаг тул энэ асуудал тэнд бага тохиолддог. Тэдгээрийн эквивалент нь build үед үүсэж амжаагүй хуудас байна.
Алхам 3: Юу үнэхээр deploy хийгдсэнийг шалга
Бүгд 404 болвол сервер таны build хийсэн аппыг үйлчлээгүй байх магадлалтай.
- Зөв хавтас. Хост нь build гаралтыг (Vite-д ихэвчлэн
dist, Create React App-дbuild, статик Next.js export-дout) нийтлэх ёстой, төслийн үндсийг биш. - Build ажилласан. Deploy лог уншаарай. Build бүтэлгүйтвэл хост юу ч deploy хийгээгүй эсвэл хуучин хувилбар үлдсэн байж болно.
index.htmlнийтлэгдсэн хавтасны үндсэн түвшинд байх ёстой, дэд хавтаст биш.- Base path таарч байна. Апп
example.com/app/дээр үйлчилж байвал тэр base-ээр build хийгдсэн байх ёстой (Vite-ийнbase, React Router-ийнbasename), эс бөгөөс маршрут бүр болон asset бүр алдана.
Алхам 4: Дутуу файл, буруу замыг засах
Хуудсууд ачаалдаг ч asset-ууд 404 болбол:
- Том жижиг үсэг. macOS болон Windows нь ихэвчлэн
Logo.pngбаlogo.png-ийг нэг файл гэж үздэг. Ихэнх Linux сервер үздэггүй. Лавлагаа бүрийг жинхэнэ файлын нэртэй яг таарууулаарай. - Build-ээс гадуур файлууд. Vite-д
public/-д байгаа файлууд хуулагдаж, үндсээс (/logo.png) заагдана. Кодонд импорт хийсэн файлууд багцлагдана. Төслийн өөр газар байгаа файл огт deploy хийгдээгүй байж болно. - Харьцангуй зам.
images/photo.jpgнь одоогийн URL-д харьцуулан шийдэгддэг тул/blog/post-1дээр эвдэрнэ./images/photo.jpgашигла. - Локал дискэнд хадгалсан upload. Хэрэглэгчдийн upload серверийн өөрийн хавтаст бичигдсэн бол шинэ хувилбар deploy хийхэд алга болно. Зохих файлын хадгалалт ашигла.
Алхам 5: Trailing slash-ийг тогтвортой зохицуул
/about ба /about/ хоёр өөр URL. Хостууд slash нэмэх эсвэл хасах эсэхээр ялгаатай, мөн линк эсвэл router-тай зөрвөл 404 эсвэл redirect loop гарч болно. Нэг хэлбэр сонгож, линкүүдээ түүнтэй тааруул, хостыг нөгөө хэлбэрийг түүн рүү чиглүүлэхээр тохируул. Энэ нь хайлтын системд мөн тустай, эс бөгөөс хуудас бүрийн хоёр хуулбарыг харж магадгүй.
Алхам 6: 404 гардаг API маршрутуудыг засах
Хуудас ачаалдаг ч Network таб /api/... хүсэлтүүдэд 404 буцаавал:
- Backend deploy хийгдээгүй. Статик хост зөвхөн файл үйлчилдэг; backend хаа нэгтээ ажиллах ёстой.
- Замыг production дээр өөрөөр чиглүүлдэг. Хөгжүүлэлтэд proxy нь
/api-г тусдаа серверт дамжуулж байсан байж болно. Production дээр хосттой тэнцэх rewrite хэрэгтэй, эсвэл front end нь API-гийн жинхэнэ хаягийг дуудах ёстой. - SPA fallback түрүүлж барьсан. API хүсэлт
index.html-ийг 200 статустайгаар буцаавал fallback дүрэм хэт өргөн байна./api/*-г түүнээс хасаарай.
Нийтлэгдсэн аппын /api/orders хүсэлтүүд 404 буцааж байна, гэхдээ preview дээр ажиллаж байна. /api-г preview болон нийтлэгдсэн аппад хэрхэн чиглүүлж байгааг шалгаад, нийтлэгдсэн front end backend-д ижил аргаар хүрдэг болго.
Алхам 7: Хуучин URL-уудыг дахин чиглүүл
Хэрэв өөр сайтаас шилжсэн эсвэл бүтцээ өөрчилсөн бол хүмүүс болон хайлтын системүүд ашигласан хуучин URL-ууд 404 болно. Хуучин URL бүрээс шинэ байршил руу 301 (байнгын) redirect нэм. Жагсаалт хөтөл, хөөргөсний дараа дээжийг туршаарай. WordPress сайтыг шилжүүлэх гарын авлага энэ жагсаалтыг бүтээхэд тусална.
Алхам 8: Домэйнээ шалга
Хэрэв апп хостын хаяг дээр ажиллаж байгаа ч захиалгат домэйн дээр 404 гарвал домэйн буруу төсөл рүү заасан эсвэл хост тань уг домэйнийг сайтдаа хараахан холбоогүй байж болно. DNS бичлэг болон хостын домэйн тохиргоог шалга. Захиалгат домэйн хэрхэн холбох вэ харна уу.
Өөрийн жинхэнэ 404 хуудсыг тусламжтай болго
Зарим 404 зөв: хэн нэгэн URL-аа буруу бичсэн. Тэр хуудсыг тусламжтай болго:
- Богино мессеж ба нүүр хуудас болон гол хэсгүүдэд линк
- Сайтад хайлт байвал хайлтын талбар
- Бусад сайтын толгой хэсэг ба навигацитай адил
Тохиргоо зөвшөөрвөл байхгүй хуудсанд жинхэнэ 404 статус буцаа. 200 статустай “олдсонгүй” мессеж нь хайлтын системд зөөлөн 404 гэж нэрлэгддэг, энэ нь тэдний crawl хугацааг дэмий үрж индекслэлтийг төөрөгдүүлдэг.
Түгээмэл алдаа
- Зөвхөн дарж турших. Үргэлж гүн URL-ийг шинэ таб дээр буулгаж, шинэчлэн туршаарай.
- Бүгдийг барьдаг fallback. Asset болон API маршрут
index.htmlбуцааж, хоосон хуудас болон төөрөгдүүлсэн API алдаа үүсгэдэг. - Зөвхөн сервер дээр бүтэлгүйтдэг том жижиг үсгийн зөрүү.
- Эх хавтсыг deploy хийх build гаралтын оронд.
- URL-ийг redirect-гүй өөрчлөх. Хуучин линк бүр 404 болно.
Mythex дэх 404
Mythex-д та workspace-аас нийтэлдэг, статик front end нь статик сайт болгон deploy хийгддэг. Нийтлэгдсэн хуудас 404 гарвал агентад яг URL-ийг, шинэчлэхэд эсвэл дарахад гарсан эсэхийг, Network табт юу харагдаж байгааг өгөөд маршрутыг шалгуулаарай. Засвараас хойш дахин нийтлээрэй, учир нь амьд апп нь та дахин нийтлэх хүртэл агшин зуурын хуулбар байдаг. Хэрэв саяхан төслөө өөрчилсөн бол амьд сайт хуучин харагдвал дахин нийтэлж, hard-refresh хий. Build бүтэлгүйтвэл нийтлэх цонхны Fix with AI ашигла. Харна уу: баримт бичгийн Нийтлэх болон Нийтлэх асуудлыг шийдэх, мөн AI-аар бүтээсэн аппыг дебаг хийх гарын авлага.
404 хяналтын жагсаалт
- Аль URL 404 гарч байгааг, линкээр, шинэчлэхээр, эсвэл хоёуланд нь гарч байгааг тэмдэглэсэн
- SPA fallback аппын маршрутуудад 200 статустай
index.htmlбуцаадаг - Fallback жинхэнэ файлууд болон
/api/*-г хасдаг - Router-т “олдсонгүй” гэсэн catch-all маршрут байгаа
- Build гаралтын хавтас нийтлэгдэж байгаа, build амжилттай
- Base path нь аппыг үйлчлэх газартай таарч байна
- Файлын нэрийн том жижиг үсэг бүх лавлагаатай таарч байна
- Asset замууд
/-ээр эхэлдэг - Trailing slash-ийн хэв маяг тогтвортой
- API маршрутууд production дээр deploy хийгдсэн, зөв чиглүүлэгдсэн
- Хуучин URL-уудад 301 redirect байгаа
- Гүн линкүүд шинэ табд буулгаж туршигдсан
Асуултууд
React аппдаа хуудсыг шинэчлэхэд яагаад 404 гардаг вэ?
Нэг хуудсан апп-д /dashboard гэх мэт маршрутууд зөвхөн JavaScript дотор байдаг. Линк дарахад router нь хөтөч дотроо ажилладаг тул ажилладаг, харин шинэчлэхэд сервер /dashboard гэх файлыг хайдаг ч байхгүй. Засвар нь аппын маршрутуудад index.html үйлчлэх fallback дүрэм юм.
Netlify, Vercel эсвэл Nginx дээр SPA fallback хэрхэн нэмэх вэ?
Netlify дээр /* /index.html 200 агуулсан _redirects файл нэм. Vercel дээр бүх замыг /index.html руу чиглүүлэх rewrite-ыг vercel.json-д нэм. Nginx дээр location блокт try_files $uri $uri/ /index.html; ашигла. Дүрэм өөрчлөгддөг тул хостын баримт бичгээс шалга.
Deploy хийсний дараа зураг эсвэл файлууд яагаад 404 болдог вэ?
Ихэвчлэн файл build гаралтанд байхгүй, замын том жижиг үсэг таарахгүй (сервер ихэвчлэн таны компьютертэй адилгүй том жижиг үсэгт мэдрэмтгий байдаг), эсвэл зам слэшээр эхлэх ёстой байхад харьцангуй байдаг.
Байхгүй хуудас жинхэнэ 404 статус буцаах ёстой юу?
Тийм. Тусламжтай олдсонгүй хуудас үзүүлэх боловч тохиргоо зөвшөөрвөл 404 статустай байх ёстой. Хайлтын системүүд 200 статустай “олдсонгүй” мессежийг зөөлөн 404 гэж үздэг бөгөөд энэ нь crawl хугацааг дэмий үрж индекслэлтийг төөрөгдүүлдэг.