301 редирект: как настроить и проверить
Постоянный редирект переносит посетителя и поисковый вес со старого адреса на новый. В руководстве — синтаксис правила, готовые примеры для Apache, nginx, WordPress, 1С-Битрикс и Tilda, способы проверки кода ответа и типичные ошибки, из-за которых редирект не работает.
Содержание
Коротко: как настроить 301 редирект
- Составьте карту адресов. Выпишите старые URL и новые адреса в таблицу, сохраните её в CSV. Список старых страниц возьмите из панелей вебмастера, sitemap и логов сервера.
- Выберите уровень настройки. Единичные адреса проще закрыть средствами CMS, массовые переносы, смену домена и протокола — правилами веб-сервера.
- Добавьте правило. Пропишите директиву в .htaccess, конфигурации nginx, настройках страницы или через плагин. Сначала проверьте на одном адресе.
- Проверьте ответ сервера. Убедитесь, что первый ответ — 301, заголовок Location ведёт на нужный адрес, цепочка короткая, а конечная страница отдаёт 200.
- Обновите ссылки и sitemap. Поправьте внутренние ссылки, меню, canonical и карту сайта, чтобы редирект оставался страховкой, а не основным способом навигации.
- Следите за результатом. Отслеживайте в панелях вебмастера новые 404 и ошибки сервера, дополняйте карту редиректов по мере необходимости.
Что такое 301 редирект и зачем он нужен
301 Moved Permanently — код состояния HTTP. Им сервер сообщает, что запрошенный адрес навсегда переехал на другой. В ответе передаётся заголовок Location с новым адресом: браузер открывает его автоматически, а поисковый робот запоминает связь между старой и новой страницей.
Для поисковых систем 301 — сигнал объединить два адреса в один. История страницы, внешние ссылки и накопленные сигналы постепенно переносятся на новый URL. Поэтому при переезде сайта, смене структуры и протокола используют именно постоянный редирект, а не временный.
Типичные задачи:
- переход с HTTP на HTTPS;
- склейка адресов с
wwwи безwww; - смена домена или переезд на поддомен;
- новая структура URL после редизайна или смены CMS;
- объединение двух материалов в один;
- смена расширений (
.html→ адрес без расширения), регистра букв, лишнего слеша на конце; - перенос содержимого раздела в каталог.
Важное ограничение: 301 уместен там, где у старого адреса есть полноценная замена. Если страница просто исчезла, корректнее отдать 404 или 410. Массовый редирект «всего на главную» поисковые системы часто трактуют как мягкую ошибку и не переносят вес на релевантную страницу.
Чем 301 отличается от 302 и других кодов
| Код | Значение | Когда используют |
|---|---|---|
| 301 | Moved Permanently | постоянный переезд адреса |
| 302 | Found | временная переадресация: тест, обслуживание, A/B |
| 303 | See Other | перенаправление после отправки формы (POST → GET) |
| 307 | Temporary Redirect | временно, с сохранением метода и тела запроса |
| 308 | Permanent Redirect | постоянно, с сохранением метода и тела запроса |
| 404 | Not Found | страницы нет и замены нет |
| 410 | Gone | страница удалена безвозвратно |
Разница между 301 и 302 — в сроке. При 302 старый адрес остаётся в индексе, новый считается временной копией. При 301 поисковик постепенно заменяет старый URL новым.
Отдельно про кэш: 301 браузеры запоминают надолго и могут не обращаться к серверу повторно. Если правило ошибочное, исправление увидят не все пользователи сразу — придётся чистить кэш браузера или ждать. Поэтому правило проверяют до публикации.
Как устроен редирект на уровне HTTP
Внешне это выглядит так:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page/
Content-Type: text/html; charset=utf-8
Тело ответа обычно короткое, со ссылкой на новый адрес для клиентов, которые не умеют переходить автоматически. Клиент читает Location и повторяет запрос уже по новому URL.
Способы реализации по уровням, от предпочтительного к нежелательному:
- Веб-сервер (nginx, Apache) — срабатывает до обработки скриптов, самый быстрый вариант.
- CMS и фреймворки — плагины, компоненты, правила маршрутизации, обработчики событий.
- Клиентские способы —
<meta http-equiv="refresh">иlocation.hrefв JavaScript. Сервер при этом отдаёт 200, и поисковый робот воспринимает такую переадресацию хуже.
Синтаксис зависит от уровня: в Apache используют директивы Redirect, RedirectMatch и RewriteRule, в nginx — return и rewrite, в PHP — функцию header() с кодом 301.
Пошаговая настройка
- Составьте карту адресов. Таблица «старый URL → новый URL» в Excel или Google Таблицах, затем экспорт в CSV — так удобно вести десятки и сотни правил. Старые адреса берите из панелей вебмастера, старой карты сайта, логов сервера, экспорта прежней CMS.
- Определите уровень. Один-два адреса проще закрыть средствами CMS. Смену домена, протокола, массовую смену структуры — правилами сервера.
- Напишите правило. Сначала на тестовом окружении или на одном второстепенном URL, чтобы не сломать навигацию.
- Проверьте ответ. Первый ответ должен быть 301,
Location— вести на нужный адрес, цепочка — короткой, конечная страница — отдавать 200. - Обновите ссылки и карту сайта. Внутренние ссылки, меню, canonical и sitemap.xml должны указывать на новые адреса. Редирект — страховка для внешних ссылок, а не способ навигации внутри сайта.
- Наблюдайте за результатом. Отслеживайте новые 404 и ошибки сервера, дополняйте карту правил по мере появления старых адресов.
Примеры для серверов и CMS
Apache и .htaccess
Директивы Redirect работают через mod_alias, RewriteRule — через mod_rewrite. Файл .htaccess размещают в корне сайта, а в конфигурации сервера должно быть разрешено переопределение настроек (AllowOverride All).
Постоянный редирект одного адреса:
Redirect 301 /old-page.html https://example.com/new-page/
Перенос целого раздела задаётся префиксом:
Redirect 301 /old/ https://example.com/new/
Шаблон с сохранением части адреса — группа $1 подставляет совпавший фрагмент:
RedirectMatch 301 ^/catalog/(.*)\.html$ https://example.com/products/$1/
Через mod_rewrite удобно объединять условия. Пример склейки протокола и www:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]
Перенос отдельной страницы тем же модулем:
RewriteRule ^old-page\.html$ /new-page/ [R=301,L]
Флаг [R=301,L] задаёт код ответа и означает «последнее правило». Строка запроса при RewriteRule сохраняется по умолчанию; если она не нужна, в конце замены ставят ?.
nginx
Склейка протокола и www на уровне серверных блоков:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
}
Точное совпадение адреса задаётся блоком location =:
location = /old-page.html {
return 301 /new-page/;
}
Массовые правила удобно держать в map, а внутри server оставить одну проверку:
map $uri $redirect_to {
/old-1.html /new-1/;
/old-2.html /new-2/;
default "";
}
if ($redirect_to != "") {
return 301 $redirect_to;
}
Конструкция if в nginx считается нежелательной, но для одного return она безопасна. После правки конфигурации выполняют проверку (nginx -t) и перезагрузку.
WordPress
- Плагин Redirection — редиректы в админке, журнал 404, импорт из CSV. Для пары адресов хватает Simple 301 Redirects.
- Смена структуры постоянных ссылок в «Настройки → Постоянные ссылки» сама по себе не создаёт редиректы для старых записей: их нужно добавить отдельно.
- При смене домена сначала правят
WP_HOMEиWP_SITEURLвwp-config.phpили в базе, затем ищут старые адреса в контенте. - Без плагина правило можно прописать в
.htaccessили в теме черезwp_redirect()с кодом 301, но вызывать её нужно до вывода страницы, иначе появится ошибка «headers already sent». - В Yoast SEO управление редиректами доступно в платной редакции; в бесплатной есть только базовые возможности.
1С-Битрикс
- Файл
.htaccessв корне сайта — общие правила для Apache. urlrewrite.php— правила обработки адресов, если включены ЧПУ.- Событие
OnBeforePrologв/bitrix/php_interface/init.php— когда правило нужно привязать к логике сайта:
AddEventHandler("main", "OnBeforeProlog", "myRedirect");
function myRedirect()
{
$uri = $GLOBALS["APPLICATION"]->GetCurPage();
if ($uri === "/old-page.php") {
LocalRedirect("/new-page/", true, "301 Moved Permanently");
}
}
Третий параметр LocalRedirect() задаёт код состояния, по умолчанию используется 302.
При смене домена адрес сайта меняют в настройках продукта (раздел с параметрами сайтов), затем правят .htaccess или конфигурацию nginx. В части редакций есть готовые средства управления редиректами в модуле SEO — проверьте состав своей версии перед настройкой вручную.
Tilda
- В настройках страницы можно указать адрес, куда перенаправлять посетителя; набор доступных опций зависит от тарифа. Это удобно, когда страница устарела, но на неё ведут внешние ссылки.
- Перенаправления на уровне домена (
www, протокол) настраиваются в панели домена, а не в редакторе страниц. - Массовых правил в Tilda нет: для десятков адресов удобнее вести редиректы на уровне сервера или прокси.
Как проверить 301 редирект
Самый надёжный способ — посмотреть ответ сервера в консоли:
curl -I https://example.com/old-page.html
В первой строке должен быть HTTP/1.1 301 Moved Permanently, ниже — Location с новым адресом. Чтобы пройти всю цепочку и увидеть коды всех шагов:
curl -ILs https://example.com/old-page.html | grep -Ei "^(HTTP|location)"
Другие способы:
- онлайн-сервисы проверки редиректов показывают всю цепочку, коды и финальный адрес;
- в браузере: DevTools → Network, включите сохранение журнала и посмотрите первый ответ — он должен быть 301, финальный — 200;
- учтите кэш: 301 запоминается браузером, поэтому проверяйте в приватном окне или через curl.
Хороший результат выглядит так: один переход, финальный URL отдаёт 200, canonical указывает на него же, страница в карте сайта обновлена.
Частые ошибки
- 302 вместо 301. Временный код не переносит вес и оставляет старый адрес в индексе.
- Цепочки. A → B → C замедляет загрузку и размывает сигналы. Правило должно вести сразу на конечный адрес.
- Цикл. A → B → A даёт ошибку «слишком много редиректов». Проверяйте условия и добавляйте исключения.
- Всё на главную. Массовый перенос удалённых страниц на главную не помогает: поисковые системы не считают её заменой.
- Потеря GET-параметров. В
RewriteRuleстрока запроса сохраняется не всегда — проверьте, что метки и параметры не теряются. - Правило не работает. Причины: не подключён модуль, запрещён
AllowOverride, файл лежит не в том каталоге, правило перекрыто более ранним с флагомL. - Заголовки уже отправлены. Редирект из шаблона после вывода HTML не сработает.
- Неполная склейка. Сделан переход на HTTPS, но не выполнен переход с
www— получаются две версии сайта. - Правило задевает ресурсы. Редирект стилей, скриптов и картинок ломает вёрстку; проверяйте, что условия не затрагивают каталоги с ресурсами.
- Редирект на 404. Новый адрес должен существовать и отдавать 200, иначе смысла в переносе нет.
- Забытые ссылки и карта сайта. Если внутренние ссылки ведут на старые адреса, каждый переход проходит через редирект и нагружает сервер.
- Проверка только глазами. Без взгляда на код ответа легко принять 302 или 200 с JavaScript за корректный 301.
Частые вопросы
Как быстро поисковые системы учитывают 301 редирект?
Мгновенного эффекта не бывает. Обычно переобход занимает от нескольких дней до нескольких недель и зависит от частоты обхода сайта, количества ссылок на старый адрес и корректности настройки. Ускорять процесс имеет смысл через карту сайта и запрос переобхода в панелях вебмастера.
Что делать, если после включения редиректа позиции просели?
Кратковременное снижение — обычное дело при смене адресов. Проверьте, что отдаётся именно 301, нет цепочек и циклов, новый адрес открывается с кодом 200 и содержит тот же контент, а canonical указывает на новую версию. Если контент на новой странице изменился, просадка может быть связана именно с этим.
Можно ли сделать редирект через meta refresh или JavaScript?
Технически можно, но для постоянного переноса это плохой вариант: сервер отдаёт код 200, поисковый робот обрабатывает такую переадресацию хуже, а вес со старого адреса может не переноситься. Используйте серверный 301, а клиентские способы оставьте для редких случаев, когда доступа к серверу нет.
Сколько времени нужно держать редирект?
Правило лучше не удалять: старые ссылки, закладки и внешние упоминания живут годами. Снимать 301 имеет смысл только если адрес снова стал самостоятельной страницей, иначе вы получите новые 404.
Почему браузер пишет «слишком много редиректов»?
Это признак цикла: адрес A перенаправляет на B, а B обратно на A, либо правило срабатывает на сам перенаправленный URL. Проверьте условия правил и добавьте исключение для конечного адреса, иначе ошибка сохранится и в кэше браузера.
Чем 301 отличается от 308?
Оба кода постоянные. 308 дополнительно требует сохранять HTTP-метод и тело запроса, поэтому он актуален для API и форм. Для обычных страниц сайта достаточно 301 — он понятен всем браузерам и поисковым роботам.
Материал подготовлен редакцией справочника Торох и носит справочный характер: интерфейсы программ и настройки серверов зависят от версии. Нашли неточность? Напишите нам.