Лишние редиректы в WordPress обычно появляются незаметно: их добавляет плагин, тема, серверный конфиг или старое правило в .htaccess. На глаз сайт работает нормально, но в реальности запрос проходит через цепочку из двух-трёх перенаправлений, а иногда ещё и упирается в петлю. Для SEO это лишняя нагрузка на обход, для пользователей — задержка, для админа — источник странных 404 и дублей.
Ниже разберём, как быстро понять, откуда берутся редиректы, как отключать их без поломки канонических URL и как проверить, что после правки цепочки действительно исчезли.
Когда редиректов слишком много: как это выглядит на практике
Типичный сценарий: вы открываете старую ссылку из поиска, а браузер сначала уводит с http на https, потом с www на без www, затем ещё меняется слеш в конце, а после этого WordPress отправляет на новый slug. Формально страница открылась, но вместо одного перехода получилось несколько.
Проблема не всегда в WordPress как таковом. Часто цепочка складывается из нескольких уровней:
- правила веб-сервера в
.htaccessили конфиге Nginx; - настройки постоянных ссылок в админке;
- плагины для SEO, безопасности, кеша или редиректов;
- кастомный код в
functions.phpили mu-plugin; - правила CDN или панели хостинга.
Диагностика: где именно рождается редирект
Сначала нужно не «чинить всё подряд», а понять источник. Самый быстрый способ — посмотреть заголовки ответа.
Проверка через curl
На сервере или локально выполните:
curl -I -L https://example.com/staryy-url/Если нужен более подробный разбор цепочки, уберите -L и посмотрите каждый шаг отдельно:
curl -I https://example.com/staryy-url/В ответе ищите строки HTTP/1.1 301 Moved Permanently или 302 Found и заголовок Location. Если редиректов несколько, вы увидите последовательность адресов.
Что смотреть в админке WordPress
Проверьте три места, которые чаще всего создают лишние перенаправления:
- Настройки → Общие: адрес WordPress и адрес сайта должны быть согласованы по схеме и домену.
- Настройки → Постоянные ссылки: сохраните их заново, если правила в
.htaccessмогли устареть. - Плагины: SEO-плагины, редирект-менеджеры, плагины безопасности и кеша.
Если редирект появляется только для части URL, проверьте конкретные записи и страницы: иногда старый slug уже перенаправляется вручную, а поверх него работает ещё и автоматический редирект WordPress после изменения ярлыка.
Пошаговое решение: как убрать лишние перенаправления
Лучше идти от нижнего уровня к верхнему: сначала сервер, потом WordPress, потом плагины и кастомный код. Так проще не сломать рабочие правила.
Шаг 1. Уберите дублирующиеся правила на сервере
Если у вас Nginx или Apache, проверьте, не дублируется ли логика перенаправления между сервером и WordPress. Например, если сервер уже принудительно переводит на https://example.com, не нужно дополнительно делать это же через плагин.
Для Apache в .htaccess часто встречается такой блок:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]
</IfModule>Если аналогичное правило уже есть в панели хостинга или CDN, оставьте только один источник истины. Иначе вы получите цепочку из двух одинаковых редиректов.
Шаг 2. Проверьте автоматические редиректы WordPress
WordPress сам умеет подправлять URL, если пользователь открыл адрес с ошибкой в слеше, регистре или старым slug. Это полезно, но иногда мешает, если поверх него уже работает серверная логика.
Если у вас есть кастомный код, ищите вызовы wp_redirect(), wp_safe_redirect() и фильтры, которые меняют URL до отправки заголовков. Пример безопасного редиректа с проверкой:
add_action('template_redirect', function () {
if (is_page('old-page')) {
wp_safe_redirect(home_url('/new-page/'), 301);
exit;
}
});Если такой код есть в теме, лучше перенести его в отдельный mu-plugin или хотя бы в дочернюю тему, чтобы не потерять при обновлении.
Шаг 3. Отключите лишние правила в плагинах
SEO-плагины и плагины редиректов часто создают автоматические перенаправления при смене URL записи. Это удобно, но в больших проектах такие правила быстро разрастаются.
Что стоит проверить:
- автоматическое перенаправление при изменении slug;
- редиректы для вложений и архивов автора;
- правила для HTTP/HTTPS и www/non-www;
- цепочки из старых 302, которые давно должны быть 301.
Если плагин позволяет экспортировать список редиректов, сделайте это до чистки. Так проще откатить конкретное правило, а не гадать, что именно сломалось.
Шаг 4. Уберите конфликт между каноническим URL и редиректом
Иногда проблема не в самом редиректе, а в том, что канонический URL у страницы не совпадает с фактическим адресом. Тогда поисковик видит одну версию, а сервер отправляет на другую.
Проверьте:
- адрес записи в редакторе;
- канонический тег, если его добавляет SEO-плагин;
- правила слешей в постоянных ссылках;
- редирект с вложений на родительскую запись, если он включён.
Если у вас есть старые вложения с отдельными URL, не отключайте их массово без проверки. На медиа-страницах иногда завязаны внешние ссылки и индексированные изображения.
Сравнение подходов: плагин, код или сервер
| Подход | Когда подходит | Минус |
|---|---|---|
| Плагин редиректов | Нужно быстро управлять десятками правил без разработчика | Легко получить дубли и цепочки |
| Код в mu-plugin | Нужны точечные правила, которые должны пережить смену темы | Требует аккуратного тестирования |
| Серверный конфиг | Глобальные правила для домена: https, www, слеши | Сложнее править без доступа к хостингу |
Для большинства сайтов рабочая схема такая: глобальные правила держать на сервере, а точечные редиректы — в WordPress-коде или в одном понятном плагине. Не смешивайте всё в трёх местах сразу.
Пример: как убрать редирект из темы и оставить только нужный
Если редирект прописан в functions.php, лучше перенести его в отдельный mu-plugin. Это уменьшает риск случайно потерять правило после обновления темы.
<?php
/**
* Plugin Name: Site Redirect Rules
*/
add_action('template_redirect', function () {
if (is_page('old-contact')) {
wp_safe_redirect(home_url('/contacts/'), 301);
exit;
}
if (is_singular('post') && get_query_var('pagename') === 'old-news') {
wp_safe_redirect(home_url('/blog/'), 301);
exit;
}
});Здесь важно не пытаться редиректить всё подряд через один универсальный шаблон. Чем точнее условие, тем меньше шанс случайно зацепить похожие URL.
Проверка результата после внедрения
После правок не ограничивайтесь открытием страницы в браузере. Проверьте именно цепочку ответов.
- Старый URL отдаёт один
301, а не серию переходов. - Финальный адрес совпадает с каноническим URL страницы.
- Нет редиректа между
httpиhttpsв обе стороны. - Нет лишнего перехода между
wwwи безwww. - Страница открывается с кодом
200 OKпосле последнего редиректа.
Проверить можно и через браузерные DevTools: вкладка Network покажет последовательность запросов. Для массовой проверки удобно пройтись по списку старых URL и сравнить конечные адреса.
Частые ошибки и как их исправить
Редирект делает и сервер, и плагин
Это самая частая причина цепочек. Оставьте только один уровень для глобальных правил. Если сервер уже переводит на нужный домен, отключите соответствующую настройку в плагине.
Используется 302 вместо 301
Временный редирект подходит не для всех сценариев. Если страница переехала окончательно, 302 создаёт путаницу для поисковиков и кеширующих слоёв. Заменяйте его только там, где перенос действительно временный.
Старые правила остались после миграции сайта
После переезда домена часто забывают почистить старые правила в .htaccess, панели хостинга и плагинах. В итоге часть запросов уходит на старый домен, а потом возвращается обратно.
Редирект ломает вложения и архивы
Если вы массово отключили перенаправление вложений, проверьте, не завязаны ли на них изображения из поиска. Если отключили архивы автора, убедитесь, что на сайте есть другая логика навигации по контенту.
Практические советы по безопасности и производительности
Редиректы — это не только SEO. Чем меньше лишних переходов, тем меньше запросов обрабатывает сервер и тем ниже шанс поймать конфликт между кешем, CDN и WordPress.
- Глобальные правила держите в одном месте: сервер или CDN.
- Не плодите несколько плагинов, которые делают одно и то же.
- После изменения редиректов очищайте кеш страницы, объектный кеш и CDN, если он есть.
- Не редиректите на URL, который сам потом редиректит дальше.
- Для точечных правил используйте
wp_safe_redirect(), а не произвольную отправку заголовков.
Если на сайте много дублей и технического мусора, полезно сначала навести порядок в SEO-настройках и очистке, а уже потом разбирать редиректы. В таких задачах иногда удобнее использовать инструменты вроде Clearfy Pro, если нужен именно набор для чистки дублей и технических настроек, а не отдельный плагин под каждую мелочь.
Главный критерий здесь простой: один старый URL должен вести к одному финальному адресу без лишних остановок. Если цепочка короче и предсказуемее, сайт становится стабильнее и для пользователей, и для поисковых роботов.