О Обходчик
← Блог

301 редирект: как настроить в .htaccess, nginx и CMS

Разбираем, как настроить 301 редирект на сервере и в популярных CMS так, чтобы старые адреса вели на новые, а поисковики и клиенты не терялись по дороге.

Руслан Хуснутдинов, основатель Обходчика около 7 мин чтения

301 редирект — это ответ сервера «страница переехала навсегда»: браузер и поисковый робот автоматически уходят со старого адреса на новый. Настраивают его одним правилом: в файле .htaccess (Apache), в конфиге nginx или через панель CMS. Главное — вести на конкретную соответствующую страницу, а не всё подряд на главную.

Нужен он не всегда. Если страница удалена и замены нет, честнее отдать 404 или 410. Если адрес меняется временно, подойдёт 302. Ошибка в любую сторону стоит заявок: клиент попадает на несуществующую страницу или в чужой раздел, а старый адрес годами висит в поиске.

Когда нужен 301, а когда нет

По RFC 9110 код 301 означает, что целевому ресурсу назначен новый постоянный адрес, и в дальнейшем нужно использовать его. Google в документации по редиректам пишет так: «The 301 and 308 status codes mean that a page has permanently moved to a new location». Поэтому 301 ставят там, где переезд окончательный.

Ситуация Что ставить
Сменили адрес страницы или структуру URL 301
Переезд на новый домен 301 с каждой страницы на её аналог (подробнее в статье про переезд на новый домен)
Переход с http на https 301
Склейка www и без www 301 на выбранный вариант
Акция или технические работы на пару дней 302
Страница удалена, замены нет 404 или 410, см. когда 404 нормальна

Порядок действий

  1. Составьте список старых адресов и для каждого найдите страницу-аналог по смыслу. Вести всё на главную не стоит: Google в руководстве по переезду сайта предупреждает, что массовый редирект на одну нерелевантную страницу, например на главную, может запутать пользователей и быть расценён как «мягкая 404».
  2. Выберите место для правила: сервер (.htaccess или nginx) или панель CMS. Если правил много, сервер надёжнее и быстрее.
  3. Пропишите правила, начиная с самых конкретных адресов и заканчивая общими.
  4. Проверьте каждое правило: статус ответа должен быть 301, а адрес назначения открываться с кодом 200.
  5. Обновите внутренние ссылки, карту сайта и канонические адреса так, чтобы они вели сразу на новые страницы, а не через редирект.

Как настроить редирект на сервере в .htaccess и nginx

Как прописать 301 редирект в .htaccess

Файл .htaccess лежит в корне сайта и работает на Apache. Это же основной способ на большинстве виртуальных хостингов. Редирект одной страницы:

Redirect 301 /old-page/ https://example.com/new-page/

Для более гибких условий используется модуль mod_rewrite. Склейка www и без www:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

Перенаправление с http на https:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

Флаг R=301 задаёт код ответа, L останавливает обработку следующих правил. Примеры для переноса страниц, смены хоста и перехода на https есть в документации Apache. Там же сказано, что для простых случаев лучше Redirect и RedirectMatch, чем mod_rewrite. Перед правкой сохраните копию файла: одна лишняя строка может положить весь сайт с ошибкой 500.

Как настроить 301 в nginx

В nginx .htaccess не читается, правила пишутся в конфиге сайта (в блоке server) и применяются после перезагрузки конфигурации. Одна страница:

location = /old-page/ {
    return 301 https://example.com/new-page/;
}

Склейка www и без www отдельным блоком:

server {
    listen 80;
    server_name www.example.com;
    return 301 https://example.com$request_uri;
}

$request_uri сохраняет путь и параметры запроса. Форма return 301 URL описана в документации nginx. Если указать только адрес без кода, nginx отдаст временный 302. Перед перезагрузкой проверьте конфигурацию командой nginx -t. Если у вас связка nginx и Apache, правила из .htaccess работают только для запросов, которые nginx передал Apache. Статические файлы nginx может отдать сам, минуя эти правила.

Как настроить редирект в WordPress, Битриксе и Тильде

Как настроить 301 редирект в WordPress

Есть три способа:

  • Плагин для редиректов. Вы вводите старый и новый адреса, плагин сам отвечает 301. Это удобно, если редиректы ведёт менеджер, а не разработчик. Минус: каждый запрос проходит через PHP и базу данных, при тысячах правил это заметно.
  • Правила в .htaccess по описанию выше. Работает быстрее всего, но WordPress переписывает свой блок в этом файле, поэтому свои правила ставьте выше блока # BEGIN WordPress.
  • Код в теме или плагине: функция wp_redirect() с вторым аргументом 301. По умолчанию она отдаёт 302 и не завершает выполнение сама, поэтому сразу после вызова нужен exit.

Если вы меняете формат постоянных ссылок, не рассчитывайте, что все старые адреса перенаправятся сами. Проверьте их вручную.

301 редирект в Битриксе

В Битриксе удобнее всего ставить правила на уровне веб-сервера. На Apache это .htaccess в корне, на nginx — конфиг сайта. Если сайт стоит на готовой виртуальной машине с двумя слоями (nginx перед Apache), уточните у администратора, какой из них обрабатывает нужный адрес.

Для единичных страниц можно вызвать в коде перенаправление через LocalRedirect($url, false, "301 Moved permanently"): третий параметр с кодом ответа описан в справке по функции. Встроенные инструменты редиректов в административной части зависят от редакции и версии, поэтому смотрите свою документацию. Правила, заданные в разных местах, могут конфликтовать и давать цепочку, поэтому ведите один общий список.

301 редирект в Тильде

Тильда — конструктор, поэтому .htaccess и nginx недоступны. По справке Тильды редиректы задаются в «Настройки сайта → SEO → Редиректы страниц (Code 301)»: вы указываете старый и новый адреса страницы без домена, добавляете правило и сохраняете. Переадресация работает в рамках одного домена, а браузер может кэшировать результат. Названия пунктов могут меняться, поэтому сверяйтесь со справкой.

Если вы переезжаете на Тильду с другой платформы, постарайтесь сохранить прежние адреса страниц или перечислите соответствие старых и новых в этом разделе. Для переезда на другой домен встроенных возможностей может не хватить, это лучше уточнить в поддержке Тильды. Ссылки со старых внешних сайтов проверьте отдельно.

Типичные ошибки

Признак Причина Что делать
Браузер пишет «слишком много перенаправлений» Петля: A ведёт на B, B обратно на A, или конфликт правил http/https и www Отключите правила по одному и найдите пару, которая ведёт по кругу
Страница открывается через 3–4 перехода Цепочка из старых редиректов Пропишите прямой редирект с исходного адреса на конечный
Все старые адреса ведут на главную Шаблонное правило «всё на главную» Составьте таблицу соответствий страница в страницу
Правило не срабатывает Нет RewriteEngine On, кэш браузера или CDN, правило ниже общего Проверьте порядок правил и откройте адрес в режиме инкогнито
Вместо 301 приходит 302 Плагин или код по умолчанию ставит временный редирект Укажите код явно
Пропали параметры в адресе Правило не передаёт строку запроса В nginx используйте $request_uri, в .htaccess проверьте, не задана ли в адресе назначения своя строка запроса: тогда нужен флаг QSA

Не удаляйте редирект, как только покажется, что поисковики его обработали. В руководстве по переезду сайта Google советует держать редиректы как можно дольше, как правило не меньше года. Если сайт пропал из выдачи после правок, посмотрите разбор про пропажу из поиска Яндекса.

Как проверить редирект прямо сейчас

Откройте проверку цепочки редиректов, введите старый адрес и убедитесь, что код первого шага 301, переходов не больше одного, а конечная страница отвечает 200. Проверка бесплатная и без регистрации.

После правок в конфигах заодно проверьте, что сайт остался доступен: проверка доступности покажет, не упал ли он из-за опечатки в правиле. Если вы ведёте сайты клиентов, добавьте проверку редиректов в ежемесячный чек-лист.

Проверить у себя

Бесплатно и без регистрации, по одному домену.

← Другие разборы в блоге