Я выкатил обновление sitemap примерно с 3 000 новыми страницами в структуре /en/blog/.... Вскоре после этого в Яндекс Вебмастере появился неожиданный паттерн: Яндекс пытался обходить соответствующие URL по пути /blog/..., то есть без префикса /en.
Если бы такие адреса просто отдавали 404, я мог получить тысячи бесполезных обращений краулера к несуществующим путям. К счастью, у меня уже были настроены постоянные 308-редиректы с путей без языкового префикса на реальные английские URL.
Эта небольшая защитная часть маршрутизации оказалась гораздо полезнее, чем я ожидал.
Что я действительно наблюдал
Фактическая последовательность была простой:
- Я опубликовал обновление sitemap примерно с 3 000 новыми страницами по структуре
/en/blog/.... - После этого Яндекс Вебмастер показал, что Яндекс пытается обходить соответствующие URL вида
/blog/.... - Эти альтернативные пути уже попадали под мои 308-редиректы.
- Вместо 404 запросы уходили на нужные страницы
/en/blog/....
Здесь важно исправить формулировку из моей первоначальной версии статьи: я не могу доказать, что Яндекс «неправильно распарсил sitemap». Я увидел неожиданные пути обхода после обновления sitemap, но одна только последовательность событий не доказывает внутреннюю причину. Поисковые системы могут узнавать URL из разных сигналов и исторических источников. Без дополнительных доказательств точнее говорить лишь о том, что Яндекс обходил пути, которых я не ожидал.
Это важное различие. Странный URL в запросе краулера — наблюдение. Объяснение, почему именно краулер выбрал этот URL, — уже отдельное утверждение.
Почему 308-редиректы оказались полезны
Моя логика редиректов фактически считала короткий путь постоянным алиасом локализованного URL. В упрощённом виде:
/blog/example-post -> 308 -> /en/blog/example-postПоэтому даже если краулер приходил по неожиданному адресу, он всё равно попадал на страницу, которую я действительно хотел отдавать.
308 Permanent Redirect — это постоянный HTTP-редирект, сохраняющий метод и тело запроса. Для обычных GET-запросов поискового робота сохранение метода обычно не является главным преимуществом; в моём случае важнее было то, что редирект явно постоянный. В актуальной документации Яндекс Вебмастера и 301, и 308 отнесены к постоянным редиректам.
Официальная документация Яндекс Вебмастера о редиректах.
Это не означает, что 308 автоматически лучше 301 для SEO. У меня 308 уже были настроены, и они решили конкретную задачу: неожиданный URL не превращался в тупик.
Редирект — страховка, а не исправление sitemap
Редиректы сдержали последствия, но не сделали неожиданный обход нормальным. Каждый лишний редирект — это дополнительный запрос и дополнительный переход. А слишком широкое правило редиректа может ещё и скрыть ошибку в генерации URL, если перестать искать источник неправильных адресов.
Если в самом sitemap находятся устаревшие URL или URL, которые сразу редиректят, правильнее исправить sitemap и указывать конечные адреса. Редиректы должны защищать старые, альтернативные или случайно найденные пути, а не служить оправданием для неаккуратных данных.
В моём случае sitemap уже содержал адреса /en/blog/.... Редиректы просто сделали сайт устойчивее к ситуации, когда краулер приходил через /blog/....
Что я теперь проверяю после подобных случаев
Этот эпизод изменил мой подход к миграциям URL и локализации. Мой практический чек-лист теперь такой:
- Открыть реально развернутый sitemap. Не доверять только коду генератора, а посмотреть итоговый файл и выборочно проверить URL.
- Проверить конечные ответы. URL из sitemap, которые должны индексироваться, в норме должны сразу отдавать нужную страницу без лишних цепочек редиректов.
- Проверить предсказуемые альтернативные пути. Если старый URL или адрес без языкового префикса имеет постоянный эквивалент, соответствие должно быть точным и один-к-одному.
- Не создавать цепочки.
A -> B -> Cсложнее контролировать, чемA -> C. - По возможности сверять отчёты краулера с серверными данными. Вебмастер полезен, но не всегда показывает, откуда поисковик впервые узнал конкретный URL.
- Не делать выводы о ранжировании только по обходу. Сканирование, индексирование, ранжирование и трафик — разные этапы.
Минимальная проверка альтернативного пути может выглядеть так:
curl -I https://example.com/blog/example-post
HTTP/2 308
location: https://example.com/en/blog/example-postЭто иллюстративный пример, но принцип простой: проверять точный статус и точный Location, а не предполагать, что правило маршрутизации работает.
Что я могу утверждать, а что нет
Я могу подтвердить, что заранее настроенные 308-редиректы не дали неожиданным запросам к /blog/... закончиться 404 и отправили их на нужные URL.
Я не могу подтвердить, что причиной был именно парсер sitemap Яндекса. Я также не измерял прирост позиций, улучшение индексации или конкретный объём «спасённого» трафика. Такие заявления были бы сильнее моих данных.
Вывод у меня теперь более узкий и, на мой взгляд, более полезный: архитектура URL должна выдерживать предсказуемые ошибки на границах системы. Чистый sitemap остаётся первой линией защиты. Точный слой постоянных редиректов — второй.
Когда есть и то и другое, неожиданный путь краулера с гораздо меньшей вероятностью превращается в тысячи битых URL.