301 редирект: как настроить в .htaccess, nginx и Битриксе и чем он отличается от 302

Сайты 10 мин чтения

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навсегда, с сохранением методакак 301API и формы при постоянном переезде

Самая частая ошибка: поставить 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: после настройки проверьте реальный код ответа, интерфейс может показывать одно, а сервер отдавать другое.

Как составить карту редиректов при переезде

Когда меняется много адресов сразу, редиректы пишут не по памяти, а по таблице. Порядок работы такой:

  1. Соберите все старые адреса. Краулером обойдите текущий сайт, добавьте адреса из sitemap.xml, из отчётов Вебмастера о страницах в поиске и из Метрики за год: там всплывают страницы, на которые нет ссылок внутри сайта, но есть трафик.
  2. Сопоставьте каждому адресу новый. Для типовых страниц соответствие часто получается формулой: товар находится по артикулу, статья по заголовку. Остальное сопоставляется вручную.
  3. Решите судьбу страниц без пары. Близкая по смыслу страница или категория получает 301, остальные честно отдают 404.
  4. Загрузите таблицу на сервер. Для nginx удобен map, для Apache список правил в .htaccess, для CMS импорт в модуль редиректов.
  5. Проверьте всю таблицу целиком в Screaming Frog в режиме List, а через неделю после запуска посмотрите в логах и Вебмастере, какие старые адреса всё ещё отдают 404.

Таблицу сохраните: через полгода, когда кто-то спросит, куда делась старая страница, ответ будет в ней.

Как проверить 301 редирект онлайн

Проверка занимает минуту, и делать её нужно после каждого изменения.

  1. Яндекс Вебмастер, «Проверка ответа сервера». Показывает, что видит робот Яндекса: код ответа и адрес, куда ведёт редирект.
  2. Онлайн-сервисы проверки кода ответа, например httpstatus.io или bertal.ru. Вставляете адрес и видите всю цепочку переходов с кодами.
  3. Командная строка. curl -I -L https://site.ru/old-page/ выведет заголовки каждого шага: код, адрес в Location, итоговую страницу.
  4. Браузер. В DevTools на вкладке Network включите Preserve log и откройте старый адрес: первая строка покажет 301 и новый адрес.
  5. Массовая проверка. Загрузите список старых адресов в 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 или после правок появились циклы, мы составим карту переадресаций, настроим её на сервере и проверим каждую строку. Такую работу делаем в рамках техподдержки сайта или как часть внутренней оптимизации.

Заявка

Обсудим вашу задачу

Опишите, что нужно, и пришлите адрес сайта, если он есть. Посмотрим, предложим решение и назовём цену и срок. Консультация бесплатная.

  • Ответим в течение рабочего дня
  • Работаем по договору, оплата по счёту
  • Сначала план и смета, потом работа
Или напишите в мессенджер: Telegram MAX

Заявка

Расскажите о задаче

Ответим в течение рабочего дня: уточним детали, назовём срок и цену. Ни к чему не обязывает.