Если страница переехала на новый адрес, вы удалили материал или поменяли структуру URL, старый адрес нельзя просто оставить как есть. Для таких случаев нужен 301-редирект: он сообщает браузеру и поисковым системам, что страница навсегда перемещена, и передаёт посетителя на новый URL.
В WordPress это можно сделать несколькими способами: через плагин, через настройки сервера или прямо в коде. Для большинства сайтов самый безопасный и быстрый вариант — настроить редирект через плагин или через правила веб-сервера, если у вас есть доступ к конфигурации. Ниже разберу, как сделать это без цепочек, лишних переходов и типичных ошибок.
Когда нужен 301-редирект и какой URL указывать
301 используют в трёх основных случаях:
- страница переехала на новый адрес после редизайна или изменения структуры сайта;
- вы объединили несколько материалов в один и старые URL больше не нужны;
- контент удалён, но у него есть замена, на которую логично отправить пользователя.
В редиректе важно указывать не просто «похожую» страницу, а действительно подходящую замену. Если старый материал про конкретную услугу, ведите на новую страницу этой же услуги. Если замены нет, иногда лучше отдать 410, но это уже отдельный сценарий и не замена редиректу.
Ещё один принцип: редирект должен вести сразу на конечный адрес. Если старый URL сначала отправляет на промежуточную страницу, а потом ещё раз перенаправляется, получается цепочка. Для пользователя это лишняя задержка, а для поисковых систем — лишняя нагрузка и риск потери части сигнала.
Самый простой способ: плагин для редиректов
Если вы не хотите править конфигурацию сервера, удобнее всего использовать плагин. Для WordPress это нормальный рабочий вариант, особенно когда редиректов немного и ими нужно управлять из админки.
После установки плагина откройте раздел управления редиректами и создайте правило:
- источник — старый путь без домена, например
/old-page/; - цель — новый полный адрес или путь, например
/new-page/; - тип —
301 Moved Permanently.
Если плагин позволяет выбрать тип совпадения, для обычной миграции страницы достаточно точного совпадения URL. Не ставьте маску, если не понимаете, как она сработает: одно неосторожное правило может начать перенаправлять лишние адреса.
После сохранения откройте старый адрес в браузере и проверьте, что он сразу ведёт на нужную страницу. Если у вас есть доступ к инструментам разработчика или к онлайн-проверке заголовков, убедитесь, что ответ действительно 301, а не 302.
Редирект через .htaccess на Apache
Если сайт работает на Apache и у вас есть доступ к файлу .htaccess, редирект можно прописать там. Это хороший вариант, когда нужно быстро перенаправить один или несколько адресов без установки плагина.
Перед изменением файла сделайте резервную копию. Ошибка в .htaccess может уронить сайт или вызвать 500 Internal Server Error.
Для одного URL используйте такое правило:
Redirect 301 /old-page/ https://example.com/new-page/Если нужен более гибкий вариант, обычно используют модуль mod_rewrite. Например, когда надо перенаправить конкретный адрес и сохранить контроль над логикой правил:
RewriteEngine On
RewriteRule ^old-page/?$ https://example.com/new-page/ [R=301,L]Здесь важно, чтобы правило не конфликтовало с уже существующими настройками WordPress. Обычно блок WordPress в .htaccess выглядит отдельным фрагментом, и редиректы лучше размещать выше него, если они должны срабатывать раньше.
Редирект через nginx
На nginx редиректы настраиваются в конфигурации сервера. Если у вас обычный shared-хостинг, доступа к этому уровню может не быть — тогда используйте плагин или обратитесь в поддержку хостинга.
Пример для одного адреса:
location = /old-page/ {
return 301 https://example.com/new-page/;
}Если нужно перенаправить только путь внутри того же домена, можно указать полный новый URL или относительную логику в зависимости от конфигурации. После правки конфигурации nginx обычно требуется перезагрузка или перечитывание настроек.
На практике для nginx особенно важно не плодить дублирующие правила в нескольких местах. Если редирект уже задан в конфиге, не дублируйте его в плагине без необходимости: потом сложнее понять, какое правило реально срабатывает.
Когда лучше сделать редирект в functions.php
Иногда редирект нужен как временное решение внутри темы или дочерней темы. Например, вы переносите несколько страниц и хотите быстро закрыть вопрос до настройки сервера. В таком случае можно использовать хук template_redirect.
Пример для конкретного URL:
add_action('template_redirect', function () {
if (is_page('old-page')) {
wp_redirect('https://example.com/new-page/', 301);
exit;
}
});Этот способ рабочий, но я не советую использовать его для большого числа редиректов. Логика в теме хуже подходит для долгосрочного сопровождения: при смене темы правило легко потерять. Для постоянных перенаправлений надёжнее плагин или серверная конфигурация.
Как не создать цепочку редиректов
Цепочка появляется, когда старый адрес ведёт на промежуточный, а тот — ещё дальше. Часто это случается после нескольких переносов страниц подряд или когда старый URL сначала редиректят на общий раздел, а потом вручную меняют ссылку ещё раз.
Проверьте три вещи:
- старый URL должен вести сразу на конечный;
- новый URL не должен сам перенаправлять дальше без необходимости;
- внутренние ссылки на сайте лучше сразу обновить на новый адрес, а не надеяться только на редирект.
Если вы переносите страницу, сначала обновите ссылки в меню, контенте и блоках, а уже потом оставляйте редирект как страховку для внешних ссылок и закладок. Тогда редирект будет работать как запасной маршрут, а не как постоянная костыльная схема.
Как проверить, что 301 работает правильно
После настройки не ограничивайтесь открытием страницы в браузере. Браузер может скрывать детали, а вам нужно понять, какой именно ответ отдаёт сервер.
Проверка должна показать:
- старый адрес отдаёт статус
301; - в заголовке
Locationуказан правильный конечный URL; - новый адрес открывается без дополнительного перенаправления.
Если у вас есть доступ к командной строке, можно проверить заголовки так:
curl -I https://example.com/old-page/В ответе ищите строку со статусом HTTP/1.1 301 Moved Permanently или HTTP/2 301 и заголовок Location. Если вместо этого видите 302, значит редирект временный и его нужно исправить.
Если проверяете через браузер, откройте страницу в режиме инкогнито или очистите кэш. Иногда старый редирект сохраняется в кэше, и кажется, что всё работает неправильно, хотя на сервере правило уже изменено.
Типичные ошибки при настройке 301
Самые частые проблемы выглядят так:
- Используется 302 вместо 301. Это временный редирект, он не подходит для постоянного переноса страницы.
- Редирект ведёт на несуществующий URL. Тогда пользователь получает 404 уже после перенаправления.
- Создана цепочка. Старый адрес уходит на промежуточный, а потом ещё раз перенаправляется.
- Правило конфликтует с другим редиректом. Такое бывает при одновременной настройке в плагине,
.htaccessи теме. - Сломан формат URL. Например, перепутаны адрес с
wwwи без него, HTTP и HTTPS, слэш в конце и без него.
Если редирект не срабатывает, сначала проверьте, где именно он задан. На одном сайте могут одновременно работать правила WordPress, плагина, веб-сервера и CDN. Пока не понятно, какой уровень отдаёт ответ, исправлять проблему вслепую неудобно и долго.
Что выбрать на практике
| Сценарий | Что лучше использовать | Почему |
|---|---|---|
| Нужно перенаправить 1–10 страниц | Плагин или .htaccess | Быстро, понятно, легко проверить |
| Редиректы должны жить вне темы | .htaccess или nginx | Не зависят от смены оформления |
| Временное решение в теме | template_redirect | Подходит только как короткий рабочий вариант |
| Сайт на nginx без доступа к конфигу | Плагин | На уровне WordPress это обычно единственный доступный способ |
Если задача — перенести страницу, сменить URL или убрать контент без потери трафика, обычно достаточно одного аккуратно настроенного 301-редиректа на конечный адрес. Главное — не дублировать правила в нескольких местах и сразу проверять ответ сервера, а не только поведение в браузере.