Soft 404: несуществующая страница, которая отвечает 200 OK
Почему страница «не найдено» с кодом 200 засоряет индекс и ослепляет мониторинг — и как заставить сервер честно отвечать про несуществующие адреса.
SEO · Опубликовано: 27 сентября 2026 г. · 5 мин чтения · Марк Лебедев
404 — это не авария. Это честный ответ сервера на честный вопрос: по этому адресу ничего нет. Soft 404 — тот же ответ с неправильным кодом: на странице написано «не найдено», а HTTP-ответ говорит 200 OK. Человек читает страницу; краулеры, мониторинг и кеши читают статус. Обманывают всех, кроме человека.
Откуда они берутся
Специально soft 404 почти никто не делает. Они вырастают из вполне разумных на вид настроек по умолчанию:
- Fallback в SPA. Классический конфиг nginx для одностраничного приложения —
try_files $uri /index.html;. Любой адрес, которому не соответствует файл, получает оболочку приложения с кодом 200, а роутер рисует «Страница не найдена» в JavaScript, когда статус уже давно отправлен. - Пустые выдачи. Поиск, теги и категории в CMS при нуле результатов всё равно рендерят полный шаблон — шапку, фильтры, «ничего не найдено» — с кодом 200. Каждая комбинация параметров превращается в отдельную индексируемую страницу.
- Всё на главную. Правило-ловушка, которое отправляет любой неизвестный URL на
/через 301 или 302. Поисковики считают редирект на нерелевантную страницу soft 404, а пользователь теряет адрес, который искал. - Товары не в наличии. Товара нет, шаблон остался: ни цены, ни описания, ни фото, одна строчка «временно недоступен» — и 200.
- WAF и проверки на бота. Страница проверки от файрвола или CDN, отданная с 200 вместо 403 или 429. Для краулера весь ваш каталог превращается в копии одной страницы «проверяем ваш браузер».
Чем это вредит
Мусор в индексе. Опечатки, старые адреса из рекламных кампаний, запросы сканеров уязвимостей — всё становится «страницами». Google со временем замечает многие из них и выводит в отчёт Soft 404 в Search Console, но только после того, как обошёл их, и далеко не все.
Краулинговый бюджет. Каждая фальшивая страница — это обращение, которое краулер не потратил на настоящий контент. На большом сайте с параметрическими выдачами это не погрешность.
Дубли главной. Массовые редиректы и оболочки SPA заставляют тысячи URL отдавать одно и то же содержимое, и поисковику труднее выбрать каноническую версию той страницы, которая вам действительно важна.
Слепой мониторинг. Проверки доступности, линк-чекеры и синтетические тесты смотрят на код ответа. Если мёртвые ссылки отвечают 200, любой аудит битых ссылок покажет идеально чистый сайт.
Грязная аналитика. Заходы на несуществующие страницы считаются обычными просмотрами — с обычными отказами и временем на странице. Трафик «не найдено» никогда не всплывает как ошибка.
Как проверить
Запросите адрес, которого заведомо не может существовать, и смотрите только на статус:
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/this-page-does-not-exist-8f3a/
Всё, кроме 404 или 410, — проблема. Повторите для каждого шаблона со своей маршрутизацией: /blog/nonexistent, /product/nonexistent, /search?q=zzzzqx, адрес без языкового префикса. Отчёт SiteScan делает это за вас: проверяет, что сервер отвечает на несуществующий адрес, и помечает ответ 200 как проблему.
Как исправить
Отдавайте настоящий 404. Для статического или пререндеренного сайта пусть nginx отдаёт заранее собранную страницу с правильным кодом:
error_page 404 /404.html;
location / {
try_files $uri $uri/ =404;
}
В SPA с серверным рендерингом сервер должен знать таблицу маршрутов: если ни один маршрут не подошёл или маршрут подошёл, но записи нет, отвечайте 404 до того, как начнёте отдавать HTML. Если сервер в принципе не может этого знать — чисто клиентское приложение на простом хостинге, — добавьте <meta name="robots" content="noindex"> в клиентское представление «не найдено». Это крайняя мера: страница не попадёт в индекс, но мониторинг и линк-чекеры по-прежнему увидят 200.
Для удалённого навсегда — 410. Снятый с производства товар или удалённая статья — это «больше нет», а не «не найдено». 410 подсказывает краулерам перестать спрашивать раньше.
Редирект — только на настоящий эквивалент. 301 уместен, когда контент переехал: переименованная статья, модель-преемник. Массовый редирект на главную — не исправление, а тот же soft 404 с лишним шагом.
404 должна быть полезной, а не успешной. Поиск, ссылки на основные разделы, у нас — поле для запуска проверки: всё это прекрасно помещается на страницу ошибки. Страница может помогать сколько угодно, но код ответа всё равно должен быть 404.
Чек-лист
- Случайный URL в каждом шаблоне маршрутизации отдаёт 404.
- Пустые страницы поиска и выдачи закрыты noindex или отдают 404.
- Удалённый контент отдаёт 410 или 301 на настоящий эквивалент.
- Нет правила, которое отправляет всё подряд на главную.
- Проверки на бота отдают 403 или 429, а не 200.
- Страница 404 помогает посетителю и при этом отвечает 404.
Читайте также
Проверьте, что из этого есть на вашем сайте
Бесплатное сканирование покажет битые ссылки, ошибки JS и проблемы производительности за минуту.