Содержание11
- Что такое 301 редирект и что он сообщает поиску
- Когда нужен 301 редирект, а когда нет?
- 301, 302, 307 или 308: какой код выбрать?
- Как настроить 301 редирект в nginx
- Как настроить 301 редирект в .htaccess на Apache
- Редирект через CMS и PHP: где подвох
- Как проверить, что 301 редирект работает?
- Частые ошибки с 301 редиректом
- С чего начать, если адреса уже меняли
- Частые вопросы
- Источники
301 редирект — ответ сервера «страница переехала навсегда»: браузер и поисковый робот уходят на новый адрес, а Яндекс и Google со временем показывают в выдаче его вместо старого. Ставьте 301, когда меняете адрес страницы, домен или протокол. Позиции переживают переезд, если каждая старая страница ведёт на свою новую, без цепочек, а правило живёт не меньше года.
Что такое 301 редирект и что он сообщает поиску
301 Moved Permanently — код ответа, которым сервер сообщает: у ресурса новый постоянный адрес, и все будущие ссылки должны вести туда. Так его определяет стандарт HTTP, RFC 9110. Вместе с кодом сервер отдаёт заголовок Location с новым адресом, браузер открывает его сам, и посетитель разницы не замечает.
Для поиска 301 — команда заменить адрес в индексе. Робот Яндекса старый документ не индексирует, а страницу, на которую ведёт перенаправление, проиндексирует, если она доступна. Google при постоянной переадресации показывает в выдаче конечную страницу, при временной — исходную.
Отсюда главное свойство редиректа: он переносит в выдаче адрес, а не текст. Если новая страница отвечает на тот же запрос, что и старая, она занимает её место. Если на новом адресе другое содержание, 301 позиций не спасёт: поисковик оценит страницу заново.
301 переносит в выдаче адрес, а не текст. Позиции сохраняются, только если новая страница отвечает на тот же запрос, что и старая.
Факт. Яндекс относит к постоянным перенаправлениям коды 301 и 308, к временным — 302, 303 и 307.
Когда нужен 301 редирект, а когда нет?
301 нужен всегда, когда старый адрес больше не вернётся, а у содержания появился новый дом. Google перечисляет те же случаи: перенос на другой домен, несколько адресов у одной страницы, объединение двух сайтов и удалённая страница, у которой есть замена.
- Сменился адрес страницы — переименовали раздел, убрали из URL расширение .php или дату, перенесли статью в другую рубрику.
- Сайт переехал на новый домен — каждая старая страница ведёт на аналогичную новую.
- Сайт перешёл на HTTPS — все адреса с http отдают 301 на ту же страницу с https, подробнее в разборе как установить SSL-сертификат и перейти на HTTPS.
- Склейка зеркал — сайт открывается с www и без, со слэшем на конце и без: одну версию оставляете, остальные перенаправляете на неё.
- Две страницы слили в одну — слабую перенаправляете на сильную, чтобы ссылки и закладки не вели в пустоту.
301 не нужен в двух случаях. Страница удалена, и замены у неё нет: отдавайте 404 или 410, так советуют и Яндекс, и Google, а редирект на главную только запутает посетителя — как правильно оформить такую страницу, разобрали в статье про ошибку 404 на сайте. Переадресация временная — акция, техработы, сезонный раздел: ставьте 302 или 307, тогда в выдаче останется исходный адрес.
301, 302, 307 или 308: какой код выбрать?
Для переезда навсегда подходят 301 и 308, для временного — 302 и 307. Разница внутри пар важна для форм: по стандарту браузер при 301 и 302 вправе превратить POST-запрос в GET, а при 308 и 307 метод запроса сохраняется.
| Код | Что сообщает | Какой адрес в выдаче | Когда ставить |
|---|---|---|---|
| 301 | Ресурс переехал навсегда | Новый | Смена адреса страницы, домена, протокола |
| 308 | Переехал навсегда, метод запроса не меняется | Новый | Постоянный перенос адреса, куда отправляют формы или запросы к API |
| 302 | Ресурс временно по другому адресу | Старый | Акция, техработы, временная заглушка |
| 307 | Временно, метод запроса не меняется | Старый | Временный перенос адреса, принимающего формы |
Для обычных страниц сайта берите 301: его понимают все роботы, CMS и плагины. 308 нужен там, где через старый адрес отправляют формы или запросы к API, — иначе после редиректа данные формы могут потеряться.
Ещё одно свойство 301 важно при проверке: стандарт разрешает кешировать такой ответ. Браузер, который однажды получил 301, может перенаправлять дальше без запроса к серверу, даже когда правило уже исправили. Поэтому результат правки смотрите через curl или в окне инкогнито, а не в своём рабочем браузере.
Для обычных страниц выбирайте 301. Код 308 нужен, только если на старый адрес отправляют формы или запросы к API.
Как настроить 301 редирект в nginx
В nginx редирект задают директивой return в конфигурации сайта: она завершает обработку запроса и отдаёт клиенту указанный код. Файлы .htaccess nginx не читает, поэтому правила, написанные для Apache, на таком сервере молча не работают — старый адрес отвечает 404 или открывается как был.
Одна страница на новый адрес:
location = /old-page/ {
return 301 /new-page/;
}
Весь старый домен на новый с сохранением пути:
server {
listen 80;
server_name old-site.ru www.old-site.ru;
return 301 https://new-site.ru$request_uri;
}
Переменная $request_uri переносит путь вместе с параметрами, поэтому /catalog/?page=2 уедет на такой же адрес нового домена. Для HTTPS-версии старого домена нужен такой же блок с listen 443 ssl и действующим сертификатом: без него браузер покажет ошибку раньше, чем получит редирект.
Две ловушки. Если указать в return только адрес без кода, nginx отдаст временный 302. У директивы rewrite флаг permanent даёт 301, а флаг redirect — 302. После правки проверьте конфигурацию командой nginx -t и только потом перезагружайте сервер.
Как настроить 301 редирект в .htaccess на Apache
На Apache редирект пишут в конфигурации виртуального хоста или в файле .htaccess в корне сайта. Документация Apache советует основной конфиг: .htaccess сервер перечитывает при каждом запросе. На виртуальном хостинге доступа к конфигу обычно нет, и тогда .htaccess остаётся единственным вариантом.
Одна страница — директива Redirect из модуля mod_alias:
Redirect 301 /old-page/ https://site.ru/new-page/
Весь домен с сохранением пути — модуль mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?old-site.ru$ [NC]
RewriteRule ^(.*)$ https://new-site.ru/$1 [R=301,L]
Здесь три тонкости. Redirect без кода статуса отдаёт временный 302, поэтому пишите 301 или permanent явно. Redirect срабатывает на все адреса, которые начинаются с указанного пути: правило для /old/ перенаправит и /old/page/. Для точного совпадения есть RedirectMatch с регулярным выражением. И порядок важен: из нескольких подходящих правил mod_alias срабатывает первое, поэтому частные редиректы ставьте выше общих.
Редирект через CMS и PHP: где подвох
Без доступа к конфигурации сервера редирект ставят средствами сайта: модулем CMS, плагином или кодом на PHP. Google считает серверную переадресацию самой надёжной, но и PHP отдаёт настоящий код 301 — робот получает тот же ответ. У многих платформ, как отмечает Google, есть собственные инструменты переадресации.
На чистом PHP постоянный редирект выглядит так, причём до него нельзя ничего отправлять в браузер:
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://site.ru/new-page/');
exit();
Главная ловушка CMS — код по умолчанию. В 1С-Битрикс функция LocalRedirect без третьего параметра отдаёт «302 Found», в WordPress функция wp_redirect по умолчанию тоже шлёт 302. Разработчик проверяет страницу в браузере, она открывается, задача закрыта, а поиск месяцами держит в выдаче старый адрес. Код передают явно: LocalRedirect($url, false, "301 Moved permanently") и wp_redirect($url, 301).
Так устроен и наш сайт: он работает на nginx, поэтому карта старых адресов с кодом 301 живёт в коде движка, а не в .htaccess.
Редирект средствами CMS работает, если код 301 передан явно. По умолчанию и Битрикс, и WordPress отдают временный 302.
Переезд на новый домен: порядок действий
Переезд на новый домен — самый рискованный сценарий для позиций: меняется адрес каждой страницы сразу. Яндекс прямо предупреждает, что при смене главного адреса не гарантирует сохранение числа страниц в поиске, позиций и посещаемости. Порядок ниже снижает риск, но не обнуляет его.
Добавьте оба сайта в Вебмастер и Search Console
И подтвердите права на старый и новый домен.
Составьте карту соответствия
Таблицу «старый адрес -> новый» для каждой страницы, а не одно правило «всё на главную».
Настройте постраничный 301
Главная ведёт на главную, внутренние страницы на аналогичные. Если сменились и домен, и адреса разделов, Яндекс допускает двойной редирект: старый домен -> тот же путь на новом -> новый путь.
Обновите внутренние ссылки и карту сайта
На новом сайте не должно остаться ссылок на старые адреса. Атрибут rel="canonical" в коде нового сайта Яндекс называет одной из причин, по которым заявка на переезд не принимается.
Подайте заявку в Вебмастере
На старом сайте в разделе «Индексирование -> Переезд сайта» укажите новый адрес.
Не снимайте редиректы
Google советует держать их как можно дольше, минимум год.
Смена главного адреса в Яндексе занимает несколько недель. Google для сайта среднего размера называет тот же порядок: несколько недель или больше, пока в выдаче новые адреса заменят старые. Позиции в это время могут колебаться, и это не повод откатывать переезд.
Постраничная карта «старый адрес -> новый» решает исход переезда сильнее, чем выбор сервера или CMS.
Как проверить, что 301 редирект работает?
Проверка нужна сразу после настройки, до того как ошибку увидит поиск. Убедитесь в трёх вещах: старый адрес отдаёт именно 301, редирект ведёт сразу на конечную страницу, а конечная страница отвечает 200.
curl -sIL https://old-site.ru/old-page/
В ответе ищите строку с кодом 301 и заголовок Location с новым адресом. Ключ -L заставляет curl пройти всю цепочку и показывает каждый шаг. Без терминала подойдёт инструмент проверки ответа сервера в Яндекс Вебмастере — как устроен кабинет, разобрали в инструкции как добавить сайт в Яндекс Вебмастер.
Цепочки — главный враг. Googlebot проходит до 10 переходов, но Google советует вести сразу на конечный адрес, а если не выходит — держать в цепочке максимум четыре шага, лучше три или два. Цепочки вырастают сами: http -> https -> www -> новый путь. Каждое новое правило проверяйте вместе со старыми.
Правильный редирект — один шаг: старый адрес отдаёт 301, новый отвечает 200.
Частые ошибки с 301 редиректом
Позиции после переезда чаще теряют не из-за самого 301, а из-за того, как его настроили. Вот ошибки, которые встречаются снова и снова:
- 01 Всё на главную
Яндекс просит так не делать: посетитель не находит нужную страницу, а новый сайт индексируется медленнее.
- 02 Временный код вместо постоянного
302 по умолчанию отдают Redirect в Apache без статуса, return в nginx с одним адресом, LocalRedirect в Битриксе и wp_redirect в WordPress.
- 03 Цепочки из правил разных лет
Длинные цепочки замедляют загрузку и, по данным Google, поддерживаются не всеми браузерами.
- 04 Старые адреса во внутренних ссылках
Каждый клик проходит через редирект; Google советует заменить такие ссылки на новые.
- 05 Редиректы сняли раньше срока
Внешние ссылки и закладки снова ведут в 404, а сигналы старых адресов теряются.
- 06 301 на страницу без замены
Если аналога нет, честнее отдать 404 или 410.
С чего начать, если адреса уже меняли
Если сайт уже переезжал или менял структуру, начните с проверки того, что уже настроено. Выгрузите из Вебмастера и Search Console адреса, по которым приходят посетители и ведут внешние ссылки, и прогоните их через curl или краулер. Каждый должен отдавать 301 сразу на живую страницу с ответом 200. Всё, что отвечает 404, 302 или ведёт по цепочке, и есть список работ.
Если переезд только планируется, начните с карты соответствия старых и новых адресов. На неё уходит больше всего времени, но именно она решает, сохранятся ли позиции.
Мнение. Если у сайта несколько десятков страниц и есть доступ к серверу, настраивайте 301 в конфигурации nginx или Apache — это надёжнее модуля CMS. Если страниц тысячи и адреса меняются по шаблону, пишите правила с регулярными выражениями и до запуска проверяйте их выборкой реальных адресов.
Не хотите разбираться с картой редиректов сами — закажите SEO-аудит сайта: проверим ответы сервера, цепочки и старые адреса, которые ещё приносят трафик.
Источники
- Переезд сайта на новое доменное имя — Яндекс
- Обработка редиректов — Яндекс
- Переадресация и Google Поиск — Google
- Как перенести сайт с изменением URL — Google
- Модуль ngx_http_rewrite_module — nginx
- Apache Module mod_alias — Apache Software Foundation
- RFC 9110. HTTP Semantics — IETF