После переноса сайта, смены структуры URL или массовой правки записей часто остаются старые правила редиректов. Снаружи это выглядит как «страница открывается, но не с первого раза», «браузер пишет слишком много перенаправлений» или «в логах растут 404 на старые адреса». Проблема обычно не в одном месте: часть правил живёт в плагине редиректов, часть — в .htaccess, часть — в кэше или в теме.
Если не разгрести это сразу, поисковики продолжают ходить по устаревшим цепочкам, а пользователи получают лишние переходы и иногда зацикливание на одном и том же адресе. Ниже — рабочий порядок проверки и исправления без выдуманных инструментов и без «магии».
Когда проблема уже есть: как её распознать
Сначала не трогайте правила наугад. Сначала поймите, что именно ломается: одиночный 404, цепочка редиректов или цикл между двумя адресами. Это разные сценарии, и чинятся они по-разному.
Типичные симптомы
- адрес
/staryj-url/сначала ведёт на/novyj-url/, а потом снова возвращает назад; - страница открывается только после двух-трёх переходов;
- в браузере появляется ошибка
ERR_TOO_MANY_REDIRECTS; - в логах сервера много запросов к несуществующим адресам после миграции;
- в поиске Google остаются старые URL, хотя контент уже перенесён.
Что проверить в первую очередь
- плагин редиректов, если он установлен;
.htaccessили конфигурацию nginx;- настройки
WordPress AddressиSite AddressвНастройки → Общие; - кэш плагина и серверный кэш;
- правила в
functions.phpили в mu-plugin, если редиректы добавляли кодом.
Диагностика: где именно образуется цикл
Самый быстрый способ — проверить цепочку ответов. Если у вас есть доступ к консоли, используйте curl. Это покажет, сколько переходов происходит и на каком шаге начинается петля.
curl -I -L https://example.com/staryj-url/Если в ответе видно много повторяющихся 301 или 302, значит редиректов слишком много или они конфликтуют. Если запрос уходит в бесконечный круг между двумя адресами, ищите правило, которое одновременно отправляет URL в обе стороны.
Для более точной проверки удобно сравнить поведение на уровне сервера и на уровне WordPress. Например, если curl показывает редирект уже до загрузки WordPress, значит проблема в веб-сервере или CDN. Если сначала отвечает WordPress, а потом уже сервер, ищите конфликт между плагином и правилом в конфигурации.
| Подход | Где искать | Когда подходит |
|---|---|---|
| Плагин | Редиректы в админке | Если правила добавляли через Redirection или аналогичный инструмент |
| Код | functions.php, mu-plugin | Если редирект писали вручную или через тему |
| Сервер | .htaccess, nginx config | Если проблема возникает до загрузки WordPress |
Пошаговое решение без потери SEO
1. Сначала сохраните текущие правила
Перед правкой экспортируйте список редиректов из плагина или скопируйте конфиг сервера. Это не формальность: при чистке старых правил легко удалить нужный редирект вместе с мусором.
Если редиректы хранятся в плагине, проверьте, нет ли там автоматических правил для 404. Иногда такие функции полезны, но после миграции они начинают плодить лишние перенаправления на похожие URL.
2. Уберите дублирующиеся правила
Частая ошибка — один и тот же редирект задан сразу в двух местах. Например, в плагине стоит правило с 301, а в .htaccess — ещё одно на тот же адрес. В итоге браузер проходит лишний круг или получает конфликт.
Если вы храните редиректы в коде, используйте одно место для логики. Для простых случаев достаточно отдельного mu-plugin, чтобы правило не зависело от темы.
<?php
/**
* Plugin Name: WP Premium Redirects
*/
add_action('template_redirect', function () {
if (is_admin()) {
return;
}
$request_uri = $_SERVER['REQUEST_URI'] ?? '';
if ($request_uri === '/staryj-url/' || $request_uri === '/staryj-url') {
wp_redirect(home_url('/novyj-url/'), 301);
exit;
}
});Такой вариант подходит, если нужно быстро закрыть один старый адрес. Но для большого числа правил лучше использовать серверную конфигурацию или специализированный плагин, а не раздувать тему.
3. Проверьте, не конфликтуют ли адреса WordPress и сайта
Если в Настройки → Общие один адрес с www, а другой без него, WordPress может сам добавлять лишний редирект. То же самое бывает при смешении http и https. В таких случаях сначала приводят к одному каноническому варианту домена, а уже потом чистят старые правила.
После изменения этих настроек очистите кэш и проверьте главную страницу, архивы и несколько внутренних URL. Если редирект стал короче и исчезла петля, значит источник был именно в базовой конфигурации.
4. Удалите устаревшие правила, которые больше не нужны
После переноса сайта часто остаются редиректы со старых разделов, которые уже не существуют. Если адреса больше не используются и не имеют входящего трафика, их можно убрать. Но сначала убедитесь, что на них нет внешних ссылок, важных для SEO или пользователей.
Практичный порядок такой:
- соберите список старых URL из логов и Search Console;
- проверьте, есть ли на них переходы;
- сверьте с текущей структурой сайта;
- удалите только те правила, которые больше не нужны;
- после удаления снова проверьте ответ сервера.
Проверка результата после внедрения
Когда правила поправлены, не ограничивайтесь открытием страницы в браузере. Нужно проверить именно цепочку ответов и конечный статус.
curl -I -L https://example.com/staryj-url/— показывает, сколько переходов осталось;- проверка в режиме инкогнито — исключает влияние старого кэша;
- просмотр логов 404 — помогает увидеть, не остались ли старые обращения;
- проверка нескольких URL с и без
www, сhttpиhttps; - тест главной, категорий, страниц и записей, если редиректы затрагивали весь сайт.
Хороший результат — один понятный редирект на нужный адрес или корректный 404 там, где страница действительно удалена. Плохой результат — повторяющиеся переходы, скачки между версиями домена и неожиданные ответы на старые URL.
Частые ошибки и как их исправить
Редирект сделан и в плагине, и в .htaccess
Это самая частая причина циклов. Оставьте только одно место, где живёт правило. Если нужен контроль без админки, лучше вынести логику в mu-plugin, а не размазывать её по теме.
Смешаны http/https и www/без www
Сначала задайте единый канонический вариант домена, потом проверьте сертификат и настройки сервера. Иначе WordPress и сервер будут спорить, какой адрес считать правильным.
Автоматические редиректы на 404 слишком агрессивны
Некоторые плагины пытаются «помочь» и отправляют любой похожий URL на главную или ближайшую страницу. На практике это создаёт мусорные переходы и мешает поисковому анализу. Если есть такая функция, отключите её или ограничьте только действительно нужными случаями.
Кэш не очищен после правок
После изменения редиректов обязательно очистите кэш плагина, серверный кэш и CDN, если он есть. Иначе вы будете проверять старую схему и думать, что правило не сработало.
Безопасность и производительность: что не стоит делать
Не храните десятки однотипных редиректов в functions.php, если тема часто обновляется. При смене темы вы потеряете правила. Для постоянной логики используйте отдельный mu-plugin или серверную конфигурацию.
Не ставьте цепочки вида старый URL → промежуточный URL → новый URL, если можно сразу вести на конечный адрес. Каждый дополнительный шаг — это лишняя задержка и лишний риск ошибки.
Если сайт большой, периодически просматривайте список редиректов и удаляйте те, которые уже не нужны. Это снижает шум в конфигурации и упрощает диагностику, когда появляется новая проблема.
Если вам нужно не только чистить редиректы, но и системно убирать SEO-мусор, дубли и лишние служебные элементы, часть задач можно закрыть через Clearfy Pro. Но даже с плагином полезно понимать, где именно живёт правило и как проверить цепочку ответов вручную.
Короткий чек-лист перед публикацией исправлений
- сохранён текущий список редиректов;
- проверено, нет ли дублирования в плагине и сервере;
- приведены к одному виду
http/httpsиwww/без www; - очищен кэш WordPress, сервера и CDN;
- проверены старые URL через
curl -I -L; - убраны устаревшие правила, которые больше не используются;
- проверены логи 404 после изменений.
Если после этого цикл остаётся, почти всегда проблема не в одном редиректе, а в двух слоях одновременно: WordPress и сервер, либо сервер и CDN. В такой ситуации проще временно отключить все лишние правила, оставить один базовый редирект на домен и добавить остальные по одному, проверяя каждый шаг отдельно.
}