301 и 302 редирект: разница и какой ставить
Код 301 говорит «адрес сменился навсегда», код 302 — «страница временно там». Разбираем, что из этого следует для поиска и посетителей и как не поставить не тот код.
Разница между 301 и 302 редиректом в обещании. Код 301 сообщает, что страница переехала навсегда и старый адрес можно забыть. Код 302 сообщает, что страница временно доступна по другому адресу, а основным остаётся старый. Если переезд окончательный, ставьте 301. Если вы что-то временно подменяете (акция, техработы, тест), ставьте 302.
Ошибка в выборе не роняет сайт, поэтому её долго не замечают. Посетитель всё равно попадёт на нужную страницу. Последствия другие: поисковик может дольше держать в выдаче старый адрес, а браузер продолжит ходить по переносу, который вы уже отменили. Для интернет-магазина это значит, что карточка товара живёт под двумя адресами. Для студии — что после переезда клиента трафик восстанавливается дольше, чем обещали.
Что означают 301 и 302
Оба кода относятся к семейству 3xx: сервер не отдаёт страницу, а указывает, куда идти дальше. Браузер или робот читает заголовок Location и запрашивает новый адрес. Определения дал стандарт HTTP: RFC 9110 описывает 301 Moved Permanently как назначение ресурсу нового постоянного адреса. В следующем разделе код 302 Found означает, что ресурс временно находится по другому адресу и клиенту следует продолжать использовать прежний.
| 301 Moved Permanently | 302 Found | |
|---|---|---|
| Смысл | Перенос навсегда | Перенос временно |
| Основной адрес | Новый | Старый |
| Кэширование | Ответ кэшируется по умолчанию | Без явных заголовков кэширования не кэшируется |
| Сигнал для Google | Новый адрес должен стать каноничным | Старый адрес может остаться в результатах |
| Типичный случай | Смена домена, ЧПУ, склейка www | Акция, техработы, A/B-тест |
Про кэширование стандарт говорит прямо: в описании кода 301 ответ назван кэшируемым по умолчанию. Поэтому ошибочный 301 исправляется медленно. Посетитель, который уже получил его, может какое-то время ходить по старому переносу, даже если на сервере правило давно убрано.
Когда ставить 301
Ставьте 301, когда возвращаться на старый адрес вы не собираетесь. Типовые случаи:
- переезд на другой домен (порядок действий разобран в статье о переезде сайта на новый домен);
- переход с HTTP на HTTPS;
- выбор одного главного зеркала: с
wwwна безwwwили наоборот; - смена структуры адресов: страница была
/catalog/item-5, стала/catalog/chairs/item-5; - удалённая страница, у которой есть прямой заменитель, например старая модель товара и новая.
В документации Google сказано, что при постоянном редиректе система индексации использует его как сигнал: целевая страница должна стать каноничной. Для временного редиректа такого сигнала нет, и исходный адрес может остаться в результатах поиска.
Если заменителя у страницы нет, редирект не нужен: честный ответ 404 лучше, чем перенос на главную. Когда 404 нормален, а когда нет, разобрано в статье про ошибку 404.
Когда ставить 302
302 нужен там, где «временно» действительно значит временно:
- страница на техработах или на время обновления отправляет на заглушку, а потом всё возвращается;
- сезонная или акционная страница на несколько недель подменяет обычную;
- A/B-тест показывает часть посетителей другую версию;
- посетителя отправляют на языковую или региональную версию, но основной адрес остаётся прежним;
- товар временно недоступен, вы направляете на аналог, а потом вернёте карточку.
Признак правильного 302 — вы можете назвать дату или событие, после которых редирект исчезнет. Если такого события нет, это не 302, а забытый 301.
Как выбрать за пять шагов
- Ответьте себе, вернётся ли старый адрес. Если нет, это 301, если да, то 302.
- Проверьте, есть ли у старой страницы реальный заменитель. Если нет, редирект не нужен: отдавайте 404 или 410.
- Настройте один переход вместо цепочки: старый адрес должен вести сразу на конечный.
- Убедитесь, что конечная страница открывается с кодом 200, а не с ошибкой.
- Запишите, зачем поставили 302 и когда его снимать. Без этого временный редирект по недосмотру становится постоянным.
Если нужно сохранить метод запроса, например при перенаправлении формы с POST, смотрите на коды 307 и 308. Для 301 и 302 стандарт допускает, что клиент заменит POST на GET по историческим причинам. А в разделе про код 307 прямо сказано, что клиент не должен менять метод запроса при автоматическом переходе. Код 308 играет ту же роль для постоянного переноса. Для обычных страниц и ссылок эта разница не нужна, поэтому выбор почти всегда между 301 и 302.
Частые ошибки
| Признак | Причина | Что делать |
|---|---|---|
| После переезда в поиске остаётся старый адрес | Вместо 301 стоит 302 | Заменить на 301 и дождаться переобхода |
| Редирект убрали, а посетители всё ещё попадают на новую страницу | Браузер закэшировал 301 | Проверить в режиме инкогнито или после очистки кэша |
| Страница открывается с задержкой | Цепочка из нескольких редиректов | Свести к одному переходу со старого адреса на конечный |
| Браузер пишет «слишком много перенаправлений» | Редиректы ссылаются друг на друга | Найти правило, которое возвращает обратно, и убрать его |
| Все удалённые страницы ведут на главную | Массовое правило на всякий случай | Оставить редирект только там, где есть близкая замена |
| 302 стоит годами | Временную меру не сняли | Вернуть исходный адрес или заменить на 301 |
Самый коварный случай — тихий. Сайт переехал, редирект работает, все довольны, но на HTTPS-версию по ошибке стоит 302. Поисковик в таком случае может дольше держать старый адрес. Если трафик просел после переноса, начните с проверки кодов, а затем посмотрите, почему сайт мог пропасть из поиска Яндекса.
Редиректы ломаются не только при переезде. Правка конфига, обновление CMS или плагина способны добавить лишний переход или подменить 301 на 302. Поэтому проверку цепочек полезно включить в ежемесячный чек-лист по сайту клиента.
Как проверить редиректы прямо сейчас
Код ответа можно посмотреть в инструментах разработчика браузера, во вкладке Network, или командой curl -I в терминале. Для одной страницы этого хватает, а для сайта из сотен адресов удобнее проверять автоматически.
Бесплатная проверка цепочки редиректов покажет, какой код отдаёт адрес, сколько в цепочке переходов и куда она приводит. Если после правки сайт перестал открываться, быстро выяснить это поможет проверка доступности сайта. Регистрация для обеих проверок не нужна.