Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких технических причин: пагинация рубрик, параметры в URL, архивы тегов, страницы автора, сортировки, UTM-метки, а иногда и особенности темы или плагина. Если не разобраться с источником, поисковик начинает индексировать несколько адресов с одинаковым или почти одинаковым содержимым. Это размывает сигналы, усложняет обход и мешает нормальной каноникализации.
Ниже — рабочий сценарий: как найти дубли, что закрывать, что оставлять в индексе и как не сломать внутреннюю перелинковку и SEO.
Как понять, что у вас именно дубли, а не просто много похожих страниц
Сначала важно отличить настоящий дубль от нормальной структуры сайта. Например, страницы пагинации рубрик /category/news/page/2/ сами по себе не ошибка. Ошибка начинается, когда в индекс попадают варианты одного и того же контента: ?replytocom=, ?utm_, сортировки, фильтры, версии с и без слеша, а также архивы, которые дублируют основной контент без добавочной ценности.
Быстрая диагностика в Search Console и вручную
Проверьте такие признаки:
- в Google Search Console у одной страницы несколько URL-версий;
- в отчёте по индексированию есть страницы с параметрами;
- в выдаче видны архивы тегов, авторов или дат, которые повторяют рубрики;
- одна и та же статья открывается по нескольким адресам из-за редиректов или неправильного canonical;
- внутренние ссылки ведут на URL с параметрами, хотя они не нужны для индексации.
Если есть доступ к серверным логам или аналитике, посмотрите, какие URL чаще всего обходятся ботом. Иногда проблема не в том, что страница уже в индексе, а в том, что бот тратит обход на мусорные варианты.
Какие дубли в WordPress встречаются чаще всего
На практике почти всегда всплывает один из следующих сценариев. Их удобно разделить по источнику, потому что решение будет разным.
| Источник дубля | Что происходит | Что делать |
|---|---|---|
| Параметры URL | Одна и та же страница доступна с ?utm_, ?replytocom, сортировкой и фильтрами | Каноникал, редиректы, запрет индексации для мусорных параметров |
| Архивы таксономий | Теги и рубрики повторяют друг друга или дублируют контент записей | Оставить только полезные архивы, остальные закрыть или удалить |
| Пагинация | Страницы /page/2/ и далее индексируются как отдельные посадочные | Проверить canonical и мета-robots, не закрывать всё подряд |
| Технические версии | HTTP/HTTPS, www/non-www, слеш/без слеша, index.php | Свести всё к одному варианту через редиректы |
Пошаговое решение: от чистки URL до каноникализации
Шаг 1. Приведите сайт к одному базовому варианту адресов
Если у сайта есть несколько доступных версий главной и внутренних страниц, сначала настройте единый формат. Это не задача для robots.txt. Здесь нужны 301-редиректы на уровне сервера или через WordPress, если другого варианта нет.
Проверьте:
- один протокол — только HTTPS;
- один хост — либо
www, либо без него; - один формат слеша в конце URL;
- нет дублей через
index.phpв адресе.
Если редиректы уже есть, убедитесь, что они не создают цепочки. Например, http://www.site.ru/page должен вести сразу на финальный адрес, а не через два-три промежуточных шага.
Шаг 2. Уберите мусорные параметры из индекса
Параметры вроде ?utm_source= полезны для аналитики, но не должны создавать отдельные страницы в поиске. То же касается ?replytocom в комментариях и некоторых параметров сортировки, если они не несут самостоятельной ценности.
Если вы используете SEO-плагин, проверьте, не генерирует ли он canonical на URL с параметром. Canonical должен указывать на чистую версию страницы без лишних параметров.
Для точечной очистки можно использовать фильтр wpseo_canonical, если у вас установлен Yoast SEO, либо аналогичный механизм в другом SEO-плагине. Ниже пример для WordPress без привязки к конкретному SEO-плагину: убираем UTM и replytocom из canonical на уровне темы или мини-плагина.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (empty($canonical)) {
return $canonical;
}
$parts = wp_parse_url($canonical);
if (empty($parts['query'])) {
return $canonical;
}
parse_str($parts['query'], $query);
foreach (array_keys($query) as $key) {
if (str_starts_with($key, 'utm_') || $key === 'replytocom') {
unset($query[$key]);
}
}
$new_query = http_build_query($query);
$canonical = $parts['scheme'] . '://' . $parts['host'] . ($parts['path'] ?? '');
if (!empty($new_query)) {
$canonical .= '?' . $new_query;
}
return $canonical;
}, 10, 2);Это не универсальное лекарство, а пример для понимания логики. Если у вас SEO-плагин уже управляет canonical, сначала проверьте его настройки, а не дублируйте логику в коде.
Шаг 3. Оставьте в индексе только полезные архивы
Частая ошибка — закрыть вообще все архивы, потому что «они дублируют записи». На практике рубрики часто нужны как посадочные страницы, а теги и архивы автора — нет. Решение зависит от структуры сайта.
- Рубрики — обычно оставляют, если у них есть нормальные описания, перелинковка и уникальная ценность.
- Теги — часто закрывают от индексации или удаляют, если они создаются хаотично.
- Архивы автора — на сайте с одним автором обычно не нужны в индексе.
- Архивы по датам — редко полезны для SEO, если это не новостной проект с сильной датировкой.
Если нужен быстрый способ навести порядок в дублях и технических страницах, можно использовать Clearfy Pro как инструмент для точечной чистки SEO-обвязки и дублей, но только после проверки, что он не конфликтует с вашим SEO-плагином: Clearfy Pro.
Шаг 4. Настройте robots.txt и мета-robots без фанатизма
robots.txt не убирает уже проиндексированные URL из поиска. Он только ограничивает обход. Поэтому закрывать им всё подряд — плохая идея. Для дублей лучше использовать canonical, 301-редиректы и мета-robots noindex,follow там, где страница должна быть доступна пользователю, но не нужна в выдаче.
Пример: если у вас есть страницы тегов, которые должны открываться для посетителей, но не индексироваться, логичнее поставить noindex,follow, а не закрывать их в robots.txt. Тогда поисковик сможет пройти по ссылкам внутри страницы.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_tag() || is_author() || is_date()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант подходит не всем. Если у вас сайт-энциклопедия с сильными тегами, закрывать их от индексации может быть ошибкой. Сначала оцените, дают ли эти архивы трафик и уникальную структуру.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой в браузере. Нужны именно технические признаки, что дубли перестали попадать в индекс или перестали создаваться.
- откройте проблемный URL и проверьте, что он ведёт на канонический адрес или отдаёт нужный meta robots;
- посмотрите исходный код страницы: canonical должен указывать на чистую версию;
- проверьте HTTP-статус через
curl -Iили любой аналогичный инструмент; - в Search Console отправьте на повторную проверку ключевые страницы;
- через несколько дней сравните число URL с параметрами в отчёте по индексированию.
Пример быстрой проверки редиректа из консоли:
curl -I https://example.com/page/?utm_source=testВ ответе должен быть либо 301 на чистый URL, либо финальная страница с корректным canonical. Если видите 200 на параметрическом URL без canonical, проблема ещё не решена.
Частые ошибки и как их исправить
Закрыли всё в robots.txt и ждёте исчезновения дублей
Это не работает для уже известных поисковику URL. Если страница уже в индексе, robots.txt не удалит её сам по себе. Нужны canonical, noindex или редирект, в зависимости от сценария.
Поставили noindex на нужные страницы
Такое часто случается с рубриками, которые реально дают трафик. Если страница полезна пользователю и должна ранжироваться, не закрывайте её только потому, что она похожа на другие. Сначала сравните её с соседними архивами: есть ли у неё уникальный текст, структура и поисковый спрос.
Сделали canonical на главную вместо чистой версии страницы
Это грубая ошибка. Canonical должен указывать на наиболее близкую и релевантную версию, а не на абстрактную «главную». Иначе поисковик может игнорировать сигнал или воспринимать его как попытку склеить несвязанные страницы.
Удалили теги, но не настроили редиректы
Если теговые страницы уже индексировались и на них есть входящие ссылки, после удаления нужен 301-редирект на релевантную рубрику или на страницу-замену. Иначе получите 404 и потерю части ссылочного веса.
Использовали плагины для дублей поверх уже настроенного SEO-плагина
Когда два плагина одновременно управляют canonical, meta robots или редиректами, результат непредсказуем. Оставьте один источник истины: либо SEO-плагин, либо собственный код, либо отдельный инструмент для редиректов.
Безопасность и производительность: что важно не испортить
Любые массовые изменения URL и мета-тегов лучше делать поэтапно. Сначала тест на staging, потом выборочная проверка, и только затем раскатка на весь сайт. Если у вас большой проект, не меняйте одновременно структуру ссылок, правила редиректов и настройки индексации — потом будет трудно понять, что именно сломалось.
Если правите кодом, выносите изменения в мини-плагин или mu-plugin, а не в functions.php активной темы. Так вы не потеряете логику при обновлении темы и не смешаете SEO-правки с визуальными доработками.
Для сайтов с большим количеством архивов и технических страниц полезно периодически пересматривать, какие типы контента вообще должны существовать. Иногда правильное решение — не «закрыть от индексации», а убрать лишний источник дублей на уровне структуры сайта.
Если задача шире, чем точечная чистка, и нужно системно убрать дубли, мусорные архивы и лишние SEO-обвязки, имеет смысл смотреть на инструменты, которые помогают централизованно управлять этими настройками, а не собирать их из нескольких плагинов и ручных правок.
После внедрения не спешите ждать мгновенного эффекта. Сначала убедитесь, что новые правила реально применяются, потом отслеживайте переобход и изменение статуса URL в Search Console. Для дублей важна не скорость, а последовательность: один канонический адрес, один понятный сигнал для поисковика и минимум технического шума.