Почему сайт неправильно отдаёт 404 и как это чинить

Почему сайт неправильно отдаёт 404 и как это чинить

Если в Вебмастере Яндекса или Google висит сообщение «на сайте некорректно настроен возврат HTTP-кода 404» — это не значит, что сайт сломан. Проверка простая: робот берёт несуществующий адрес и ждёт кода 404. Часто сервер отдаёт вместо него 200 с содержимым чужой страницы — это и называют soft-404. Разбираемся, как это найти и починить.

Яндекс.Вебмастер: ошибка «Некорректно настроен возврат HTTP-кода 404»
Так ошибка выглядит в Вебмастере. Иллюстрация студии, не скриншот.

Почему это мешает индексации

Робот обходит сайт и складывает в индекс то, что находит. Если по мусорному адресу он получает полноценную страницу с кодом 200, поисковик считает, что у вас появились дубли. Дальше — перебор лишних URL, размывание веса главной и просадка позиций: в выдаче вместо ваших страниц могут оказаться дубли.

Отдельная история — мусор в карте сайта. Тогда робот честно обходит адреса из sitemap.xml, получает 404 и начинает хуже относиться ко всей карте: это заметно по падению частоты обхода.

soft-404 против честного 404

Честный 404 — это страница с кодом 404: пустая или ваша красивая страница ошибки, но обязательно с кодом 404. soft-404 — это страница с кодом 200, которая для человека выглядит как ошибка, а для робота — обычная страница.

Три частых источника soft-404 на PHP:

  • файл, который подключает config.php без проверки авторизации, — вместо 404 отдаёт пустую страницу с кодом 200;
  • «универсальный» обработчик вида /page.php, который на любой адрес отдаёт главную;
  • PATH_INFO: адрес вида /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ошибка серверапомеха обходу, надо чинить

Диагностика за 5 минут

  1. Код на обычном адресе: curl -s -o /dev/null -w "%{http_code}\n" https://p07.ru/ — должно быть 200.
  2. Код на мусорном адресе: curl -s -o /dev/null -w "%{http_code}\n" https://p07.ru/news.php/lyuboy-musor — должно быть 404.
  3. Все адреса из карты сайта: curl -s https://p07.ru/sitemap.xml | grep -c '<loc>' — их все нужно проверить, каждый должен отдавать 200. Один 404 в карте — и робот будет приходить туда снова и снова.
  4. Канонический адрес и описание: curl -s https://p07.ru/ | grep -iE 'canonical|description' — на странице ошибки canonical быть не должно, иначе она «съедает» вес главной.

Как починить на Apache

В большинстве случаев хватает двух строк в .htaccess:

# мусор после .php больше не отдаёт страницу с кодом 200
AcceptPathInfo Off

# статья работает и со слешем на конце
RewriteRule ^news/([a-zA-Z0-9_-]+)/?$ article.php [L,QSA]

После правки проверьте, что .htaccess не сломался: главная и все статьи должны открываться, а на мусорных адресах — 404. Надёжнее сначала проверить синтаксис изменённых файлов (php -l file.php), а правку в .htaccess — залить сразу с возможностью быстрого отката, потому что ошибка в нём поднимает ошибку 500 на всём сайте.

Чек-лист после правки

  • мусорный адрес отдаёт 404, а не 200;
  • все существующие страницы отдают 200 — включая статьи со слешем на конце;
  • все URL из sitemap.xml отдают 200;
  • синтаксис изменённых файлов проверен: php -l без ошибок;
  • в Вебмастере нажата кнопка перепроверки — как это сделать, написано в справке Яндекса; данные обновятся через 2–3 дня.

Если коды честные, а ошибка осталась

Бывает и так: сервер отдаёт правильные коды, а сообщение в Вебмастере не уходит. Тогда проверьте три вещи: в карте сайта нет адресов, отдающих 404 или редирект в 404; на странице ошибки нет canonical на главную; нет цепочки редиректов 301 → 302 → 404.

Что дальше

Проверим коды ответов, карту сайта и robots.txt вашего сайта и покажем, где именно ломается обработка 404 — напишите нам. Наши услуги, работы в портфолио и ответы на частые вопросы — в разделе FAQ. Остальные гайды по SEO — в блоге.

— просмотров Остались вопросы? Задайте их нам Статья полезна?
← Назад к новостям