Как устроено перенаправление
Когда сервер отвечает кодом 3хх, он не отдаёт страницу, а указывает браузеру адрес, по которому нужно обратиться. Адрес лежит в заголовке Location, и браузер сам переходит по нему, обычно так быстро, что вы не замечаете смены. Это и есть редирект.
Коды 301 и 302 самые известные. Первый означает, что ресурс переехал навсегда и новый адрес должен считаться основным. Второй означает временное перемещение: старый адрес остаётся главным, а перенаправление действует на время. Есть и родственные коды 307 и 308, которые сохраняют метод запроса, но для повседневной работы важнее понимать пару 301 и 302.
Разница для браузера и поисковых систем
Браузеры обычно запоминают 301 надолго: повторное открытие старой ссылки сразу ведёт на новый адрес, иногда даже без обращения к серверу. Поэтому неудачный постоянный редирект бывает трудно «отменить»: он застревает в кеше у пользователей.
Поисковые системы воспринимают 301 как сигнал заменить старый адрес в индексе новым и перенести на него накопленный вес ссылок. С 302 они, как правило, продолжают считать основным старый адрес. Если использовать 302 там, где нужен 301, страницы могут долго индексироваться по старым адресам, а если наоборот, временный адрес закрепится навсегда.
Когда применять какой код
301 подходит для смены домена, перехода на защищённый протокол, изменения структуры адресов, склейки версий с «www» и без. 302 подходит для временных случаев: страница на обслуживании, сезонная акция, перенаправление по региону или языку, переход на страницу входа с последующим возвратом.
Если не уверены, какой нужен, спросите себя: вернётся ли когда-нибудь старый адрес в работу? Если да, выбирайте временный редирект. Если нет, постоянный. Также избегайте цепочек, когда один редирект ведёт на другой: каждый лишний шаг замедляет загрузку и теряет часть сигналов.
Как проверить редирект
Откройте вкладку сети в инструментах браузера с сохранением журнала, введите адрес и посмотрите, какие запросы выполнились, каким кодом каждый ответил и куда указывает Location. То же можно сделать утилитой командной строки, которая выводит заголовки без загрузки тела.
Проверяйте конечную точку: она должна отвечать кодом 200 и быть единственным адресом страницы. Проверьте также, что перенаправление сохраняет путь и параметры, а не отправляет всех на главную: такое поведение раздражает посетителей и расценивается поисковиками как мягкая ошибка.
Практические замечания для владельца сайта
Планируя перенос, составьте таблицу соответствия старых и новых адресов и настройте перенаправление каждой страницы на её аналог, а не всех сразу на главную. Оставляйте редиректы работать достаточно долго: поисковым системам и людям с закладками нужно время, чтобы перейти на новые адреса.
Следите за единообразием. Выберите один вариант адреса: с «www» или без, с косой чертой в конце или без, защищённый протокол. Остальные варианты перенаправляйте на выбранный одним шагом. Внутренние ссылки и карту сайта обновите так, чтобы они сразу указывали на конечные адреса и не гоняли посетителей по редиректам. Периодически прогоняйте список важных страниц через проверку заголовков: после обновления системы управления сайтом правила иногда меняются незаметно, и цепочки появляются вновь.
Проблемы и циклы
Самая известная проблема — бесконечная череда перенаправлений, когда адрес А ведёт на Б, а Б обратно на А. Браузер прекращает попытки и показывает ошибку о слишком большом числе перенаправлений. Причины: конфликт правил на веб-сервере и в самом приложении, разные настройки схемы протокола за прокси, неверные значения в настройках адреса сайта.
Если вы посетитель, очистите файлы cookie сайта и кеш: иногда цикл вызывает устаревший файл. Владельцу нужно проверить цепочку по шагам и удалить дублирующее правило.
Если вы подозреваете, что цикл возникает из-за вашего браузера, откройте страницу в другом браузере или в приватном окне. Если цикл повторяется везде, причина на стороне сайта. Владельцу полезно посмотреть, какие правила срабатывают для этого адреса, и временно отключить лишние по одному, наблюдая за результатом.