Skip to content

Ошибка 404 Not Found — что значит и как исправить

HTTP 404 Not Found — самая известная ошибка веба. Означает «сервер работает, но запрашиваемая страница не найдена». В нормальной работе сайта 404 — это не падение (просто пользователь набрал кривой URL), но если 404 появляется на корневой странице или ключевых URL — это серьёзная проблема.

  • 🚨 Сайт показывает «404 Not Found» или кастомную страницу «Страница не найдена»
  • 🔍 Причина — сервер не нашёл запрашиваемого ресурса
  • 🛠️ Если 404 на главной — катастрофа, если на одной странице — может быть нормально
  • 🔁 Часто появляется после переезда, обновления CMS, изменения URL

Когда 404 — это нормально, а когда — катастрофа

Section titled “Когда 404 — это нормально, а когда — катастрофа”

Нормально:

  • Пользователь сам набрал несуществующий URL example.com/abrakadabra
  • Бот сканирует сайт ища уязвимости (example.com/wp-admin.php на сайте без WordPress)
  • Удалили старую страницу и не сделали редирект

Катастрофа:

  • Главная страница example.com/ отдаёт 404
  • Все URL отдают 404
  • 404 появилась после обновления/деплоя

В дашборде Monisite 404 на главном URL сайта считается падением (DOWN) и шлёт уведомление. Подробнее почему — в Типы проверок.

CMS удалила страницу, базу сбросили, файл стёрли. Простая причина — простое решение.

2. Изменился URL после переезда CMS

Section titled “2. Изменился URL после переезда CMS”

Самая частая причина массовых 404. Переехали с WordPress на Tilda, со старой CMS на новую — URL поменялись. Старые ссылки в Google и соцсетях ведут на 404.

В Laravel/Django/Rails/Express удалили или сломали маршрут. Все URL отдают 404, потому что фреймворк не знает что с ними делать.

4. Неправильная конфигурация nginx

Section titled “4. Неправильная конфигурация nginx”

Пропали правила try_files или index. Часто после обновления конфига руками.

WordPress/Bitrix только что переустановили, контент ещё не залит. 404 пока БД пустая.

Section titled “6. Symlink на несуществующую папку”

Деплой через symlink (Capistrano, Deployer): создали новый релиз, переключили симлинк, но папка релиза пуста или сломана.

7. Сайт удалён с хостинга

Section titled “7. Сайт удалён с хостинга”

Закончились деньги на хостинге, хостер удалил аккаунт, домен теперь смотрит на placeholder-страницу с 404.

1. Проверить какой именно URL отдаёт 404:

Terminal window
curl -I https://example.com/
curl -I https://example.com/about
curl -I https://example.com/api/health

Если 404 везде — проблема с сайтом целиком. Если только на одной странице — это эта страница.

2. Лог nginx:

Terminal window
sudo tail -100 /var/log/nginx/access.log | grep " 404 "

Видите много 404 от разных IP на разные URL — нормально (боты). Все 404 на ваш собственный URL — проблема.

3. Проверить файлы существуют:

Terminal window
ls -la /var/www/example.com/

Если папка пустая или там не то что должно быть — нашли причину.

4. Проверить конфиг nginx:

Terminal window
sudo nginx -T | grep -A 20 'server_name example.com'

Посмотреть root, index, try_files директивы.

Сценарий A: главная отдаёт 404 после деплоя

  • Откатить последний релиз
  • Проверить что в папке current/ всё на месте

Сценарий B: 404 везде из-за роутинга

Laravel:

Terminal window
php artisan route:clear
php artisan route:cache

Django: убедитесь что urls.py корректно подключён в settings.py.

Rails:

Terminal window
rails routes

— посмотреть какие маршруты вообще зарегистрированы.

Сценарий C: переехали, старые URL не работают

Самое грамотное — настроить 301-редиректы со старых URL на новые. nginx:

location = /old-page {
return 301 /new-page;
}

Это сохранит SEO-вес страниц.

Сценарий D: 404 потому что забыли индексный файл

location / {
try_files $uri $uri/ /index.html;
index index.html index.php;
}

Сценарий E: WordPress переустановили — 404 на постах

Зайдите в Настройки → Постоянные ссылки и нажмите Сохранить. Это пересоздаст .htaccess (Apache) или эквивалент.

Если 404 — это нормально

Section titled “Если 404 — это нормально”

Если у вас сайт где нет главной страницы (например, чистое API), но Monisite алертит на 404:

  1. Создайте отдельный health-endpoint /health который возвращает 200
  2. Добавьте этот URL в Monisite вместо главного

Или сделайте чтобы корневой URL возвращал хотя бы 200 с минимальным текстом — это полезно не только для мониторинга, но и для статусов CDN/балансировщиков.

После переезда CMS, обновления CMS или деплоя часто первый кто замечает 404 — это случайный пользователь который потом не возвращается. С мониторингом вы узнаёте за 1-2 минуты.

Monisite:

  • Проверяет ваш сайт каждую минуту из 3 регионов
  • При появлении 404 на главной — сразу алерт
  • В истории видно в какой момент началось — сразу понятно что-то с последним деплоем

Подключить мониторинг →