Soft 404: что это такое и как исправить
Soft 404 («мягкая» 404) — это когда страницы нет или она пустая, но сервер отвечает кодом 200 OK вместо 404. Поисковик видит, что содержимое похоже на ошибку, и относится к такому адресу как к 404, а владелец получает мусор в индексе и не видит проблему в обычных отчётах.
Обновлено 11 октября 2026 г.
Что такое soft 404
В обычной (жёсткой) 404 статус и содержимое согласованы: сервер отвечает кодом 404, а страница сообщает, что ничего не найдено. При soft 404 они расходятся: страница выглядит как ошибка («Ничего не найдено», пустой список, заглушка), а в заголовке ответа стоит 200 OK. Роботу, который читает статус, такая страница кажется полноценной.
Типичные случаи
- Страница ошибки отвечает 200. Красивая 404-страница работает, но сервер не отправляет код 404. Самая частая причина: ErrorDocument или
error_pageуказаны полным URL, либо CMS сама рендерит страницу ошибки без смены статуса. - Пустые страницы. Раздел без товаров, поиск без результатов, пустая страница тега или карточка удалённого товара с кодом 200.
- Редирект всех несуществующих адресов на главную. Сервер отвечает 301 или 302 на главную, а она возвращает 200. Google относится к таким редиректам как к soft 404.
- SPA без серверной обработки. Single Page Application отдаёт один и тот же
index.htmlс кодом 200 для любого пути, а страницу «не найдено» рисует уже JavaScript. - Страница-заглушка. «Скоро здесь будет контент», «Товар недоступен» без явных причин и кода ответа.
Чем soft 404 вредит
- Робот тратит запросы на пустые страницы вместо полезных (это краул-бюджет, он имеет значение в основном для крупных сайтов).
- В Google Search Console появляется отчёт о проблеме «Soft 404», а такие адреса не индексируются.
- Сайт не получает чистых данных об ошибках: в логах и аналитике «404» нет, ведь везде 200.
- Если вместо 404 стоит редирект на главную, пользователь теряет контекст, а ссылочный вес не передаётся целевой странице по смыслу.
Как Google и Яндекс определяют soft 404
Google оценивает не только код, но и содержимое: текст вроде «страница не найдена», почти пустая страница, переход всех удалённых URL на одну и ту же страницу. Если страница ведёт себя как ошибка, но отдаёт 200, в отчёте «Индексирование» → «Страницы» Search Console она получит причину «Soft 404». Яндекс также учитывает содержимое и может исключить такой адрес из поиска как малоценный или недоступный, при этом конкретной метки «soft 404» в отчётах Вебмастера может не быть, поэтому ориентируйтесь на проверку ответа сервера.
Как проверить
- Откройте заведомо несуществующий адрес на своём сайте, например
https://example.com/test-not-exists-12345. - Проверьте код ответа в инструменте проверки кода ответа или в DevTools на вкладке Network (колонка Status). Нужен код 404, а не 200 и не 301 на главную.
- Проверьте отчёт «Soft 404» в Google Search Console и соответствующие адреса.
- Проверьте реальные страницы с пустым содержимым: пустые категории, результаты поиска без совпадений, карточки удалённых товаров.
- Из консоли:
curl -I https://example.com/test-not-exists-12345и посмотрите первую строку ответа.
Как исправить
Принцип один: если страницы нет, сервер должен отправить статус 404 (или 410) вместе со страницей ошибки. Если страница есть, но пустая по сути, либо наполните её, либо закройте от индекса (noindex), либо отдайте 404.
nginx
Отвечайте 404 для несуществующих путей и подключайте страницу ошибки локальным файлом, не внешним URL:
server {
root /var/www/example.com;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
}Если указать error_page 404 https://example.com/404.html;, nginx выполнит редирект (302), и статус 404 потеряется.
Apache
# Правильно: локальный путь
ErrorDocument 404 /404.html
# Неправильно: полный URL превращается в редирект 302
# ErrorDocument 404 https://example.com/404.htmlWordPress
WordPress сам отдаёт 404 для несуществующих адресов, если в теме есть файл 404.php. Soft 404 появляется, когда плагин или шаблон выводит «пустой» результат кодом 200. Для собственных шаблонов явно задавайте статус:
add_action('template_redirect', function () {
if (is_singular('product') && !have_posts()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
}
});SPA (React, Vue и аналоги)
Если приложение рисуется только в браузере, сервер ничего не знает о маршрутах и отдаёт 200 для любого пути. Варианты решения от лучшего к простому:
- SSR или prerender. Рендерите страницы на сервере (например, Next.js), и для несуществующих маршрутов отдавайте 404. В App Router Next.js для этого служит вызов
notFound(). - Список маршрутов на уровне веб-сервера. Сервер отдаёт
index.htmlтолько для известных путей, для остальных возвращает 404. - Запасной вариант: noindex. Если статус изменить нельзя, добавьте на страницу ошибки
<meta name="robots" content="noindex">из JavaScript. Google выполняет JS и увидит директиву, но этот способ хуже настоящего 404.
Для SPA есть отдельные инструкции: React SPA и Next.js.
Как soft 404 находит Monitor404
Трекер Monitor404 на странице ошибки читает код ответа самой страницы через Navigation Timing API (responseStatus). Если страница выглядит как ошибка, а браузер получил 200, событие помечается как soft 404, и вы видите проблему в отчёте, а не узнаёте о ней из Search Console через недели.
Частые вопросы
Что такое soft 404 простыми словами?
Это страница, которая выглядит как «страница не найдена» или пустая, но сервер отвечает кодом 200 вместо 404. Поисковик по содержимому понимает, что это ошибка.
Как проверить, отдаёт ли страница 404 настоящим кодом?
Откройте несуществующий адрес и посмотрите код ответа: в DevTools на вкладке Network, через curl -I или в онлайн-инструменте проверки кода ответа. Должно быть 404, а не 200.
Редирект на главную вместо 404 — это soft 404?
Чаще всего да. Google считает массовый редирект несуществующих страниц на главную soft 404. Лучше отдавать 404 или делать 301 на действительно близкую страницу.
Как исправить soft 404 на SPA?
Отдавайте корректный статус на сервере: используйте SSR или prerender, либо ограничьте веб-сервер списком известных маршрутов. Как запасной вариант — noindex на странице ошибки.