301 vs 302 vs 307 vs 308: какой редирект использовать
Неправильный выбор редиректа может months держать старый URL в Google или превратить отправку формы в GET-запрос, который теряет данные. Ниже описано, что означает каждый код статуса, какой из них выбрать и как проверить, что ваши редиректы работают правильно.
Четыре редиректа в кратком виде
| Статус | Постоянный? | Сохраняет метод и тело? | Когда использовать |
|---|---|---|---|
301 Moved Permanently | Да | Не гарантировано (POST может стать GET) | Перенесённые страницы, HTTP → HTTPS, смена домена |
302 Found | Нет | Не гарантировано | Краткосрочные переезды, A/B-тесты, технические работы |
307 Temporary Redirect | Нет | Да | Временные переезды API-эндпоинтов и форм |
308 Permanent Redirect | Да | Да | Постоянные переезды API-эндпоинтов, которые принимают POST |
Для SEO Google воспринимает 301 и 308 как сильные сигналы того, что новый URL должен заменить старый, и передаёт ему сигналы ранжирования. 302 и 307 говорят Google, что старый URL нужно оставить в индексе. Подробное описание каждого кода есть в справочнике HTTP Status Codes.
Какой выбрать
- Страница переехала навсегда (новый слаг, объединённая статья, новый домен) → 301.
- HTTP на HTTPS, www на без www → 301 (или 308).
- Временно (страница распродажи, техработы, гео- или языковая маршрутизация) → 302.
- Переехал обработчик API-эндпоинта или формы → 308 (постоянно) или 307 (временно), чтобы данные POST не терялись.
Избегайте цепочек и петель
Цепочка — это /a → /b → /c: каждый переход добавляет лишний круг запроса, а краулеры могут перестать следовать по ссылкам после нескольких переходов. Петля (/a → /b → /a) полностью ломает страницу. После миграции направляйте каждый старый URL сразу на его конечный адрес. Проверить полный путь любого URL — каждый переход, статус и время ответа — можно с помощью Redirect Checker, в том числе убедиться, что версии http, https, www и без www попадают в одно место.
Готовые правила для копирования
Apache (.htaccess):
Redirect 301 /old-page /new-page
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Nginx:
location = /old-page { return 301 /new-page; }
server { listen 80; server_name example.com; return 301 https://$host$request_uri; }
Vercel (vercel.json): "permanent": true отдаёт 308, который Google воспринимает как 301.
{ "redirects": [ { "source": "/old-page", "destination": "/new-page", "permanent": true } ] }
Превратить таблицу старых и новых URL в правила для любого сервера можно с помощью Redirect Generator, а полный конфиг Apache — с помощью .htaccess Generator.
Чек-лист миграции
- Сопоставьте каждый старый URL с наиболее подходящим новым, а не отправляйте все на главную страницу, которую Google считает мягкой 404.
- Используйте 301 (или 308) для постоянных переездов и сохраняйте такие редиректы как минимум на год.
- Обновите внутренние ссылки и карту сайта на новые URL, чтобы редиректы оставались только страховочной сеткой.
- Проверьте выборку старых URL, затем следите за отчётом по страницам в Search Console на предмет 404.