
Проверка кодов ответа страниц почти всегда начинается с одной сцены: владелец открывает адрес в браузере, видит нормальную страницу, а в панели вебмастера этот же адрес висит в списке ошибок. Обе картины верны одновременно. Браузер и робот получают от сервера разные ответы: они приходят в разное время, с разными заголовками, из разных сетей и без вашего кэша. Пока вы смотрите глазами, вы проверяете не сервер, а собственный браузер.
Почему браузер показывает страницу, а робот видит ошибку
Код ответа — трёхзначное число, которое сервер ставит в первой строке ответа ещё до того, как отдаст хоть один символ разметки. Браузер его получает, но обычно не показывает: если в теле ответа есть HTML, он отрисует HTML независимо от того, стоит там 200 или 500. Робот поступает наоборот, для него число важнее содержимого: при 200 он читает и индексирует, при 404 и 410 выводит адрес из индекса, при 500 откладывает страницу и снижает темп обхода, при 30x идёт по цепочке.
Расхождение возникает по четырём проверяемым причинам:
- Кэш. Браузер хранит копию страницы, плагин кэширования — готовый HTML, перед ними может стоять CDN. Вы получаете ответ из кэша, робот — с живого сервера, где страница собирается с нуля и может упереться в таймаут базы.
- Cookie и сессия. Авторизованному в админке сайт отдаёт версию без ограничений, анонимному посетителю — редирект на форму входа или заглушку.
- User-Agent и IP. Часть защит от парсинга реагирует на строку агента и на подсеть. Человек с домашнего провайдера проходит, робот получает 403 или капчу с кодом 200. Второй вариант хуже: ответ успешный, а в индекс идёт текст проверки.
- Нагрузка. Один запрос из браузера — лёгкий случай. Обход робота — десятки параллельных соединений, и лимиты, которые вручную не срабатывают, срабатывают там.
На моём сайте был показательный эпизод из последней категории. Сервер начал отдавать код 429 на собственные файлы стилей, когда браузер запрашивал их пачкой в несколько параллельных соединений. Визуально страница открывалась: HTML приходил с кодом 200, часть стилей успевала загрузиться, вёрстка не рассыпалась настолько, чтобы это бросалось в глаза. А в сетевой панели половина CSS-запросов была помечена ошибкой «слишком много запросов». Причина оказалась в модуле ограничения частоты: он считал обращения к статике наравне с обращениями к скриптам. Глазами такое не ловится.
Коды ответа, которые действительно нужно знать
Список кодов в спецификации длинный, но на реальном сайте встречается десяток. Ниже те, что попадаются в каждом втором аудите.
| Код | Что означает | Что делает робот | Когда это проблема |
|---|---|---|---|
| 200 | Успешный ответ, тело отдано | Читает и индексирует содержимое | Если тело — «ничего не найдено», капча или пустой шаблон |
| 301 | Постоянный переход на другой адрес | Переносит сигналы на цель, старый адрес убирает | Стоит там, где ожидается рабочая страница |
| 302 / 307 | Временный переход | Оставляет в индексе исходный адрес | Поставлен вместо 301 при постоянном переезде |
| 304 | Не изменилось с прошлого визита | Берёт содержимое из кэша, экономит обход | Отдаётся при реально изменившемся содержимом |
| 403 | Доступ запрещён | Не индексирует, при массовости снижает темп обхода | Прилетает роботу от защиты, посетителю нет |
| 404 | Страница не найдена | Выводит из индекса не сразу, проверяет повторно | Массово, на адресах с внешними ссылками |
| 410 | Удалено навсегда | Выводит из индекса быстрее, чем при 404 | Поставлено на страницу, которую планируют вернуть |
| 429 | Слишком много запросов | Резко снижает скорость обхода, часть адресов пропускает | Почти всегда: лимит без учёта роботов |
| 500 | Внутренняя ошибка сервера | Откладывает адрес, при повторе выводит из индекса | Всегда, даже если ошибка плавающая |
| 502 / 504 | Шлюз не дождался ответа | Трактует как временный сбой, вернётся позже | Повторяется в одни и те же часы |
| 503 | Сервис недоступен | С заголовком Retry-After вернётся позже, без него — как сбой | Висит дольше нескольких часов |
Разница между 301 и 302 влияет не на скорость, а на то, какой адрес останется в поиске; она разобрана в материале Отличие 301 от 302 редиректа. И ещё нюанс: 404 не ошибка сама по себе — ошибкой её делает контекст, когда по адресу приходят люди, ведут внешние ссылки или ссылается ваше же меню.
Мягкая 404: код 200 там, где содержимого нет
Самая частая находка — не 500 и не 404, а страница, которая говорит «товар не найден» или «по вашему запросу ничего нет», и при этом отдаёт код 200. Такие адреса называют мягкими 404. Робот доверяет коду, забирает страницу в обход и уже сам решает по содержимому, что она бесполезная. Разница принципиальная: честная 404 закрывает вопрос за один визит, а мягкая продолжает съедать лимит обхода и попадает в отчёты как малоценная страница.
Откуда берутся:
- Карточки удалённых товаров, подменённые шаблоном «товар недоступен».
- Пустые результаты фильтров и внутреннего поиска, доступные по прямой ссылке.
- Категории, из которых убрали все позиции, но раздел остался в меню.
- Собственная страница 404, оформленная как обычная страница CMS — с кодом 200 в заголовке.
Последний пункт проверяется первым. Возьмите заведомо несуществующий адрес вида /proverka-koda-otveta-123456/ и посмотрите заголовок ответа. Если там 200 — у вас нет 404 вообще, и любая опечатка в ссылке порождает новую страницу в индексе. Последствия описаны в статьях Ошибка 404 — что это значит и Как ошибка 404 влияет на позиции сайта.
Дальше выбор зависит от того, есть ли замена содержимому. Есть аналог или родительская категория — 301 на замену. Замены нет, адрес разово попал в индекс — 404. Раздел закрыт навсегда — 410. Заменять всё подряд редиректом на главную нельзя: робот распознаёт подстановку и трактует её как ту же мягкую 404, только с лишним переходом.
Ошибки 500 и 429 в обходе: когда сервер не выдерживает робота
Пятисотые коды в отчёте обхода — самая недооценённая находка. Владельцу они кажутся случайностью: «я открыл, всё работает». В том и дело: вы открыли одну страницу, робот — сотню за минуту. Механизмов несколько.
Лимит соединений к базе. Пока на сайте пара человек, он незаметен; робот открывает десятки страниц параллельно, лимит выбирается, и часть страниц падает с фатальной ошибкой PHP. Рядом — нехватка памяти на тяжёлых страницах: категория с сотнями позиций или архив за год при одиночном запросе в лимит укладываются, при параллельных нет.
Ограничение частоты запросов. Модуль защиты считает обращения с одного адреса и после порога отдаёт 429 или 403. Робот заходит с пула адресов в пределах одной подсети и легко перешагивает порог — ровно тот случай, что я описал выше со стилями.
Плавающие ошибки в коде. Обращение к несуществующему свойству, вызов функции, которой нет в текущей версии PHP. Они проявляются только там, где данные не заполнены, и всплывают именно при сплошном обходе.
Тонкое место хостинга. Виртуальный хостинг делит ресурсы между сайтами: соседний проект под нагрузкой — и ваш сервер отвечает 502 или 504. Видно по времени: ошибки собираются в одни и те же часы. Что смотреть, я разбирал в материале Как сервер влияет на продвижение интернет-магазина.
Проверять нужно две вещи: отчёт обхода в вебмастере и логи сервера. В логах доступа код стоит отдельным полем в каждой строке, и выборка строк с кодами от 500 сразу даёт список адресов и время. Если ошибки размазаны по сайту, а не липнут к типам страниц — дело в ресурсах, а не в шаблонах.
Долгий ответ сервера: код правильный, страница выпадает
Код 200 не гарантирует, что страница попадёт в индекс. Робот работает с ограничением по времени: если сервер не начал отдавать ответ за отведённый интервал, соединение обрывается и адрес отмечается как недоступный. Ошибки формально нет — сервер не успел.
Смотреть нужно на время до первого байта, а не на общее время загрузки: общее включает картинки, скрипты и шрифты, его портит фронтенд. Растягивают ответ запросы к базе без индексов, обращения к сторонним API прямо в шаблоне (курс валют, остатки склада), сломанный кэш и разросшаяся таблица настроек с автозагрузкой.
Показательный признак: страницы разных типов отвечают с разной скоростью. Статья блога — быстро, категория каталога — вдвое дольше, страница поиска — на грани таймаута. Значит, дело в шаблонах, а не в тарифе хостинга.
Редиректы там, где нужен код 200
Редирект должен стоять на старых адресах, которые вы переносили, и не должен — на страницах, которые вы продвигаете. Проверка кодов вскрывает три случая, когда 30x оказывается там, где ждали 200.
Цепочки. Адрес А ведёт на Б, Б на В, В на Г. Каждое звено накопилось своим слоем: переезд на https, смена структуры адресов, снятие слеша в конце. Робот проходит цепочку с ограничением по длине и слишком длинную бросает. Старый адрес должен вести сразу на конечный.
Петли. Адрес ведёт на себя или два адреса перебрасывают друг на друга. Источник — конфликт правил в конфигурации сервера и настройках CMS: одна часть добавляет слеш, другая убирает. В браузере это выглядит как «долго грузится», а не как ошибка.
Редиректы по устройству и региону. Мобильная версия на поддомене, определение города по IP, переброс на языковую версию. Робот приходит со своим набором заголовков и получает не тот адрес, который запрашивал. В индекс попадает не то, что вы продвигали.
Проверять цепочки нужно не по конечному коду, а по всему пути — инструменты показывают каждый шаг. Больше одного шага между исходным и целевым адресом — правьте правило.
Как прогнать все адреса пачкой
Точечная проверка отдельных страниц не даёт картины. Нужен сплошной прогон: берётся полный список адресов, каждый запрашивается, записываются код, время и цепочка переходов, результат сортируется по коду.
Список собирается из четырёх источников, и брать нужно все четыре, потому что они не совпадают. Карта сайта показывает, что вы считаете нужным для индексации; как её формировать — в материале Карта сайта Sitemap. Обход краулером — что реально доступно роботу из меню и текстов. Выгрузка из вебмастера — что робот видел сам. Логи сервера — адреса, по которым приходили запросы, вместе с выданными кодами.
| Способ | Что видит | Сильная сторона | Ограничение |
|---|---|---|---|
| Настольный краулер | Коды, цепочки, время ответа, заголовки | Контроль над скоростью и агентом, выгрузка в таблицу | Идёт с вашего IP: защита пропускает вас как своего |
| Облачный сервис обхода | То же плюс повторы по расписанию | Заходит с чужих адресов, ближе к условиям робота | Ограничение на число адресов в тарифе |
| Панель вебмастера | Коды, которые получил сам поисковый робот | Источник правды о том, что видел робот | Данные с задержкой, выборка неполная |
| Логи сервера | Все запросы всех агентов с кодами и временем | Видно время суток, частоту, реакцию на нагрузку | Нужен доступ к хостингу и разбор объёма |
| Скрипт с curl или Python | Коды и заголовки по вашему списку | Свой агент, своя частота, свой формат отчёта | Нужно писать самому, нет разбора вёрстки |
Порядок такой. Сначала запрос только заголовков — быстро и достаточно для кодов. Потом повторный прогон полным запросом по адресам, где код отличается от 200: часть серверов отвечает на укороченный запрос иначе, и это само по себе находка. Обязательно снимите отдельный прогон с агентом поискового робота и сравните с обычным. Скорость держите умеренной: положив сайт двадцатью потоками, вы получите массовые 500 на пустом месте.
Периодичность зависит от размера: сайт до сотни страниц — раз в квартал, каталог на тысячи адресов — раз в месяц. После переезда, смены хостинга или правки конфигурации сервера — сразу. Сплошной прогон кодов входит в базовый Технический аудит сайта и обычно даёт больше находок, чем анализ текстов.
Что делать с находками и когда чинить не нужно
Список из тысячи строк парализует, поэтому сортируйте по последствиям, а не по количеству. Первый приоритет — 500 и 429 на страницах, которые приносят трафик: страница выпадает из поиска, пока сервер отдаёт ошибку, и чинится тут сервер, а не SEO. Второй — редиректы и 404 там, куда ведут внешние ссылки и внутреннее меню: внутренние ссылки правятся в шаблоне, внешние править нельзя, поэтому там ставится 301 на ближайшую по смыслу живую страницу. Третий — мягкие 404: их много, они не горят, но раздувают индекс, разбирать нужно группами. Четвёртый — долгий ответ.
Теперь о том, когда чинить не нужно, — этот список экономит больше времени, чем предыдущий.
- 404 на служебных и мусорных адресах. Опечатки в чужих ссылках, адреса от прежнего движка, обращения к несуществующим файлам. Робот отбросит их сам.
- Код 403 на закрытых разделах. Личный кабинет, админка, корзина. Так и должно быть.
- Код 304 при повторном обходе. Не ошибка, а экономия ресурса: содержимое не менялось.
- Редирект с адреса без слеша на адрес со слешем. Если правило одно и внутренние ссылки ведут на канонический вид — трогать не нужно.
- Одиночная 500, которая не повторяется. Разовый сбой при перезапуске сервиса бывает у всех. Проблема — это повтор, а не факт.
И честное ограничение метода: коды ответа не отвечают на вопрос, почему страница не растёт в поиске, — только на вопрос, может ли робот вообще её прочитать. Это фундамент, а не рычаг: сайт с идеальными кодами стоит на месте, если содержимое не отвечает запросу. Как робот распоряжается прочитанным — в материале Поисковые роботы — что это и как они работают.
Частые вопросы
Как посмотреть код ответа одной страницы без установки программ?
Откройте панель разработчика, перейдите на вкладку сети и обновите страницу. Первая строка в списке — документ, рядом с ним стоит число. Обновлять нужно с игнорированием кэша, иначе вы увидите 304 или ответ из памяти браузера, а не с сервера.
В отчёте вебмастера тысячи 404, а сайт маленький. Откуда?
Три источника. Старые адреса от предыдущей версии сайта — робот помнит их годами. Генерация адресов скриптами: пагинация до несуществующих страниц, параметры фильтров, календари. Битые ссылки в шаблоне. Закрывайте источник, иначе адреса будут появляться заново.
Сервер отдаёт роботу 429. Это опасно?
Опаснее, чем кажется. Робот воспринимает такой ответ как просьбу снизить темп и уменьшает число страниц за визит. Новые материалы индексируются неделями вместо суток, при этом ни одна страница не помечена ошибкой. Проверьте ограничитель частоты: обычно он считает статику наравне с динамикой.
Краулер показывает 200, а вебмастер — ошибку. Кому верить?
Вебмастеру: он показывает ответ, который получил сам поисковый робот со своих адресов и со своим агентом. Ваш краулер идёт с вашего IP и часто проходит там, где робота режет защита. Расхождение — не противоречие, а диагноз: у вас разная выдача для разных клиентов.
Проверять ли коды для картинок, стилей и скриптов?
Да, и это регулярно упускают. Робот рендерит страницу и подгружает ресурсы: если стили или скрипты отдают ошибку, он увидит страницу иначе, чем вы. Мой случай с кодом 429 на файлы стилей — ровно про это: HTML отдавался нормально, а часть оформления не приходила вовсе.
Коротко
- Браузер показывает содержимое, робот читает код ответа. Пока вы проверяете глазами, вы проверяете свой кэш, а не сервер.
- Мягкая 404 — страница «ничего не найдено» с кодом 200 — вреднее честной ошибки: остаётся в обходе и раздувает индекс.
- Коды 500 и 429 у робота появляются из-за параллельной нагрузки: лимиты базы, память, ограничители частоты; вручную такое не воспроизводится. Долгий ответ обрывает обход при формально правильном коде 200 — смотрите время до первого байта по типам страниц.
- Редиректы уместны на старых адресах и неуместны на продвигаемых: цепочки схлопывать до одного перехода, петли устранять.
- Прогон делается сплошным списком из карты сайта, обхода по ссылкам, выгрузки вебмастера и логов: расхождения между источниками и есть находки.
Если после прогона получился список из сотен строк и непонятно, за что хвататься первым, — сортировка находок по последствиям важнее самого прогона. Приходите на разбор технических ошибок сайта — посмотрим ваш отчёт по кодам ответа, отделим реальные потери от безобидного шума и составим порядок правок. В SEO с 2005 года, продвижение веду лично, вы общаетесь со мной напрямую, а не с менеджером. Если нужна не разовая проверка, а постоянное SEO-сопровождение сайта, начинать всё равно стоит с технической базы — без неё остальное не работает.
Увеличьте позиции и продажи вашего сайта
Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:
Остались вопросы по продвижению?
Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.
Связаться со мной →
Комментарии
Вильгельмина Пасечник
Проверила несуществующий адрес — сервер отдал 200 и красивую страницу «ничего не найдено». Это же настраивал разработчик специально, чтобы посетитель не пугался. Получается, зря?
Анатолий Кузнецов автор
Оформление страницы и её код ответа — две независимые вещи, их часто путают. Красивая страница с поиском, меню и подборкой популярных разделов — это правильно, посетитель действительно не должен упираться в белый экран с технической надписью. Но в заголовке ответа при этом обязан стоять 404, и на внешний вид это никак не влияет: человек его не видит вообще. Сейчас у вас любая опечатка в чужой ссылке порождает адрес, который робот считает рабочей страницей, забирает в обход и держит в индексе. На сайте с ручной вёрсткой код правится одной строкой в обработчике, в популярных CMS — переключателем в настройках шаблона 404 или снятием плагина, который эту страницу подменял. После правки проверьте ещё раз тот же выдуманный адрес: должно быть 404 при том же оформлении.
Радислав Ерофеичев
Прогнал каталог краулером в двадцать потоков, получил кучу 500. Испугался, перепрогнал в два потока — всё чисто. Так есть проблема или нет?
Милослава Тарбеева
В вебмастере растёт число исключённых страниц с пометкой про ошибку сервера, а я открываю их по одной — открываются нормально. Куда смотреть?
Анатолий Кузнецов автор
Смотреть надо в логи доступа на сервере, а не в браузер. В каждой строке лога есть адрес, время, агент и код ответа — выберите строки с кодами от 500 и посмотрите на две вещи. Первая: липнут ли ошибки к определённым типам страниц. Если падают только категории каталога или только страницы поиска, дело в шаблоне и в тяжёлых запросах к базе. Вторая: собираются ли ошибки в определённые часы. Если да, это нагрузка — либо ваш обход совпал с чужим, либо на виртуальном хостинге сосед ест ресурс. Отдельно отфильтруйте строки по агенту поискового робота: часто оказывается, что 500 приходят только ему, а обычным посетителям сайт отвечает нормально. И проверьте лог ошибок PHP за то же время — там будет конкретная строка кода, из-за которой страница падала.
Савватий Голомазов
Про 429 на собственные стили — интересный случай. У нас стоит модуль защиты от ботов, и я теперь думаю, не режет ли он робота. Как это проверить, не отключая защиту?
Зоряна Мохначёва
Магазин переезжал дважды: сначала на https, потом меняли структуру адресов. Краулер показывает цепочки по три-четыре перехода. Насколько это критично, если в итоге всё же открывается нужная страница?
Панкрат Ослопов
Удалили из каталога около четырёхсот позиций. Ставить на все 404, 410 или редиректить на категорию? Мнения в интернете расходятся полностью.
Анатолий Кузнецов автор
Мнения расходятся, потому что универсального ответа нет — решение зависит от того, что было на странице. Разделите четыреста позиций на три группы. Первая: товар снят, но есть прямая замена — другая модель, тот же товар другого объёма или цвета. Такие ставьте на 301 к замене, это сохранит внешние ссылки и поведение посетителя. Вторая: замены нет, но позиция может вернуться на склад — отдавайте 404 и оставьте адрес в покое, робот выведет его из поиска и запомнит. Третья: направление закрыто полностью и не вернётся — 410, чтобы вывести быстрее. Чего делать не стоит: сваливать все четыреста на главную или на корень каталога. Робот распознаёт массовый редирект в одну точку и обрабатывает его как ту же 404, только с лишним переходом, а посетитель с внешней ссылки попадает не туда, куда шёл, и уходит.
Агафья Шумилкина
Есть ли смысл проверять коды ответа, если сайт маленький — двадцать страниц лендинга с блогом?
Елизар Подопригора
Наш сервер отвечает 503 во время ночных бэкапов, примерно час. Робот в это время заходит. Надо что-то делать или само пройдёт?
Анатолий Кузнецов автор
Само не пройдёт, но чинится это малой кровью. Код 503 сам по себе безопасен, если он отдаётся правильно: вместе с ним сервер должен присылать заголовок Retry-After с указанием, через сколько возвращаться. Тогда робот понимает, что это плановая недоступность, не считает её ошибкой сайта и приходит позже. Без этого заголовка повторяющаяся недоступность трактуется как нестабильный сервер, и темп обхода снижается. Проверьте, что именно отдаёт ваш сервер во время бэкапа — скорее всего, там голая 503 или вовсе 502 от шлюза. Второй вариант решения проще: сделать бэкап без остановки сайта, через снимок файловой системы или репликацию базы, тогда недоступности не будет вообще. И посмотрите в логах, приходит ли робот именно в этот час — если да, сдвиньте окно бэкапа на время, когда его активность минимальна.
Соломонида Верещак
Краулер показал время ответа по некоторым категориям в несколько раз больше, чем по остальным. Код при этом 200. Это уже проблема или ещё нет?
Азарий Ключевский
Обнаружил, что сайт отдаёт разный ответ на запрос с агентом поискового робота и с обычным браузерным. Это же клоакинг получается? Разработчик говорит, что так настроена оптимизация.
Ефимия Кожедуб
Прогнала карту сайта и обход по ссылкам — списки адресов совпали процентов на шестьдесят. Что делать с разницей?
Анатолий Кузнецов автор
Разница и есть главная находка, её нужно разложить на две стопки. Первая: адреса есть в карте сайта, но краулер до них не дошёл по ссылкам. Это страницы-сироты — на них не ведёт ни меню, ни текст, ни листинг. Робот их увидит через карту, но без внутренних ссылок они получают минимум веса и обходятся редко. Решение — вписать их в структуру: добавить в раздел, в перелинковку внутри статей, в подборки. Вторая стопка: краулер нашёл адреса, которых нет в карте сайта. Тут надо смотреть, что это. Если полезные страницы — карта формируется неправильно, чаще всего плагин исключает целый тип записей. Если мусор вроде фильтров, сортировок и параметров — вы нашли источник лишнего обхода, и его нужно закрывать канониклом или запретом в robots. Начинайте со второй стопки: там обычно и прячется причина, почему робот не доходит до нужных страниц.
Вукол Тарарыкин
После обновления движка половина адресов стала с косой чертой на конце, половина без. Оба варианта открываются, код 200 у обоих. Насколько срочно это править?