Страница 404 и SPA-fallback
Когда посетитель открывает URL, которого нет в вашей сборке, Layero должен что-то ответить. Есть два правильных поведения — и они противоположны:
- Многостраничный статический сайт (Next.js
output: 'export', Astro, Hugo, Eleventy, Jekyll…) обычно кладёт в сборку файл404.htmlи ждёт, что неизвестный адрес вернёт именно его — с HTTP-кодом 404. Так поисковики (Яндекс, Google) понимают, что страницы нет. - SPA с клиентским роутингом (React, Vue, Angular, Solid без
пререндера) наоборот хочет, чтобы любой адрес отдавал
index.htmlс кодом 200 — тогда приложение загрузится и его роутер сам покажет нужный экран (или свою 404-заглушку).
Поведение по умолчанию
Layero выбирает автоматически по содержимому сборки:
В корне сборки есть 404.html? | Неизвестный URL отдаёт |
|---|---|
| Да | 404.html с кодом 404 |
| Нет | index.html с кодом 200 (SPA-fallback) |
Для большинства проектов делать ничего не нужно: Next export, Astro,
Hugo и подобные генераторы кладут 404.html сами — и он начинает
отдаваться с правильным кодом. Vite/CRA-приложения 404.html не
создают — и продолжают работать как SPA.
Сам файл 404.html по прямому адресу (/404.html) всегда доступен с
кодом 200 — под 404 попадают только неизвестные URL.
Переопределение через _redirects
Если авто-определение вам не подходит, положите в корень сборки файл
_redirects (синтаксис Netlify) с catch-all правилом:
# Форсировать SPA-fallback, даже если 404.html присутствует:
/* /index.html 200
# Или наоборот — явно включить свою страницу 404:
/* /404.html 404
/* /index.html 200— всегда отдаватьindex.htmlс кодом 200. Нужно приложениям с клиентским роутингом, которые при этом почему-то генерируют404.html./* /404.html 404— отдавать указанную страницу с кодом 404. Путь может быть любым (/not-found.htmlи т.п.), файл должен лежать в сборке.
Правило должно идти последним в _redirects — обычные редиректы
(301/302) в том же файле продолжают работать как раньше.
Проверка
curl -I https://ваш-сайт.layero.ru/страница-которой-нет
# HTTP/2 404 ← ожидаемо для статического сайта с 404.html
# HTTP/2 200 ← ожидаемо для SPA
Изменение вступает в силу со следующим деплоем — Layero определяет страницу 404 в момент сборки.