Если вы сменили адрес страницы, перенесли раздел или удалили контент, старый URL нельзя просто оставить как есть. Пользователь получит 404, а поисковики со временем потеряют часть накопленных сигналов. В таких случаях нужен постоянный редирект 301: он сообщает браузеру и роботам, что страница переехала навсегда, и помогает сохранить трафик и ссылочный вес.
В WordPress это можно сделать без плагинов. Самые рабочие варианты — через файл .htaccess на Apache, через конфигурацию nginx или через небольшой код в теме, если доступа к веб-серверу нет. Ниже — как выбрать способ и настроить его без лишних рисков.
Какой способ выбрать в WordPress
Сначала определите, где у вас вообще можно управлять редиректами. Это зависит не от WordPress, а от веб-сервера и прав на хостинге.
| Ситуация | Что использовать | Когда подходит |
|---|---|---|
| Сайт работает на Apache или LiteSpeed и у вас есть доступ к корню сайта | .htaccess | Лучший вариант для большинства обычных хостингов |
| Сайт работает на nginx | Конфиг nginx | Если есть доступ к настройкам сервера или поддержка хостинга |
| Нет доступа к серверным настройкам | Код в functions.php или в mu-plugin | Подходит для точечных редиректов, но хуже для массовых правил |
Если у вас обычный shared-хостинг, чаще всего используется Apache или LiteSpeed, и тогда проще всего работать через .htaccess. Если сайт на nginx, редиректы в .htaccess не сработают — это частая ошибка.
Настройка 301-редиректа через .htaccess
Перед изменениями сделайте резервную копию файла .htaccess. Ошибка в синтаксисе может временно уронить сайт или вызвать бесконечные перенаправления. Если не уверены, редактируйте файл через файловый менеджер хостинга или по FTP, а не через админку WordPress.
Файл .htaccess обычно лежит в корне сайта рядом с wp-config.php. Если его не видно, включите отображение скрытых файлов.
Для одного конкретного адреса добавьте правило выше стандартного блока WordPress:
Redirect 301 /staryj-url/ https://example.com/novyj-url/Здесь важно указывать путь относительно домена, а не полный старый URL. В примере запросы к /staryj-url/ будут навсегда перенаправляться на новый адрес.
Если нужно перенести страницу на другой адрес внутри того же сайта, можно использовать и полную цель:
Redirect 301 /uslugi/seo-audit/ https://example.com/uslugi/seo-proverka/Для более сложных случаев удобнее использовать модуль mod_rewrite. Он нужен, когда вы хотите обработать шаблон адресов, а не одну страницу:
RewriteEngine On
RewriteRule ^blog/staryj-razdel/(.*)$ /blog/novyj-razdel/$1 [R=301,L]Это правило перенаправит все URL, начинающиеся с /blog/staryj-razdel/, в новый раздел, сохранив хвост пути. Такой подход полезен при переезде целой рубрики.
После правки сохраните файл и проверьте адрес в браузере или через команду curl. Если сервер отвечает кодом 301 и ведёт на нужную страницу, настройка работает.
Редиректы на nginx: что делать, если .htaccess не помогает
На nginx файл .htaccess игнорируется полностью. Редирект нужно прописывать в конфигурации сайта, обычно в блоке server. Если у вас нет доступа к конфигу, запросите настройку у поддержки хостинга.
Для одного URL правило выглядит так:
location = /staryj-url/ {
return 301 https://example.com/novyj-url/;
}Если нужно перенаправить целый каталог, можно использовать префиксное совпадение:
location ^~ /blog/staryj-razdel/ {
return 301 https://example.com/blog/novyj-razdel/;
}После изменения конфигурации nginx обычно требуется перезагрузка или reload сервиса. На управляемом хостинге это делает поддержка или панель управления.
Для WordPress на nginx особенно важно не смешивать серверные правила с логикой CMS. Если редирект можно сделать на уровне сервера, это надёжнее и быстрее, чем через PHP.
Редирект через functions.php, если сервер недоступен
Этот способ нужен только тогда, когда вы не можете править .htaccess или конфиг nginx. Он рабочий, но менее удобен для большого числа правил: код выполняется на каждом запросе WordPress, а значит, лишний раз нагружает сайт.
Добавьте правило в functions.php дочерней темы или, что безопаснее, в отдельный mu-plugin. Для одного редиректа можно использовать такой код:
add_action('template_redirect', function () {
if (is_page('staryj-url')) {
wp_redirect('https://example.com/novyj-url/', 301);
exit;
}
});Функция is_page() подходит для страниц. Если нужно перенаправить запись или другой тип контента, используйте подходящую условную проверку, например is_single() для записи. После вызова wp_redirect() обязательно идёт exit, иначе WordPress продолжит формировать страницу.
Есть и другой вариант — проверять текущий путь по $_SERVER['REQUEST_URI']. Он полезен, когда старый URL уже удалён и WordPress не может распознать его как существующую страницу:
add_action('template_redirect', function () {
$request_uri = $_SERVER['REQUEST_URI'] ?? '';
if ($request_uri === '/staryj-url/' ) {
wp_redirect('https://example.com/novyj-url/', 301);
exit;
}
});Такой код лучше использовать аккуратно: сравнение должно быть точным, иначе легко задеть лишние адреса.
Как не сломать сайт при настройке редиректов
Самая частая проблема — цепочки и петли. Цепочка возникает, когда старый URL ведёт на промежуточный адрес, а тот — ещё дальше. Петля появляется, если новый адрес тоже попадает под то же правило. Оба случая ухудшают поведение сайта и мешают индексации.
Проверьте три вещи:
- старый адрес действительно больше не открывается напрямую;
- новый адрес отвечает без дополнительного перенаправления;
- редирект ведёт на конечную страницу, а не на ещё один промежуточный URL.
Если вы меняете структуру раздела, сначала составьте список старых и новых адресов. Для массового переноса это экономит время и снижает риск пропустить важную страницу. Отдельно проверьте адреса с и без завершающего слеша: на некоторых сайтах они обрабатываются по-разному.
Ещё один нюанс — протокол и домен. Если сайт переехал с http на https или с www на без www, не смешивайте это с редиректами отдельных страниц. Сначала должен быть настроен базовый канонический вариант домена, а уже потом — точечные 301 для контента.
Как проверить, что редирект работает правильно
Проверка нужна не только в браузере. Браузер может скрывать детали из-за кеша, поэтому надёжнее смотреть HTTP-ответ.
Самый простой способ — команда curl:
curl -I https://example.com/staryj-url/В ответе ищите строку HTTP/1.1 301 Moved Permanently или HTTP/2 301, а также заголовок Location с новым адресом. Если видите 302, значит редирект временный, а не постоянный.
Если у вас нет доступа к консоли, можно использовать любой онлайн-проверщик HTTP-заголовков или инструменты разработчика в браузере. Но для точной диагностики curl надёжнее.
Когда 301 не нужен
Не каждый случай требует редиректа. Если страница удалена навсегда и ей не существует разумной замены, иногда корректнее оставить 404 или 410. Редирект на нерелевантную страницу ухудшает поведение пользователей и может восприниматься поисковиками как слабый сигнал качества.
301 нужен тогда, когда есть понятная замена: новый адрес статьи, перенесённый раздел, обновлённая карточка услуги, объединённый контент. Если замена есть, редирект помогает не терять накопленные переходы и ссылочные сигналы. Если замены нет, лучше не отправлять пользователя «куда-нибудь похожее» только ради формального редиректа.
На практике для WordPress самый надёжный путь такой: для одного-двух адресов используйте серверный редирект, для массового переноса — правила в .htaccess или nginx, а код в functions.php оставляйте как запасной вариант, когда доступа к серверу нет. Тогда редиректы будут работать предсказуемо и без лишней нагрузки на сайт.