Редирект 301 Moved Permanently: что значит и как настроить
301 Moved Permanently — страница навсегда переехала на новый адрес, и все ссылки стоит обновить. Это главный инструмент переезда: смены домена, перехода на HTTPS, новой структуры адресов. В поиске старый адрес со временем заменяется новым, а посетители по старым ссылкам попадают куда нужно.
Содержание 11
Что означает код 301
По стандарту HTTP код 301 значит, что у ресурса новый постоянный адрес и дальше обращаться нужно по нему. Новый адрес сервер указывает в заголовке Location, и браузер переходит туда автоматически.
Ответ 301 браузеры могут сохранить в кэше, если сервер не указал иное. Тогда при следующем открытии старого адреса браузер сразу перейдёт на новый, не спрашивая сервер, — поэтому ошибочный 301 может срабатывать у посетителей и после того, как вы его убрали.
При перенаправлении 301 браузер может сменить метод POST на GET, и данные формы до нового адреса не дойдут. Так сложилось исторически: в HTTP/1.0 коды 301 и 302 задумывались как сохраняющие метод, но браузеры со временем стали менять POST на GET, и стандарт это разрешил. Для перенаправлений без смены метода позже добавили коды 307 и 308.
Когда нужен 301
- переезд сайта на новый домен;
- переход с HTTP на HTTPS;
- выбор основного адреса — с www или без;
- новый адрес страницы — например, после переименования раздела;
- объединение нескольких страниц в одну.
Если страница переехала на время, нужен не 301, а 302.
Как настроить 301 в nginx
Перевести весь сайт с HTTP на HTTPS и заодно на адрес без www:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}Переменная $request_uri — исходный адрес запроса вместе с параметрами, поэтому каждая страница перенаправляется на свою копию по новому адресу, а не на главную. Запросы по HTTPS к www.example.com перенаправьте так же — отдельным блоком server с listen 443 ssl и сертификатом, в который входит имя www.example.com.
Перенаправить одну страницу — адрес можно указать без домена, nginx дополнит его сам:
location = /old-page/ {
return 301 /new-page/;
}Перенаправить целый раздел, сохранив остальную часть адреса, — строка ставится в блок server:
rewrite ^/blog/(.*)$ /stati/$1 permanent;Флаг permanent даёт код 301, флаг redirect — код 302. Если флаг не указан, а новый адрес начинается с http:// или https://, nginx ответит 302.
После любых правок: sudo nginx -t, затем sudo systemctl reload nginx.
Как настроить 301 в Apache
В файле .htaccess или в настройках сайта:
Redirect permanent /old-page/ https://example.com/new-page/Redirect сравнивает начало адреса, поэтому запрос /old-page/foto/ уйдёт на https://example.com/new-page/foto/. Старый путь пишется от корня сайта, начинается с косой черты и учитывает регистр букв.
Как настроить 301 в PHP
header('Location: https://example.com/new-page/', true, 301);
exit;Без третьего параметра PHP отправит код 302. exit нужен, чтобы после перенаправления скрипт не продолжал работу.
Как настроить 301 в WordPress
В коде темы или плагина перенаправление делают функцией wp_redirect():
wp_redirect( 'https://example.com/new-page/', 301 );
exit;По умолчанию wp_redirect() отправляет код 302 и не останавливает скрипт, поэтому код 301 и exit нужно указать явно. Для перенаправлений без программирования есть плагины.
Как проверить
curl -IL http://example.com/old-page/curl покажет каждый шаг: код и заголовок Location каждого перенаправления, а в конце — код конечной страницы. Лучше, когда до конечной страницы один шаг: каждое лишнее перенаправление — это ещё один запрос. Если адреса перенаправляют друг на друга по кругу, Chrome остановится и покажет ошибку ERR_TOO_MANY_REDIRECTS.
Проверяйте новые перенаправления через curl или в окне инкогнито: обычное окно браузера могло запомнить прежний ответ 301. Пока перенаправление отлаживается, можно ставить временный 302 — без особых заголовков браузер его не кэширует, — а когда всё работает, сменить на 301.
301 и поиск Яндекса
- Адрес, с которого стоит 301, Яндекс не индексирует, а адрес назначения индексирует, если тот доступен роботу.
- Перенаправление Яндекс советует сохранять не меньше полугода.
- Старый адрес пропадает из поиска постепенно. Ускорить это можно, отправив страницы на переобход в Яндекс Вебмастере.
- При смене домена переезд в поиске может занять больше месяца.
Чем 301 отличается от соседних кодов
| Код | Насколько | Метод запроса |
|---|---|---|
| 301 | Навсегда | POST может смениться на GET |
| 302 | На время | POST может смениться на GET |
| 307 | На время | Не меняется |
| 308 | Навсегда | Не меняется |
Источники
- RFC 9110, раздел 15.4.2 — определение кода 301; раздел 15.4 — почему 301 и 302 могут менять метод.
- Документация nginx: return, rewrite и переменная $request_uri.
- Документация Apache: Redirect.
- Документация PHP: функция header.
- Исходный код WordPress: функция wp_redirect().
- Исходный код Chromium: список сетевых ошибок — ERR_TOO_MANY_REDIRECTS.
- Документация curl — ключи -I и -L.
- Яндекс Вебмастер: коды ответа HTTP и удаление страниц из поиска.
Сверено 6 октября 2026 года.
Что почитать дальше
- Как перенести сайт на другой хостинг — переезд без простоя.
- Бесплатный SSL-сертификат — как перевести сайт на HTTPS.
- Ошибка 404 Not Found — что делать с удалёнными страницами.
- Ошибка 410 Gone — как сообщить, что страница удалена навсегда.
Проверено и обновлено: 07.10.2026