wplinks.ru wordpress WPLinks.ru

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

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

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

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

Не стоит начинать с массового удаления. Сначала нужно понять, какие именно URL дублируются и почему. В WordPress чаще всего встречаются такие случаи:

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

Проверка начинается с простых вещей. Откройте несколько подозрительных URL и сравните:

  • канонический адрес в исходном коде;
  • код ответа сервера;
  • есть ли редирект на основной URL;
  • не индексируется ли страница через noindex или robots.txt.

Если используете Search Console, смотрите отчеты по страницам с дубликатами и каноническим URL, выбранным Google. Если в индексе всплывают не те адреса, это уже сигнал, что каноникал или редиректы настроены неполно.

Сначала выбираем тип решения: редирект, canonical или noindex

У дублей нет одного универсального лечения. Для разных сценариев подходит разный способ. Удобно ориентироваться так:

СитуацияЧто делатьКомментарий
Две версии одного и того же URL301-редиректЛучший вариант для склейки
Архив нужен пользователям, но не нужен в поискеnoindex,followНе закрывайте в robots.txt, если хотите, чтобы поисковик видел ссылки
Похожая страница должна оставаться доступнойrel=canonicalПодходит, когда редирект ломает сценарий
Технический параметр в URLРедирект или очистка параметраЕсли параметр не нужен, лучше убрать его на уровне генерации ссылок

Если речь о настоящем дубле без самостоятельной ценности, обычно нужен редирект. Если страница полезна для навигации, но не должна конкурировать в поиске, лучше использовать canonical или noindex. Закрывать всё подряд через robots.txt — плохая идея: поисковик перестанет обходить страницу, но дубль как сущность никуда не исчезнет.

Пошаговое решение для типовых дублей

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

Проверьте, чтобы сайт открывался только в одной комбинации: https и либо с www, либо без него. Это делается на уровне настроек сайта и веб-сервера. В WordPress в Настройки → Общие адреса WordPress Address и Site Address должны совпадать с основной версией.

Если нужен принудительный редирект на уровне WordPress, можно использовать такой код в плагине или functions.php темы:

add_action('template_redirect', function () {
    if (is_admin() || wp_doing_ajax()) {
        return;
    }

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

    $target_host = 'example.ru';
    $target_scheme = 'https';

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

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

2. Уберите технические параметры из индексации

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

Пример: если на сайте есть старые ссылки с ?replytocom, можно перенаправлять их на чистый URL:

add_action('template_redirect', function () {
    if (empty($_GET['replytocom'])) {
        return;
    }

    $url = remove_query_arg('replytocom');
    wp_safe_redirect($url, 301);
    exit;
});

Для UTM-параметров такой редирект делать не стоит, если вы используете их в аналитике. В этом случае лучше оставить параметр в адресе, но убедиться, что canonical указывает на чистую страницу без UTM.

3. Закройте архивы, которые не несут ценности

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

Для архивных страниц в теме можно добавить мета-тег:

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

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

4. Настройте canonical на страницах с похожим контентом

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

В шаблоне можно вывести свой canonical, если стандартного недостаточно:

add_action('wp_head', function () {
    if (!is_singular()) {
        return;
    }

    $canonical = get_permalink();
    echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}, 1);

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

Диагностика после внедрения

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

  1. старый URL отдает 301 на нужный адрес;
  2. у целевой страницы один canonical;
  3. в исходном коде нет лишних дублей мета-тегов и заголовков.

Проверка через curl помогает быстро увидеть, что реально отдает сервер:

curl -I https://example.ru/staryj-url/

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

Дополнительно откройте страницу в браузере и посмотрите исходный код. В нем должен быть один canonical, а не несколько. Для архивов проверьте, что они действительно получили noindex,follow, если это было задумано.

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

  • Закрыли страницу в robots.txt вместо noindex. В результате поисковик может продолжать видеть URL как отдельную сущность, но не сможет нормально переосмыслить его статус. Для дублей это обычно не лучший путь.
  • Поставили 302 вместо 301. Временный редирект не всегда передает сигнал о постоянной замене. Если URL меняется навсегда, нужен именно 301.
  • Добавили canonical на страницу, которая должна редиректить. Canonical — это подсказка, а не жесткое перенаправление. Для явных дублей лучше редирект.
  • Оставили несколько версий сайта доступными одновременно. Часто это происходит после миграции: http, https, www и без www продолжают открываться параллельно.
  • Сломали пагинацию. Если закрыть все архивы без разбора, можно потерять полезные страницы категорий и тегов, которые реально приводят трафик.

Что проверить на производительности и безопасности

Редиректы и проверки в template_redirect не должны превращать сайт в набор тяжелых условий. Не добавляйте сложную логику в functions.php, если можно решить вопрос на уровне сервера или SEO-плагина. Чем меньше PHP-логики на каждом запросе, тем лучше.

Если правите canonical, используйте только проверенные функции экранирования вроде esc_url(). Не подставляйте в HTML сырые значения из $_GET или $_SERVER без очистки. Это уже вопрос безопасности, а не только SEO.

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

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

  • основной домен открывается только в одной версии;
  • старые URL отдают 301 на целевые;
  • у целевых страниц один canonical;
  • архивы, которые не нужны в поиске, получили noindex,follow;
  • в robots.txt нет случайного запрета на важные разделы;
  • в Search Console не растет число страниц с дублями после переобхода.

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

×

Время действовать!

Суперцены на
WordPress!

-20%
на премиум темы

Не упусти шанс ⋙