Дубли в WordPress часто появляются не из-за «плохого SEO-плагина», а из-за сочетания архивов, пагинации, фильтров темы и неверно собранных canonical/robots. На небольшом сайте это выглядит как мусор в индексе, на большом — как распыление сигналов и лишняя нагрузка на краулинг.
Ниже — рабочий сценарий: как понять, что именно дублируется, где это править и как проверить, что после изменений поисковик видит нужную версию страницы.
Когда проблема действительно в дублях, а не в «плохой индексации»
Сначала стоит отделить дубли контента от обычной переиндексации. Если в поиске всплывают URL вида /category/news/page/2/, /tag/..., ?replytocom=, ?amp или параметры сортировки, это уже не абстрактная проблема, а конкретный набор страниц, которые надо либо канонизировать, либо закрыть от индексации, либо вообще не генерировать.
Типичные симптомы
- в
site:запросах видны страницы пагинации вместо основной категории; - в Search Console у одной и той же записи появляются разные URL с параметрами;
canonicalна странице указывает не на себя, а на другую версию без понятной причины;- в коде темы есть ручная генерация мета-тегов, которая конфликтует с SEO-плагином;
- архивы с пагинацией отдают
index,follow, хотя должны быть закрыты или канонизированы.
Диагностика: где искать источник дублей
Проверка начинается не с плагинов, а с реального HTML и ответа сервера. Откройте проблемную страницу и посмотрите исходник: какой canonical стоит в <head>, есть ли meta robots, не дублируются ли теги от темы и SEO-плагина одновременно.
Полезно сравнить несколько URL одной сущности: основную запись, страницу пагинации архива и URL с параметром. Если у них одинаковый контент, но разные канонические адреса, проблема уже локализована.
curl -I https://example.com/category/news/page/2/Смотрите на статус, редиректы и заголовки. Если страница отдает 200 и индексируется, а вы ожидали 404 или noindex, значит настройка не сработала на уровне темы, плагина или сервера.
Что проверить в админке и коде
- настройки SEO-плагина: canonical, noindex для архивов, пагинации и медиа-страниц;
- функции темы, которые добавляют
wp_headвручную; - фильтры, меняющие
rel_canonicalилиwp_robots; - плагины фильтров, сортировки и AJAX-подгрузки, которые создают новые URL;
- редиректы и правила в
.htaccessили конфиге Nginx.
Пошаговое решение: убрать дубли пагинации и привести canonical в порядок
Если у вас обычный блог или контентный сайт, чаще всего достаточно двух действий: закрыть от индексации ненужные архивы и убедиться, что canonical указывает на саму страницу без параметров.
1. Закройте мусорные URL на уровне robots и canonical
Вместо ручного вывода мета-тегов в шаблоне лучше использовать штатные фильтры WordPress. Ниже пример, который убирает индексацию служебных страниц и оставляет canonical для основных записей и архивов.
<?php
add_filter('wp_robots', function( $robots ) {
if ( is_search() || is_attachment() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
if ( is_paged() && ( is_category() || is_tag() || is_author() || is_date() ) ) {
$robots['noindex'] = true;
}
return $robots;
});
add_filter('rel_canonical', function( $canonical ) {
if ( is_paged() && ( is_category() || is_tag() || is_author() || is_date() ) ) {
return get_pagenum_link( max( 1, get_query_var('paged') ) );
}
return $canonical;
});Этот вариант не универсален для всех проектов, но он показывает принцип: не ломать canonical вручную в шаблоне, а править его через фильтры там, где WordPress уже ожидает вмешательство.
2. Уберите дубли от параметров в URL
Если дубли создаются параметрами сортировки, фильтра или трекинга, не надо надеяться, что поисковик сам «разберется». Для таких URL обычно нужен либо редирект на чистую версию, либо noindex, либо запрет генерации ссылок в шаблоне.
Пример мягкой нормализации для UTM-параметров и части служебных query string:
<?php
add_action('template_redirect', function() {
if ( is_admin() ) {
return;
}
$remove = array( 'utm_source', 'utm_medium', 'utm_campaign', 'replytocom' );
$has_dirty_query = false;
foreach ( $remove as $key ) {
if ( isset( $_GET[ $key ] ) ) {
$has_dirty_query = true;
break;
}
}
if ( ! $has_dirty_query ) {
return;
}
$clean_url = remove_query_arg( $remove );
wp_safe_redirect( $clean_url, 301 );
exit;
});Здесь важно не переусердствовать: не редиректите все query string подряд, если у вас есть рабочие фильтры каталога, поиск по сайту или пагинация через параметры.
3. Проверьте тему на двойной вывод SEO-меток
Частая ошибка — тема выводит <title>, canonical и meta robots вручную, а SEO-плагин делает то же самое. В результате в исходнике две версии одного и того же тега, и поисковик выбирает не ту, которую вы ожидали.
Если тема старая, ищите в header.php и functions.php вызовы вроде wp_head() есть, а рядом — ручные echo для canonical или robots. Ручной код лучше убрать, а не «перекрывать» его еще одним фильтром.
Сравнение подходов: плагин, код или правка темы
| Подход | Когда подходит | Минусы |
|---|---|---|
| SEO-плагин | Нужно быстро закрыть архивы, медиа и служебные страницы | Не решает конфликты с темой, если она уже выводит свои мета-теги |
| Код через фильтры | Нужна точечная логика для конкретных типов страниц | Требует тестирования после обновлений темы и плагинов |
| Правка шаблона | Тема полностью кастомная и без SEO-плагина | Легко сломать canonical и получить дубли повторно |
Как проверить, что исправление сработало
После внедрения не ограничивайтесь визуальной проверкой страницы. Нужна проверка ответа, исходника и индексационных сигналов.
- Откройте проблемный URL в браузере и убедитесь, что
canonicalуказывает на ожидаемый адрес. - Проверьте исходный HTML: нет ли двух
canonicalи двухmeta robots. - Сравните ответ
curl -Iдля чистого URL и URL с параметрами. - В Search Console отправьте проверку URL и посмотрите, какой canonical выбрал Google.
- Проверьте, не остались ли в sitemap страницы, которые вы закрыли от индексации.
Если страница закрыта через noindex, но продолжает попадать в индекс, обычно причина одна из трех: тег не попал в HTML, страница все еще доступна по старому URL с внешними ссылками, либо canonical указывает на саму себя и поисковик считает ее самостоятельной.
Частые ошибки и как их исправить
Ошибка 1. Закрыли от индексации все архивы подряд
Такое часто делают после первых жалоб на дубли, а потом теряют полезные страницы категорий. Если архивы дают трафик, не надо рубить их целиком. Лучше закрыть только пагинацию, тонкие архивы и служебные страницы.
Ошибка 2. Редиректят все параметры без разбора
Это ломает фильтры, поиск и пагинацию. Перед редиректом проверьте, какие параметры реально используются сайтом. Для маркетинговых меток и комментариев — да, для рабочих фильтров — нет.
Ошибка 3. Оставили canonical от SEO-плагина и свой ручной canonical
В исходнике должен быть один основной canonical. Если их два, поисковик выберет один сам, и это не всегда будет нужный вам вариант.
Ошибка 4. Не обновили sitemap после изменений
Если закрыли страницу от индексации, но оставили ее в карте сайта, вы сами отправляете поисковику противоречивый сигнал. После правок проверьте генерацию sitemap и исключите из нее закрытые типы страниц.
Безопасность и производительность: что не стоит делать
Не вносите правки в ядро WordPress. Любое обновление затрет изменения, и проблема вернется. Для точечных правил используйте дочернюю тему, mu-plugin или собственный мини-плагин.
Если на сайте много дублей из-за технических страниц, имеет смысл сначала убрать их источник, а не только закрывать от индексации. Это снижает нагрузку на краулинг и упрощает поддержку. В некоторых проектах помогает и чистка лишних SEO- и служебных настроек, например через Clearfy Pro, но такой инструмент не заменяет проверку кода темы и реальных URL.
Практический чек-лист перед публикацией правок
- проверить, кто именно выводит
canonicalиmeta robots; - сравнить HTML у основной страницы и у дубля с параметрами;
- убедиться, что пагинация архивов ведет себя одинаково на всех типах таксономий;
- не закрывать полезные страницы категорий без анализа трафика;
- обновить sitemap и проверить, что закрытые URL из него исчезли;
- протестировать изменения на staging перед выкладкой на прод.
Если после правок дубли продолжают появляться, проблема обычно не в индексации, а в генерации URL на уровне темы, фильтров или плагина. В таком случае проще один раз найти источник, чем бесконечно «лечить» последствия в SEO-настройках.