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

Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелочей: доступ к одной и той же странице по разным URL, архивы тегов и категорий, параметры в адресе, версии с www и без него, HTTP и HTTPS, а иногда — из-за темы или плагина, который генерирует лишние страницы. Если это не почистить, поисковик начинает тратить обход на повторяющиеся адреса, а в индексе остаются не те страницы, которые вы хотели продвигать.

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

Какие дубли чаще всего встречаются на WordPress-сайте

Сначала полезно понять, с чем именно вы имеете дело. На практике чаще всего всплывают такие варианты:

  • одна и та же запись открывается по нескольким адресам из-за параметров в URL;
  • страница доступна с конечным слэшем и без него, если сервер или редиректы настроены криво;
  • есть дубли архивов: категория, тег, дата, автор, поиск;
  • пагинация создаёт похожие страницы с одинаковыми заголовками и мета-тегами;
  • фильтры и сортировки добавляют параметры, которые не должны индексироваться;
  • тема выводит контент в нескольких шаблонах, а canonical не задан или задан неправильно.

Быстрая диагностика проблемы

Начните не с правок, а с проверки. Это экономит время и помогает не сломать то, что уже работает.

  1. Откройте одну и ту же страницу в нескольких вариантах URL: с www и без, с http и https, со слэшем и без.
  2. Посмотрите исходный код страницы и найдите тег rel="canonical".
  3. Проверьте отчёт в Google Search Console: разделы с дублированными страницами, альтернативными страницами с правильным canonical и страницами, исключёнными из индекса.
  4. Сравните заголовок <title> и meta description у похожих страниц — если они одинаковые, это уже сигнал.

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

Что исправлять в первую очередь: каноникал, редиректы и индексацию

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

ПодходКогда использоватьМинус
301-редиректОдинаковый контент по разным URL, старые адреса, технические копииНужно аккуратно настроить, чтобы не получить цепочки редиректов
canonicalПохожие страницы, пагинация, фильтры, сортировкиНе убирает URL из обхода полностью
noindexАрхивы, поиск по сайту, служебные страницыНе решает проблему внутренних ссылок на мусорные URL

Пример: принудительный canonical для архивов и параметров

Если тема или плагин выводят некорректный canonical, его можно поправить через фильтр wpseo_canonical в Yoast SEO или через стандартный rel_canonical, если вы работаете без SEO-плагина. Ниже пример для случая, когда нужно убрать параметры из canonical-адреса:

<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
    if ( is_singular() && ! empty( $canonical ) ) {
        $canonical = remove_query_arg( array( 'utm_source', 'utm_medium', 'utm_campaign', 'ref' ), $canonical );
    }

    return $canonical;
}, 10, 2 );

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

Пример: 301-редирект с параметров на чистый URL

Если на сайт ведут ссылки с параметрами, которые не нужны для контента, их лучше перенаправлять на чистую версию. Делать это можно на уровне template_redirect:

<?php
add_action( 'template_redirect', function() {
    if ( is_admin() ) {
        return;
    }

    $allowed_params = array( 's' );
    $current_params  = array_keys( $_GET );
    $extra_params    = array_diff( $current_params, $allowed_params );

    if ( empty( $extra_params ) ) {
        return;
    }

    if ( is_singular() || is_page() || is_single() ) {
        $target = remove_query_arg( $extra_params );
        wp_safe_redirect( $target, 301 );
        exit;
    }
} );

Важно: не ставьте такой редирект без разбора на все запросы. Поиск по сайту, фильтры и некоторые служебные параметры могут быть нужны. Сначала проверьте, какие query string реально используются на вашем проекте.

Как убрать дубли архивов и служебных страниц

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

Что можно закрыть без риска

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

Если вы используете SEO-плагин, часть этих настроек проще сделать в интерфейсе. Но если нужен точечный контроль, можно добавить noindex для конкретных шаблонов через wp_head:

<?php
add_action( 'wp_head', function() {
    if ( is_search() || is_date() || is_author() ) {
        echo '<meta name="robots" content="noindex,follow" />' . "\n";
    }
} );

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

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

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

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

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

  • основной URL открывается без редирект-цепочек;
  • дублированный URL отдаёт 301 на нужную страницу;
  • в исходном коде у страницы указан правильный canonical;
  • служебные архивы получили noindex,follow или закрыты на уровне SEO-плагина;
  • внутренние ссылки ведут только на каноническую версию;
  • в Search Console уменьшается число страниц с пометкой о дублировании, если проблема была именно в этом;
  • при ручной проверке через curl -I или DevTools виден ожидаемый код ответа.

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

curl -I https://example.com/staryj-url/?utm_source=test

В ответе должен быть 301 и заголовок Location с целевым адресом. Если вместо этого вы видите 200, значит редирект не сработал.

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

Редирект ведёт на редирект

Это типичная цепочка: старый URL → промежуточный URL → новый URL. Поисковику это не нравится, а пользователю добавляет задержку. Исправление простое: редирект должен вести сразу на конечный адрес.

Canonical указывает на несуществующую страницу

Такое бывает после смены структуры URL или при ручной правке шаблона. Проверьте, что canonical отдаёт 200 OK и совпадает с реальной основной страницей.

Закрыли от индексации нужную страницу

Иногда под раздачу попадают не только архивы, но и важные посадочные. Перед массовым noindex проверьте, не используется ли страница как точка входа из поиска или рекламы.

Скрыли проблему, но не убрали внутренние ссылки

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

Практические советы по безопасности и производительности

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

Ещё два практических момента:

  • не добавляйте тяжёлые проверки на каждом запросе, если можно ограничить их конкретными шаблонами;
  • не пытайтесь закрыть все URL через robots.txt — это не заменяет canonical и редиректы;
  • если используете SEO-плагин, не дублируйте его функции своим кодом без необходимости;
  • после изменений очистите кэш страницы, объектный кэш и CDN, если он есть.

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

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