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

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

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

Как понять, что у вас именно дубли, а не обычные страницы

Симптомы обычно видны в Search Console, логах сервера или при ручной проверке выдачи. Если одна и та же статья открывается по нескольким адресам, а в индексе всплывают версии с параметрами, это уже не косметическая проблема. Типичный пример: /post/, /post/?utm_source=..., /post/page/2/, /tag/post/ и даже /amp/, если AMP подключён отдельно.

Быстрая диагностика

  • Откройте страницу с разными параметрами и проверьте, меняется ли canonical.
  • Посмотрите отчёт «Страницы» в Google Search Console на предмет «дубли, Google выбрал другой канонический URL».
  • Проверьте исходный код: есть ли у дублей noindex или они отдаются как полноценные индексируемые страницы.
  • Сравните ответы сервера для вариантов URL с curl -I или через DevTools.
curl -I https://example.com/post/?utm_source=test
curl -I https://example.com/post/page/2/

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

Откуда в WordPress берутся дубли

Чаще всего источник один из следующих:

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

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

Что исправлять кодом, а что — настройками

Не все дубли нужно закрывать одинаково. Если страница полезна пользователю и должна быть доступна, но не обязана индексироваться, используйте noindex или корректный canonical. Если адрес технический и не должен существовать как отдельная сущность, лучше делать редирект или отдавать 404/410 в зависимости от сценария.

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

Пошаговое решение: убираем дубли параметров и вложений

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

1. Приведите канонический URL к одной версии

WordPress сам умеет ставить canonical, но тема или SEO-плагин могут вмешиваться. Если у вас нестандартная логика, можно явно поправить canonical для страниц с параметрами:

add_filter('get_canonical_url', function ($canonical, $post) {
    if (is_admin() || ! $canonical) {
        return $canonical;
    }

    if (! empty($_GET) && is_singular()) {
        return get_permalink($post);
    }

    return $canonical;
}, 10, 2);

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

2. Закройте технические страницы от индексации

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

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

Если у вас уже стоит SEO-плагин, сначала проверьте, не делает ли он это сам. Дублирующие правила в теме и плагине часто дают неожиданный результат: один выводит index, другой — noindex, и вы потом ищете причину в кэше.

3. Уберите страницы вложений в медиафайлы

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

add_action('template_redirect', function () {
    if (! is_attachment()) {
        return;
    }

    $parent = wp_get_post_parent_id(get_queried_object_id());
    if ($parent) {
        wp_redirect(get_permalink($parent), 301);
        exit;
    }

    wp_redirect(home_url('/'), 301);
    exit;
});

Это рабочий базовый вариант. Если у вас медиа используется как отдельные посадочные страницы, такой редирект делать нельзя — сначала проверьте, есть ли у вложений реальный трафик и входящие ссылки.

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

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

  • Проверьте canonical в исходном коде основной страницы и дублей.
  • Убедитесь, что технические страницы отдают noindex или редиректятся.
  • Сравните статус-коды: лишние URL должны вести себя предсказуемо.
  • Переобойдите страницы через Google Search Console и посмотрите, исчезли ли сообщения о дубликатах.
  • Если есть кэш, очистите его на уровне плагина, сервера и CDN.

Для быстрой проверки удобно открыть исходный код и найти строку с rel="canonical". Если canonical указывает на нужный адрес, но в индексе всё равно остаётся дубль, значит проблема может быть в старых сигналах, внутренних ссылках или карте сайта.

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

Ставят noindex вместо редиректа

Если URL технически лишний и не нужен пользователю, noindex — слабое решение. Страница всё равно будет обходиться, а сигналов на сайте станет больше. В таких случаях лучше 301-редирект.

Закрывают слишком много страниц

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

Дублируют правила в теме и SEO-плагине

Если canonical и robots-мета генерируются в двух местах, итоговый HTML может быть противоречивым. Оставьте один источник правды: либо тема, либо плагин.

Не чистят кэш после изменений

Это банальная, но частая причина ложных выводов. После правок очистите кэш страниц, объектов и CDN, иначе вы будете смотреть на старую версию HTML.

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

Когда вы правите логику дублей кодом, не вставляйте всё в functions.php без проверки. Лучше вынести изменения в мини-плагин или mu-plugin, чтобы они не пропали после смены темы.

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

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

Мини-чек-лист перед публикацией правок

  • Проверен основной canonical на целевых страницах.
  • Технические URL либо редиректятся, либо закрыты от индексации.
  • Страницы вложений не создают пустые дубли.
  • Кэш очищен на всех уровнях.
  • Внутренние ссылки ведут на канонические адреса.
  • В sitemap нет лишних URL с параметрами и технических страниц.

Если после внедрения дубли всё ещё появляются, ищите источник не только в WordPress, но и в теме, плагинах фильтрации, CDN и правилах сервера. В большинстве случаев проблема не в одном месте, а в цепочке из двух-трёх мелких ошибок.

⭐⭐⭐⭐⭐