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

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

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

Что именно считать дублем в WordPress

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

Типовые источники дублей

  • страницы записей с параметрами вроде ?replytocom=;
  • архивы категорий, тегов, авторов и дат, если они не нужны для индексации;
  • страницы вложений медиафайлов;
  • версии сайта с www и без него;
  • HTTP и HTTPS одновременно;
  • страницы пагинации, если они дублируют мета-данные и заголовки;
  • дубли из-за фильтров, сортировок и UTM-параметров, если они индексируются;
  • одинаковые материалы, доступные и через рубрику, и через произвольную таксономию без каноникализации.

Диагностика: где искать проблему

Сначала не трогайте код. Снимите карту проблемы: какие URL уже попали в индекс, какие страницы имеют одинаковые title и description, и какие адреса поисковик считает основными.

Проверка через Search Console и краулер

В Google Search Console откройте отчёты по страницам и исключённым URL. Ищите признаки вроде «другая страница с каноническим тегом», «дубликат, Google выбрал другой канонический URL», «просканировано, но не проиндексировано». Если таких URL много, проблема почти всегда в шаблонах или настройках архивации.

Для быстрой локальной проверки удобно пройтись по сайту краулером вроде Screaming Frog или аналогом. Смотрите:

  • одинаковые <title> и meta description на разных URL;
  • отсутствие или конфликт rel="canonical";
  • страницы с кодом 200, которые должны были бы редиректить;
  • архивы и вложения, которые отдают индексируемые страницы без пользы.

Быстрая проверка в браузере и через исходник

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

<link rel="canonical" href="https://example.com/post-slug/" />

Как убрать дубли: рабочая схема

Лучше идти по слоям: сначала каноникал и редиректы, потом закрытие ненужных архивов, затем чистка параметров и вложений. Не пытайтесь сразу «запретить всё» через robots.txt: это часто оставляет дубли в индексе без возможности нормально переобходить их и понимать, что с ними делать.

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

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

<?php
// Пример для functions.php или mu-plugin.
add_action('template_redirect', function () {
    if (is_admin() || wp_doing_ajax()) {
        return;
    }

    $host = $_SERVER['HTTP_HOST'] ?? '';
    $uri  = $_SERVER['REQUEST_URI'] ?? '/';

    $target_host = 'example.com';
    $is_https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off');

    if ($host !== $target_host || !$is_https) {
        $url = 'https://' . $target_host . $uri;
        wp_redirect($url, 301);
        exit;
    }
});

Этот пример нужно адаптировать под ваш сервер и текущую схему домена. Если редиректы уже настроены на уровне nginx или Apache, не дублируйте логику в PHP.

2. Закройте страницы вложений и лишние архивы

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

<?php
// Редирект страниц вложений на родительскую запись, если она есть.
add_action('template_redirect', function () {
    if (is_attachment()) {
        $parent = wp_get_post_parent_id(get_the_ID());
        if ($parent) {
            wp_redirect(get_permalink($parent), 301);
            exit;
        }
    }
});

// Отключение индексации архивов авторов и дат.
add_filter('wp_robots', function ($robots) {
    if (is_author() || is_date()) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }
    return $robots;
});

Если у вас уже стоит SEO-плагин, проверьте, не конфликтует ли он с этим фильтром. Два источника для robots-мета часто дают непредсказуемый результат.

3. Уберите дубли от параметров и комментариев

Параметр ?replytocom может плодить отдельные URL для одной и той же записи. Если комментарии не критичны для SEO и вам не нужны отдельные ссылки на ответы, можно отключить этот механизм на уровне фильтра.

<?php
add_filter('comment_reply_link', function ($link) {
    return preg_replace('/([?&])replytocom=\d+/', '', $link);
});

Если дубли создают UTM-метки или другие параметры сортировки, не закрывайте их массово через robots.txt. Лучше настроить canonical на чистый URL и, где возможно, 301-редирект для очевидно лишних вариантов.

4. Настройте canonical для шаблонов, где WordPress ошибается

В большинстве случаев WordPress и SEO-плагин сами ставят canonical корректно. Но если у вас кастомные шаблоны, фильтры контента или нестандартные архивы, проверьте, что canonical указывает на единственный основной URL.

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

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

  1. Соберите список дублей из Search Console и краулера.
  2. Приведите сайт к одной версии домена и протокола.
  3. Настройте 301 для вложений, если они не нужны отдельно.
  4. Закройте от индексации архивы, которые не несут ценности.
  5. Проверьте canonical на шаблонах записей, архивов и страниц пагинации.
  6. Обновите карту сайта и отправьте её на переобход.

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

Проверка должна быть не «страница открывается», а «поисковик видит один основной URL». Смотрите на три уровня.

  • HTTP-статус. Лишние версии должны отдавать 301, а не 200.
  • Canonical. На странице должен быть один понятный основной адрес.
  • Индекс. В Search Console количество дублей и исключённых URL должно постепенно снижаться, а основные страницы — оставаться доступными.

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

curl -I https://example.com/page/?replytocom=12

Если вместо 200 вы видите 301 на чистый URL — это хороший знак. Затем откройте конечный адрес и проверьте canonical в исходнике.

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

Закрыли дубли в robots.txt, но не поставили редирект

Так делать можно только в редких случаях. Если URL уже в индексе, robots.txt не гарантирует его исчезновение. Для явного дубля нужен 301 или canonical, а не только запрет обхода.

Поставили noindex на все архивы подряд

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

Смешали логику темы и SEO-плагина

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

Редиректы зациклились

Часто это происходит, когда в коде не учли HTTPS, www или слэш в конце URL. Проверяйте цепочку редиректов перед выкладкой на боевой сайт.

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

Чем меньше самописной логики в functions.php, тем проще поддержка. Если правки нужны надолго, лучше вынести их в маленький mu-plugin, чтобы они не зависели от темы. А перед массовыми изменениями сделайте бэкап базы и файлов: редиректы и noindex легко откатить, но ошибки в шаблонах могут затронуть весь сайт.

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

Главная идея простая: не пытайтесь «лечить дубли» одной галочкой. Сначала найдите источник, потом выберите правильный механизм — редирект, canonical или noindex — и только после этого проверяйте, как сайт ведёт себя в поиске.

Как запретить XML-RPC запросы в WordPress через .htaccess и PHP
23.08.2026
Как удалить пустые таксономии и термины в WordPress
28.03.2026
Как отключить Gutenberg для отдельных типов записей в WordPress
30.12.2025
Как удалить пустые метаданные из базы WordPress для оптимизации
11.12.2025
Как настроить производительность WordPress на уровне кода
03.12.2025