301-й редирект сообщает поисковику и браузеру, что страница переехала навсегда. Передаёт практически весь ссылочный вес и историю ранжирования на новый URL — в отличие от временного 302-го редиректа.
Применяется при смене структуры URL, миграции на HTTPS, объединении дубликатов, переезде на новый домен. Опасно делать цепочки редиректов (A → B → C): теряется часть веса, замедляется загрузка. Всегда стремитесь к одному 301.
# nginx: постоянный редирект со старого URL на новый location = /staraya-stranica { return 301 /novaya-stranica; } # Или массово через регулярку для смены раздела location ~ ^/seocases/(.*)$ { return 301 /cases/$1; }
Старый /catalog/kuhni-zakaz/ → 301 → /kuhni/ — поисковик переносит позиции на новый URL.
Технически 301 лучше ставить на уровне сервера (Nginx — return 301, Apache — RewriteRule в .htaccess), а не PHP-редиректом и тем более не через meta refresh или JS: серверный ответ робот видит сразу по коду статуса, а JS-перенаправление Яндекс может вовсе не отработать. Проверяйте цепочку через «Проверку ответа сервера» в Яндекс.Вебмастере или curl -I — в ответе должен быть ровно один Location и финальный 200, без промежуточных 301/302.
Склейка позиций после 301 не мгновенная: Яндекс переносит сигналы в течение нескольких апдейтов (от пары недель до 1-2 месяцев), Google — обычно быстрее. Пока идёт склейка, держите старый URL доступным именно с кодом 301, не закрывайте его в robots.txt и не отдавайте 404 — иначе робот не пройдёт по редиректу и вес не передастся. Для массового переезда поможет canonical как страховка, но заменять им 301 при реальном переезде нельзя: canonical — рекомендация, 301 — директива.
Сервер отвечает кодом 301 и заголовком Location с новым адресом — страница переехала навсегда.
302 — временный, вес остаётся на старом URL; 301 склеивает старый и новый адрес и передаёт ранжирование.
A→B→C теряет вес и скорость, а A→B→A зацикливает робота — нужен один прямой 301 на финальный URL.