Как добавить редирект 301 в WordPress без плагина

Если вы сменили структуру ссылок, удалили страницу или перенесли материал на новый адрес, старый URL лучше сразу отправить на новый через редирект 301. Это сохраняет трафик, не ломает закладки и помогает поисковым системам понять, что страница переехала навсегда. Без плагина такой редирект обычно настраивают на уровне веб-сервера или, в крайнем случае, через PHP в WordPress.

Самый надёжный вариант зависит от того, что у вас под капотом: Apache, Nginx или доступ только к файлам темы. Ниже — рабочие способы и моменты, из-за которых редирект часто не срабатывает.

Что такое редирект 301 и когда он нужен

Код ответа 301 означает постоянное перенаправление. Браузер и поисковый робот получают сигнал: старый адрес больше не основной, нужно идти на новый. Это не то же самое, что 302, который используют для временного переноса.

301 нужен в типичных ситуациях:

  • изменили структуру постоянных ссылок в WordPress;
  • удалили страницу, но есть подходящая замена;
  • объединили несколько материалов в один;
  • перенесли сайт на новый домен или в новую папку;
  • исправили URL с ошибкой, опечаткой или лишним слэшем.

Если страница удалена без замены, редирект на главную — не лучший вариант. Для поисковика это часто выглядит как мягкая ошибка, а не как логичное продолжение старого адреса. В таких случаях лучше вести на наиболее близкий по смыслу раздел или оставить 404, если замены нет.

Самый правильный способ: настроить редирект на уровне сервера

Если есть доступ к конфигурации веб-сервера, редирект лучше делать там. Так он срабатывает раньше WordPress, не нагружает PHP и работает даже тогда, когда сама CMS временно недоступна.

Apache: редирект через .htaccess

На большинстве хостингов с Apache или LiteSpeed достаточно файла .htaccess в корне сайта. Перед правкой обязательно сделайте копию файла: ошибка в синтаксисе может привести к 500 Internal Server Error.

Для перенаправления одной страницы на другую добавьте правило выше стандартного блока WordPress:

Redirect 301 /staryj-url/ https://wpcource.ru/novyj-url/

Если нужен более гибкий вариант, можно использовать mod_rewrite:

RewriteEngine On
RewriteRule ^staryj-url/?$ https://wpcource.ru/novyj-url/ [R=301,L]

Первый вариант проще и подходит для одиночных редиректов. Второй удобнее, если нужно учитывать слэш в конце или строить более сложные правила.

Если вы редиректите старый домен или старую папку целиком, правило будет другим. Например, для переноса всего сайта на новый домен:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^staryj-domen\.ru$ [NC]
RewriteRule ^(.*)$ https://novyj-domen.ru/$1 [R=301,L]

Здесь важно сохранить путь после домена, чтобы все внутренние URL тоже переехали.

Nginx: редирект в конфигурации сервера

На Nginx файл .htaccess не работает. Редирект нужно прописывать в конфигурации сайта, обычно в блоке server. Если у вас обычный shared-хостинг, доступ к этому файлу может быть закрыт — тогда придётся обращаться в поддержку.

Для одной страницы:

location = /staryj-url/ {
    return 301 https://wpcource.ru/novyj-url/;
}

Для переноса всего сайта на новый домен:

server {
    server_name staryj-domen.ru www.staryj-domen.ru;
    return 301 https://novyj-domen.ru$request_uri;
}

После изменения конфигурации Nginx обычно требуется перезагрузка или перечитывание настроек. На управляемом хостинге это делает провайдер, на своём сервере — администратор.

Если доступа к серверу нет: редирект через functions.php

Когда вы не можете править настройки Apache или Nginx, можно сделать редирект на уровне WordPress. Это рабочий вариант, но он менее надёжный: код выполнится только после загрузки WordPress и не сработает, если сайт падает раньше.

Добавьте код в functions.php дочерней темы или в собственный мини-плагин. В родительскую тему правки лучше не вносить: после обновления они пропадут.

add_action('template_redirect', function () {
    if (is_page('staryj-url')) {
        wp_redirect('https://wpcource.ru/novyj-url/', 301);
        exit;
    }
});

Здесь is_page('staryj-url') проверяет страницу по слагу. Вместо него можно использовать ID, если страница уже переименована и слаг меняется:

add_action('template_redirect', function () {
    if (is_page(123)) {
        wp_redirect('https://wpcource.ru/novyj-url/', 301);
        exit;
    }
});

Для записей и других типов контента используются похожие условные теги, но логика та же: сначала проверка, затем wp_redirect(), после неё обязательно exit. Без exit WordPress продолжит вывод страницы, и поведение может стать непредсказуемым.

Как проверить, что редирект работает

После настройки не ограничивайтесь открытием ссылки в браузере. Браузер может показать старую страницу из кэша, и это создаёт ложное ощущение, что всё в порядке.

Проверяйте так:

  • откройте старый URL в режиме инкогнито;
  • посмотрите код ответа через инструменты разработчика в браузере;
  • если есть доступ к терминалу, выполните curl -I https://wpcource.ru/staryj-url/;
  • убедитесь, что в ответе есть HTTP/1.1 301 или HTTP/2 301, а в заголовке Location указан новый адрес.

Если видите 200 вместо 301, значит редирект не сработал. Если видите цепочку из нескольких переходов, лучше сократить её до одного шага: старый URL должен вести сразу на конечный адрес, без промежуточных страниц.

Почему редирект 301 может не срабатывать

На практике проблема почти всегда в одной из нескольких причин.

  • Правило стоит не там. В .htaccess редирект должен быть выше блока WordPress, иначе CMS может перехватить запрос раньше.
  • Неправильный синтаксис. Одна лишняя кавычка, слэш или символ в регулярном выражении ломают правило.
  • Кэш мешает проверке. Страница может открываться из браузерного, серверного или плагинного кэша.
  • Редирект конфликтует с другим правилом. Например, одно правило ведёт на www, другое — без www, и получается петля.
  • Используется не тот тип сервера. Правила Apache не работают на Nginx, а Nginx не читает .htaccess.
  • В WordPress уже есть похожая логика. Некоторые темы и плагины автоматически исправляют URL, добавляют слэш или перенаправляют вложения.

Если редирект нужен для конкретной страницы, сначала проверьте, не создаёт ли WordPress автоматический canonical-редирект. Иногда кажется, что ваше правило не работает, хотя на самом деле срабатывает другое перенаправление.

Что выбрать в реальной задаче

Если у вас есть доступ к серверу, делайте редирект там. Это самый чистый и предсказуемый вариант. Для одной-двух страниц на Apache подойдёт .htaccess. На Nginx — конфигурация сервера. Если доступ к серверу закрыт, используйте functions.php дочерней темы или отдельный мини-плагин.

Коротко по выбору:

СпособКогда подходитМинус
.htaccessApache/LiteSpeed, есть доступ к файлуЛюбая ошибка ломает обработку запросов
Конфиг NginxЕсть доступ к серверу или поддержка хостингаНе редактируется через WordPress
functions.phpНет доступа к серверу, нужен быстрый точечный редиректЗависит от работы WordPress и темы

Если редиректов становится много, лучше вынести их в серверную конфигурацию или отдельный мини-плагин, а не держать в теме. Иначе при смене шаблона вы потеряете все правила сразу.

Для единичной задачи — перенаправить старый URL на новый без плагина — этого достаточно. Главное не смешивать способы в одном месте и после правки сразу проверять ответ сервера, а не только визуальное поведение страницы.

Как удалить неиспользуемые плагины и темы WordPress без риска для сайта
20.10.2026
Как отключить комментарии в WordPress полностью или только на отдельных типах записей
17.10.2026
Как добавить собственные поля в WordPress и вывести их на сайте
28.10.2026
Как установить ограничение на регистрацию пользователей в WordPress по IP и времени
22.09.2026
Как добавить редирект 301 в WordPress без плагина
01.11.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.