Смена URL в WordPress почти всегда оставляет след: старые ссылки из поиска, внутренние переходы, закладки пользователей и внешние упоминания начинают вести в никуда или на дубли. Если просто поменять слаг, удалить страницу или перенести материал в другую структуру, поисковик не догадается, куда отправлять трафик. Здесь нужен не «красивый» редирект-плагин, а понятная схема: что именно меняется, какой URL должен стать основным и как проверить, что сервер отдаёт именно 301, а не 302 или цепочку из нескольких переходов.
Когда 301 действительно нужен
Редирект ставят не на каждый чих. Он нужен, если старый адрес больше не должен быть рабочим как самостоятельная страница, а новый URL является единственным актуальным. Типичные случаи: сменили слаг записи, перенесли страницу в другой раздел, объединили несколько материалов в один, убрали дубли с параметрами, перевели сайт на человекочитаемые адреса или исправили ошибку в структуре постоянных ссылок.
Если страница остаётся доступной и просто меняется канонический адрес, иногда достаточно rel="canonical". Но если старый URL уже не должен индексироваться и по нему не должен открываться контент, нужен именно 301 Moved Permanently.
Сценарии, где 301 лучше не заменять canonical
- страница существует в двух вариантах из-за параметров фильтрации или сортировки;
- нужно сохранить оба URL для разных задач, но указать основной;
- контент одинаковый, а проблема только в дубле, а не в устаревшем адресе;
- вы не уверены, что старый адрес можно удалять без потери функциональности.
Диагностика: что ломается после смены адреса
Перед правкой полезно понять, где именно проблема: в WordPress, в сервере или в ссылках внутри контента. Самая частая ошибка — добавить редирект в плагине, но оставить старые ссылки в меню, хлебных крошках и блоках. В итоге пользователь всё равно ходит по цепочке, а поисковик видит лишние переходы.
Проверьте три вещи
- Что отдаёт старый URL:
200,301,302или404. - Есть ли цепочка редиректов: старый URL → промежуточный → новый URL.
- Совпадает ли канонический адрес на новой странице с фактическим URL.
Для быстрой проверки можно использовать curl:
curl -I https://example.com/staryj-url/
В ответе важно увидеть строку вроде HTTP/2 301 и заголовок Location с новым адресом. Если сначала идёт 302, а потом 301, это уже лишний шаг.
Как настроить 301 редирект в WordPress: рабочие варианты
Есть три нормальных пути: через сервер, через плагин или через код. Выбор зависит от доступа к конфигу и количества правил. Для одного-двух адресов подойдёт код или плагин, для массового переноса лучше серверный уровень.
| Подход | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| Сервер (.htaccess / nginx) | Много правил, важна скорость | Быстро, без нагрузки на WordPress | Нужен доступ к конфигу |
| Плагин редиректов | Редактирует контент-менеджер | Удобно, есть журнал переходов | Лишний слой, возможна нагрузка |
| Код в теме или mu-plugin | Нужно точечное правило | Контроль, минимум зависимостей | Нужно аккуратно сопровождать |
Вариант 1. Редирект через .htaccess на Apache
Если сайт работает на Apache, самый прямой путь — правило в .htaccess. Оно срабатывает до загрузки WordPress, поэтому не тратит ресурсы PHP.
Redirect 301 /staryj-url/ https://example.com/novyj-url/
Для более сложных случаев удобнее mod_rewrite:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^staryj-url/?$ https://example.com/novyj-url/ [R=301,L]
</IfModule>
Не смешивайте в одном месте десятки разрозненных правил без порядка. Сначала идут самые точные совпадения, потом более общие.
Вариант 2. Редирект через nginx
На nginx правило обычно добавляют в конфигурацию сайта. Это хороший вариант, если вы переносите раздел или меняете структуру URL массово.
rewrite ^/staryj-url/?$ https://example.com/novyj-url/ permanent;
Если нужно заменить целый префикс, лучше писать отдельный блок location или точное правило, чтобы не зацепить лишние адреса.
Вариант 3. Точечный редирект через код WordPress
Если доступа к серверу нет, можно добавить правило в functions.php дочерней темы или, лучше, в небольшой mu-plugin. Для одного адреса этого достаточно.
<?php
add_action('template_redirect', function () {
if (is_page('staryj-url')) {
wp_redirect(home_url('/novyj-url/'), 301);
exit;
}
});
Этот способ рабочий, но он уже зависит от загрузки WordPress. Для большого числа редиректов лучше не держать логику в теме: при смене темы правило потеряется.
Как убрать дубли после смены URL
Редирект сам по себе не решает проблему дублей, если на сайте остаются альтернативные адреса: со слэшем и без, с www и без, с параметрами ?utm=, архивы автора, страницы пагинации, версии для печати. Сначала определите, какой вариант должен быть основным, а затем приведите остальные к нему.
Минимальный набор действий
- выберите один формат домена:
wwwили без него; - зафиксируйте один формат слэша в конце URL;
- проверьте, что внутренние ссылки в меню и контенте обновлены;
- для старых материалов поставьте 301 на новый адрес;
- для дублей с параметрами используйте canonical, если страница должна оставаться доступной.
Если у вас на сайте уже накопились технические дубли, полезно сначала почистить их на уровне SEO-настроек и только потом массово править адреса. В таких задачах часто помогает Clearfy Pro, если он уже используется в проекте: не как магия, а как набор настроек для закрытия лишних архивов и технических страниц.
Проверка результата после внедрения
После настройки не ограничивайтесь открытием страницы в браузере. Браузер может скрыть детали, а вам нужен именно ответ сервера.
Что проверить вручную
- Старый URL отдаёт
301. - В заголовке
Locationуказан правильный новый адрес. - Новый URL отдаёт
200, а не ещё один редирект. - На новой странице canonical указывает на саму себя.
- Внутренние ссылки больше не ведут на старый адрес.
curl -I https://example.com/staryj-url/
curl -I https://example.com/novyj-url/
Если у вас есть доступ к Search Console, проверьте, не растёт ли число страниц со статусом «Перенаправлено» и нет ли новых 404 по старым адресам. Это особенно важно после массового переноса раздела или смены структуры постоянных ссылок.
Частые ошибки и как их исправить
Большинство проблем повторяются из проекта в проект. Ниже — не теоретический список, а реальные причины, из-за которых редирект работает «почти правильно», но SEO и аналитика всё равно ломаются.
1. Редирект поставили на 302 вместо 301
Так бывает, если использовали временное правило или плагин по умолчанию. Для постоянного переноса нужен именно 301. Проверьте настройки плагина или параметр в коде.
2. Получилась цепочка из нескольких переходов
Например, старый URL сначала ведёт на версию без слэша, потом на HTTPS, потом на новый слаг. Это лишняя задержка и лишний шум для поисковика. Сведите правило к одному финальному адресу.
3. Редирект конфликтует с canonical
Если canonical указывает на один URL, а редирект отправляет на другой, поисковик получает противоречие. Сначала исправьте фактический адрес, потом canonical.
4. Правило добавили в тему, а не в mu-plugin
После смены темы редирект исчезает. Для постоянных технических правил лучше использовать mu-plugins или серверный уровень.
5. Не обновили внутренние ссылки
Даже идеальный 301 не спасает от лишней нагрузки, если меню, хлебные крошки и блоки продолжают ссылаться на старый адрес. После переноса обязательно сделайте поиск по базе и обновите ссылки в контенте.
Практические советы по безопасности и производительности
Редиректы — это не только SEO, но и контроль за нагрузкой. Чем больше правил обрабатывает WordPress на PHP-уровне, тем выше риск лишней нагрузки на сайт. Если редиректов много, переносите их на сервер. Если правил немного, храните их в одном месте и документируйте, зачем каждое из них нужно.
- не используйте редиректы на внешние домены без необходимости;
- не ставьте одинаковые правила в плагине, .htaccess и коде одновременно;
- не закрывайте 404 редиректом на главную — это ухудшает диагностику и может маскировать ошибки;
- после массового переноса очистите кеш страницы и объектный кеш, если он есть;
- проверяйте правила после обновления плагинов кеширования и SEO.
Если задача связана не только с редиректами, но и с чисткой дублей, архивов и технических страниц, иногда удобнее держать это в одном SEO-слое, а не размазывать по нескольким плагинам. Главное — не превращать настройки в набор несвязанных исключений.
Короткий чек-лист перед публикацией изменений
- старый URL отдаёт
301; - новый URL отдаёт
200; - нет цепочки редиректов;
- canonical совпадает с финальным адресом;
- внутренние ссылки обновлены;
- 404 по старому адресу не появляются в логах как массовая проблема;
- правило хранится в месте, которое не потеряется после обновления темы.
Если после проверки всё выглядит нормально в браузере, но в логах всё ещё всплывают старые адреса, ищите источник в шаблонах, меню, виджетах и старых публикациях. Обычно проблема не в самом редиректе, а в том, что на сайт продолжают вести устаревшие ссылки.