Если в Вебмастере Яндекса или Google висит сообщение «на сайте некорректно настроен возврат HTTP-кода 404» — это не значит, что сайт сломан. Проверка простая: робот берёт несуществующий адрес и ждёт кода 404. Часто сервер отдаёт вместо него 200 с содержимым чужой страницы — это и называют soft-404. Разбираемся, как это найти и починить.
Робот обходит сайт и складывает в индекс то, что находит. Если по мусорному адресу он получает полноценную страницу с кодом 200, поисковик считает, что у вас появились дубли. Дальше — перебор лишних URL, размывание веса главной и просадка позиций: в выдаче вместо ваших страниц могут оказаться дубли.
Отдельная история — мусор в карте сайта. Тогда робот честно обходит адреса из sitemap.xml, получает 404 и начинает хуже относиться ко всей карте: это заметно по падению частоты обхода.
Честный 404 — это страница с кодом 404: пустая или ваша красивая страница ошибки, но обязательно с кодом 404. soft-404 — это страница с кодом 200, которая для человека выглядит как ошибка, а для робота — обычная страница.
Три частых источника soft-404 на PHP:
config.php без проверки авторизации, — вместо 404 отдаёт пустую страницу с кодом 200;/page.php, который на любой адрес отдаёт главную;/news.php/любой-мусор. PHP по умолчанию игнорирует хвост и выполняет сам news.php — робот получает 200 с контентом новостей. Это самый частый случай на сайтах с ЧПУ-адресами.Проверяется одной командой:
curl -s -o /dev/null -w "%{http_code}\n" https://p07.ru/news.php/lyuboy-musor
# 404 — всё правильно
# 200 — soft-404, нужно чинить
| Код | Что значит | Что видит робот |
|---|---|---|
| 200 | страница отдалась | обычная страница — для существующих адресов это правильно |
| 301 | переехали навсегда | старый адрес больше не учитывается, вес переходит новому |
| 302 | временно перенаправили | время редиректа ограничено, для постоянных нужен 301 |
| 404 | страницы нет | норма, если её действительно нет |
| 410 | страницы нет и не будет | норма и даже чище 404 для удалённых страниц |
| 500 | ошибка сервера | помеха обходу, надо чинить |
curl -s -o /dev/null -w "%{http_code}\n" https://p07.ru/ — должно быть 200.curl -s -o /dev/null -w "%{http_code}\n" https://p07.ru/news.php/lyuboy-musor — должно быть 404.curl -s https://p07.ru/sitemap.xml | grep -c '<loc>' — их все нужно проверить, каждый должен отдавать 200. Один 404 в карте — и робот будет приходить туда снова и снова.curl -s https://p07.ru/ | grep -iE 'canonical|description' — на странице ошибки canonical быть не должно, иначе она «съедает» вес главной.В большинстве случаев хватает двух строк в .htaccess:
# мусор после .php больше не отдаёт страницу с кодом 200
AcceptPathInfo Off
# статья работает и со слешем на конце
RewriteRule ^news/([a-zA-Z0-9_-]+)/?$ article.php [L,QSA]
После правки проверьте, что .htaccess не сломался: главная и все статьи должны открываться, а на мусорных адресах — 404. Надёжнее сначала проверить синтаксис изменённых файлов (php -l file.php), а правку в .htaccess — залить сразу с возможностью быстрого отката, потому что ошибка в нём поднимает ошибку 500 на всём сайте.
sitemap.xml отдают 200;php -l без ошибок;Бывает и так: сервер отдаёт правильные коды, а сообщение в Вебмастере не уходит. Тогда проверьте три вещи: в карте сайта нет адресов, отдающих 404 или редирект в 404; на странице ошибки нет canonical на главную; нет цепочки редиректов 301 → 302 → 404.
Проверим коды ответов, карту сайта и robots.txt вашего сайта и покажем, где именно ломается обработка 404 — напишите нам. Наши услуги, работы в портфолио и ответы на частые вопросы — в разделе FAQ. Остальные гайды по SEO — в блоге.
← Назад к новостям