Как найти и убрать дубли страниц в WordPress после миграции

После миграции WordPress-сайта дубли обычно появляются не из-за одной ошибки, а из-за набора мелочей: старые и новые URL доступны одновременно, архивы индексируются вместе с записями, страницы открываются с www и без него, а иногда ещё и с разными параметрами в адресе. На небольшом сайте это выглядит как «пара лишних страниц», но в поиске такие расхождения быстро превращаются в размывание сигналов и лишнюю нагрузку на обход.

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

Как понять, что у сайта появились дубли

Сначала не трогайте код. Проверьте, какие именно URL отдают одинаковый контент или почти одинаковые страницы. После миграции чаще всего всплывают такие варианты:

  • одна и та же страница доступна по /page/ и /page;
  • сайт открывается и на http, и на https;
  • есть версии с www и без него;
  • архивы категорий, тегов и авторов дублируют основной контент;
  • страницы с параметрами ?utm_, ?replytocom, ?amp или сортировками создают отдельные URL;
  • после переноса остались старые адреса, которые не редиректятся на новые.

Быстрая диагностика вручную

Откройте несколько подозрительных адресов в браузере и сравните:

  • финальный URL после загрузки;
  • код ответа сервера;
  • есть ли редирект на каноническую версию;
  • совпадает ли <link rel="canonical"> с итоговым адресом.

Если у вас есть доступ к консоли, полезно проверить заголовки:

curl -I https://example.com/page/
curl -I https://www.example.com/page/
curl -I http://example.com/page/

В нормальной схеме лишние варианты должны вести на один основной URL через 301-редирект. Если этого нет, поисковик может держать в индексе несколько версий одной страницы.

Что исправлять в первую очередь после миграции

Не пытайтесь сразу закрыть всё noindex-ом. Сначала нужно привести в порядок базовую адресацию сайта: домен, протокол, слэши, постоянные ссылки и канонические URL. Это фундамент, без которого остальные меры работают нестабильно.

1. Проверьте настройки WordPress и редирект основного домена

В Настройки → Общие адрес WordPress и адрес сайта должны совпадать с той версией, которую вы хотите считать основной. Если сайт должен открываться на https://example.com, не оставляйте там старый http или www-вариант.

Если у вас Apache, базовый редирект можно сделать через .htaccess:

RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

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

2. Уберите дубли архивов и служебных страниц

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

Если используете SEO-плагин, проверьте:

  • индексацию архивов тегов и авторов;
  • наличие canonical на архивных страницах;
  • исключение технических страниц из sitemap;
  • правильность robots.txt, но без попытки «лечить» дубли только им.

Если нужен более точный контроль, можно отключить архивы авторов кодом:

add_action('template_redirect', function () {
    if (is_author()) {
        wp_redirect(home_url('/'), 301);
        exit;
    }
});

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

3. Проверьте canonical и пагинацию

После миграции часто ломается canonical: страница показывает один адрес, а в canonical указан другой. Для поисковика это сигнал, что версия страницы не определена однозначно.

На страницах с пагинацией canonical должен указывать на текущую страницу, а не всегда на первую. Если плагин SEO это делает неправильно, сначала обновите его и проверьте настройки шаблонов. Самописные правки лучше вносить только если понимаете, как тема формирует <head>.

Сравнение подходов: плагин, код или серверный редирект

ПодходКогда подходитПлюсыМинусы
SEO-плагинНужно быстро закрыть архивы, canonical и sitemapМеньше ручной работы, проще поддержкаНе лечит ошибки сервера и старые URL после миграции
Код в теме/плагинеНужно точечно убрать архивы, редиректы или параметрыТочный контрольРиск сломать логику при обновлении темы
Редиректы на сервереНужно привести домен, протокол и слэши к одному видуБыстро и надёжноТребует доступа к конфигу и аккуратной проверки

На практике лучше комбинировать: сервером закрыть базовые дубли, SEO-плагином — canonical и sitemap, кодом — только точечные исключения.

Пошаговое решение: как убрать дубли без лишнего риска

  1. Выберите один основной URL сайта: один домен, один протокол, один формат со слэшем или без него.
  2. Настройте 301-редиректы со всех альтернативных вариантов на основной адрес.
  3. Проверьте постоянные ссылки в WordPress и обновите правила перезаписи, если переносили сайт между серверами.
  4. Отключите ненужные архивы: теги, авторы, даты, если они не несут ценности.
  5. Проверьте sitemap: в нём должны быть только канонические URL.
  6. Сверьте canonical на типовых страницах: записи, страницы, категории, пагинация.
  7. Уберите параметры, создающие мусорные URL, если они не нужны для работы сайта.

Если дубли создаёт параметр в URL

Иногда после миграции в индекс попадают адреса с параметрами, которые не должны быть отдельными страницами. Например, ?replytocom у комментариев или технические параметры от старой аналитики. В таком случае лучше не плодить отдельные версии и сразу редиректить или игнорировать их на уровне шаблона.

Пример точечного редиректа для параметра replytocom:

add_action('template_redirect', function () {
    if (isset($_GET['replytocom']) && is_singular()) {
        wp_safe_redirect(remove_query_arg('replytocom'), 301);
        exit;
    }
});

Это не универсальное решение для всех параметров, но для конкретного мусорного дубля работает предсказуемо.

Как проверить, что решение сработало

После правок не ограничивайтесь открытием страницы в браузере. Нужна проверка на уровне URL, заголовков и индексации.

  • Откройте старые и новые адреса: все альтернативы должны отдавать 301 на один URL.
  • Проверьте canonical в исходном коде страницы.
  • Сравните sitemap: там не должно быть старых доменных вариантов и параметрических URL.
  • В Search Console посмотрите, не растёт ли число страниц с пометкой «дубликат, выбранный канонический URL отличается».
  • Проверьте, не остались ли в индексе старые адреса через оператор site: и выборочную проверку URL.

Если редирект настроен правильно, curl -I покажет 301 на старом адресе и 200 на основном. Если видите 200 на обеих версиях, проблема ещё не решена.

Частые ошибки и как их исправить

Редирект сделан через 302 вместо 301

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

Canonical указывает на несуществующий или старый адрес

Такое бывает после смены домена или структуры ссылок. Проверьте настройки SEO-плагина, шаблон темы и кэш страницы. Иногда проблема не в коде, а в том, что старая версия HTML продолжает отдаваться из кэша.

robots.txt пытаются использовать как замену редиректам

Запрет в robots.txt не убирает уже существующие дубли из индекса и не решает проблему одинакового контента на разных URL. Он лишь ограничивает обход. Если адреса уже доступны, сначала нужен редирект или canonical, а не только Disallow.

Отключают архивы без проверки внутренней перелинковки

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

Безопасность и производительность: что не стоит игнорировать

Массовые редиректы и фильтры на template_redirect могут добавить лишнюю нагрузку, если вы проверяете слишком много условий на каждом запросе. Держите правила короткими и не вешайте на фронт тяжёлую логику, которая нужна только для редких URL.

Если сайт большой, полезно:

  • сначала собрать список дублей из Search Console и логов сервера;
  • сделать редиректы на уровне веб-сервера, а не только в PHP;
  • не смешивать несколько SEO-плагинов с одинаковыми функциями;
  • после правок очистить кэш страницы, объектный кэш и CDN, если он есть.

Для сайтов, где много технических дублей из-за архивов, параметров и служебных страниц, удобно использовать инструменты вроде Clearfy Pro, если нужен набор точечных настроек для удаления дублей и чистки сайта: https://wpshop.ru/plugins/clearfy. Но даже с плагином базовые редиректы и проверка canonical остаются обязательными.

Если вы хотите быстро понять, что именно осталось в индексе после переноса, начните с простого чек-листа:

  • один основной домен;
  • один протокол;
  • один формат слэша;
  • 301 со старых URL;
  • корректный canonical;
  • чистый sitemap;
  • отсутствие мусорных параметров в индексе.

Когда эти пункты закрыты, дубли обычно перестают быть системной проблемой и сводятся к единичным URL, которые уже можно добить точечно.

Как отключить отправку писем из WordPress и оставить только нужные уведомления
12.08.2026
Как использовать WP-CLI для управления плагинами в WordPress
17.04.2026
Как использовать WP-Cron для задач автоматизации в WordPress
05.06.2026
Как создать автоматическое резервное копирование WordPress
02.12.2025
Как установить и настроить очистку базы данных WordPress от остаточных данных
04.04.2026