301 редирект: как настроить в .htaccess, nginx и Битриксе и чем он отличается от 302
301 редирект это постоянная переадресация: сервер сообщает браузеру и поисковому роботу, что страница навсегда переехала на новый адрес, и сразу отправляет туда. Посетитель попадает на нужную страницу, а Яндекс со временем заменяет в поиске старый адрес новым и переносит на него накопленные сигналы. 301 нужен при смене домена, переходе на https, склейке www и без www, изменении адресов страниц и удалении товаров, у которых есть замена. Ниже готовые правила для .htaccess и nginx, настройка в Битриксе и WordPress, разница между 301 и 302 и способы проверить редирект онлайн.
Когда нужен 301 редирект
Ставьте постоянную переадресацию в любой ситуации, где старый адрес больше не будет работать, а у содержимого есть новый дом:
- смена домена, например после ребрендинга;
- переход с http на https после установки SSL-сертификата;
- склейка зеркал:
www.site.ruиsite.ruдолжны вести в одно место; - единый вид адресов: со слешем в конце или без, без
index.phpиindex.html; - смена структуры или ЧПУ: раздел переименовали, адреса стали человекопонятными;
- переезд на новую CMS, когда меняются адреса всех страниц;
- удаление товара или статьи, если есть близкая замена;
- склейка дублей: одна и та же страница открывается по нескольким адресам.
Если у страницы нет замены, редирект не нужен: честный ответ 404 лучше, чем переадресация на что попало. Подробнее в статье что делать с ошибкой 404.
Разница между 301 и 302
Оба кода перенаправляют посетителя, и человек разницы не заметит. Разница для поисковиков и браузеров.
| Код | Смысл | Что делает поисковик | Когда использовать |
|---|---|---|---|
| 301 Moved Permanently | переехала навсегда | заменяет старый адрес в поиске новым | смена адресов, домена, протокола |
| 302 Found | временно в другом месте | обычно оставляет в поиске старый адрес | акция, техработы, временная заглушка |
| 307 Temporary Redirect | временно, с сохранением метода | как 302 | формы и API, где важно не потерять POST |
| 308 Permanent Redirect | навсегда, с сохранением метода | как 301 | API и формы при постоянном переезде |
Самая частая ошибка: поставить 302 там, где переезд постоянный. Многие CMS и плагины по умолчанию делают именно 302. Сайт переехал на https, а в поиске месяцами висят старые адреса с http, потому что поисковику сказали «это временно».
Ещё одно отличие: браузеры запоминают 301 и при следующем заходе даже не спрашивают сервер. Если вы ошиблись в правиле, у тех, кто успел зайти, редирект будет срабатывать из кеша. Поэтому новые правила проверяйте в режиме инкогнито или командой curl, а сложные схемы сначала обкатывайте на 302 и переключайте на 301, когда всё работает.
301 редирект в .htaccess
Файл .htaccess работает на серверах с Apache, а это большинство виртуальных хостингов. Он лежит в корне сайта, и правила в нём применяются без перезапуска сервера. Перед правкой сохраните копию файла: одна ошибка в синтаксисе, и сайт отвечает ошибкой 500.
Одна страница на другую
Redirect 301 /old-page/ https://site.ru/new-page/
Учтите, что Redirect работает по началу адреса: правило выше перенаправит и /old-page/photo/, дописав хвост к новому адресу. Если нужно точное совпадение, используйте RedirectMatch:
RedirectMatch 301 ^/old-page/$ https://site.ru/new-page/
С http на https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
На многих хостингах перед Apache стоит nginx, который принимает https и передаёт запрос дальше уже по http. Тогда %{HTTPS} всегда off, и правило выше зацикливается. В этом случае проверяют заголовок от прокси:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
С www на без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Слеш в конце адреса
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
Условие !-f нужно, чтобы не ломать адреса файлов вроде /sitemap.xml и /robots.txt.
Весь сайт на новый домен
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.ru$ [NC]
RewriteRule ^(.*)$ https://new-site.ru/$1 [R=301,L]
Путь сохраняется: old-site.ru/catalog/ уйдёт на new-site.ru/catalog/, а не на главную. Это принципиально для сохранения позиций.
Порядок правил имеет значение. Сначала идут точечные редиректы конкретных страниц, потом общие правила для протокола, www и слеша. Иначе получится цепочка: http, потом https, потом без www, потом новый адрес. Каждый лишний шаг это ещё один запрос и потерянное время.
301 редирект в nginx
На VPS и выделенных серверах чаще стоит nginx, и .htaccess он не читает. Правила пишутся в конфигурации сайта, после правки нужно проверить синтаксис командой nginx -t и перезагрузить конфигурацию.
# http и www на https без www, одним шагом
server {
listen 80;
server_name site.ru www.site.ru;
return 301 https://site.ru$request_uri;
}
server {
listen 443 ssl;
server_name www.site.ru;
# здесь сертификат
return 301 https://site.ru$request_uri;
}
# отдельная страница внутри основного server
location = /old-page/ {
return 301 /new-page/;
}
Для сотен адресов после переезда удобнее map: таблица «старый адрес, новый адрес» в отдельном файле, который легко сгенерировать из Excel.
map $uri $new_uri {
include /etc/nginx/redirects.map;
}
server {
# ...
if ($new_uri) {
return 301 $new_uri;
}
}
В файле redirects.map каждая строка выглядит так: /old/address/ /new/address/;.
301 редирект в Битриксе
В 1С-Битрикс есть несколько способов, и выбор зависит от задачи.
- Через .htaccess или nginx. Для склейки зеркал, https и массового переезда это самый надёжный вариант: правило срабатывает до загрузки ядра Битрикса и не нагружает сайт. Если сайт на виртуальной машине BitrixVM, учитывайте связку nginx и Apache, описанную выше.
- Через код. Функция
LocalRedirectпо умолчанию делает 302. Чтобы получить постоянный редирект, статус передают явно:LocalRedirect("/new-page/", false, "301 Moved permanently");. Пропущенный третий параметр одна из частых причин, почему после переделки сайта в поиске остаются старые адреса. - Через модули. В Маркетплейсе 1С-Битрикс есть модули для управления редиректами из админки. Удобно, когда редиректы ставит контент-менеджер, но перед покупкой проверьте, какой код ответа модуль отдаёт по умолчанию.
Редирект в WordPress, Tilda и других CMS
В WordPress переадресации обычно делают плагином Redirection: в нём есть журнал 404, импорт списка редиректов и выбор кода ответа. Склейку зеркал и https при этом лучше оставить серверу, а адрес сайта поправить в настройках WordPress. На Tilda 301-редиректы задаются в настройках сайта, в Webasyst правила можно прописать в настройках сайта или на сервере. Общее правило для любой CMS: после настройки проверьте реальный код ответа, интерфейс может показывать одно, а сервер отдавать другое.
Как составить карту редиректов при переезде
Когда меняется много адресов сразу, редиректы пишут не по памяти, а по таблице. Порядок работы такой:
- Соберите все старые адреса. Краулером обойдите текущий сайт, добавьте адреса из sitemap.xml, из отчётов Вебмастера о страницах в поиске и из Метрики за год: там всплывают страницы, на которые нет ссылок внутри сайта, но есть трафик.
- Сопоставьте каждому адресу новый. Для типовых страниц соответствие часто получается формулой: товар находится по артикулу, статья по заголовку. Остальное сопоставляется вручную.
- Решите судьбу страниц без пары. Близкая по смыслу страница или категория получает 301, остальные честно отдают 404.
- Загрузите таблицу на сервер. Для nginx удобен
map, для Apache список правил в .htaccess, для CMS импорт в модуль редиректов. - Проверьте всю таблицу целиком в Screaming Frog в режиме List, а через неделю после запуска посмотрите в логах и Вебмастере, какие старые адреса всё ещё отдают 404.
Таблицу сохраните: через полгода, когда кто-то спросит, куда делась старая страница, ответ будет в ней.
Как проверить 301 редирект онлайн
Проверка занимает минуту, и делать её нужно после каждого изменения.
- Яндекс Вебмастер, «Проверка ответа сервера». Показывает, что видит робот Яндекса: код ответа и адрес, куда ведёт редирект.
- Онлайн-сервисы проверки кода ответа, например httpstatus.io или bertal.ru. Вставляете адрес и видите всю цепочку переходов с кодами.
- Командная строка.
curl -I -L https://site.ru/old-page/выведет заголовки каждого шага: код, адрес вLocation, итоговую страницу. - Браузер. В DevTools на вкладке Network включите Preserve log и откройте старый адрес: первая строка покажет 301 и новый адрес.
- Массовая проверка. Загрузите список старых адресов в Screaming Frog в режиме List: он покажет коды ответа, финальные адреса и цепочки редиректов для всех строк сразу.
Типичные ошибки
| Ошибка | Чем плоха | Как правильно |
|---|---|---|
| 302 вместо 301 | старые адреса держатся в поиске | явно указывать 301 |
| Цепочки из 3-4 редиректов | потеря времени и части сигналов | сразу на финальный адрес |
| Бесконечный цикл | браузер пишет ERR_TOO_MANY_REDIRECTS | проверить правила для https и прокси |
| Всё на главную | поисковик считает это soft 404, человек теряется | на релевантную страницу или 404 |
| Редирект через JavaScript или meta refresh | поисковики обрабатывают хуже | серверный 301 |
| Потеря пути при смене домена | все страницы ведут на главную | сохранять $request_uri или $1 |
| Сняли редиректы через месяц | старые ссылки снова в 404 | держать минимум год, лучше бессрочно |
| Внутренние ссылки ведут на старые адреса | лишний шаг на каждом клике | обновить ссылки в меню и текстах |
Частые вопросы
Передаёт ли 301 редирект вес ссылок и позиции?
Да, для этого он и нужен. Яндекс склеивает старый и новый адрес и учитывает накопленные сигналы на новом. Но переклейка занимает время, обычно от нескольких недель, и в этот период позиции могут колебаться. Как пройти этот период спокойнее, разобрано в статье про переезд сайта без потери позиций.
Сколько держать 301 редирект?
Минимум год, а лучше не снимать совсем. На старые адреса продолжают вести внешние ссылки, закладки, письма и старые рекламные материалы. Правило в конфигурации почти ничего не стоит.
Замедляет ли редирект сайт?
Каждый переход это дополнительный запрос к серверу, на мобильном интернете он может стоить сотни миллисекунд. Один редирект незаметен, цепочка из нескольких уже ощущается. Поэтому внутренние ссылки должны вести сразу на конечные адреса.
Что выбрать для дублей: 301 или canonical?
Если дубль не нужен посетителям, например адрес с index.php или с заглавными буквами, ставьте 301. Если обе версии должны открываться, например страница товара с параметром сортировки или UTM-метками, оставьте их доступными и укажите rel="canonical" на основную версию. Canonical это подсказка поисковику, а 301 это прямое указание, поэтому там, где можно обойтись редиректом, он надёжнее.
Нужно ли сообщать Яндексу о редиректах?
Для отдельных страниц нет, робот увидит их сам. При смене домена или переходе на https дополнительно воспользуйтесь разделом «Переезд сайта» в Вебмастере, подробности есть в статье про SSL-сертификат для сайта.
Если редиректов сотни, сайт переезжает на новую CMS или после правок появились циклы, мы составим карту переадресаций, настроим её на сервере и проверим каждую строку. Такую работу делаем в рамках техподдержки сайта или как часть внутренней оптимизации.