Дубли в WordPress обычно всплывают не там, где их ждут. В индексе оказываются страницы с пагинацией, архивы тегов, версии с параметрами, а иногда и одна и та же запись доступна по нескольким URL. Если не разрулить это на уровне canonical, robots и шаблонов архивов, поисковик начинает выбирать «не ту» страницу сам.
Ниже — рабочий сценарий: как найти источник дублей, что править в теме или плагине, и как проверить, что после изменений поисковый робот видит одну каноническую версию.
Как понять, что проблема именно в дублях
Сначала не трогайте код. Посмотрите, какие URL реально индексируются и чем они отличаются. Типичный набор симптомов:
- в поиске есть страницы вида
/page/2/,/page/3/для архивов, хотя они не должны конкурировать с основной страницей; - одна и та же запись открывается с разными хвостами параметров, например
?amp,?replytocom=, UTM-параметрами; - в выдаче всплывают теги и рубрики с одинаковым или почти одинаковым контентом;
- canonical на странице указывает не на текущий URL, а на другую версию без понятной причины.
Проверка простая: откройте проблемную страницу и посмотрите исходный код на наличие тега <link rel="canonical" ...>. Если canonical отсутствует, дублируется или ведёт на неверный адрес, это уже конкретная точка входа.
Что смотреть в первую очередь
- архивы категорий и тегов;
- страницы пагинации архивов;
- поиск по сайту;
- страницы автора, если на сайте один автор и они не несут пользы;
- служебные URL с параметрами.
Диагностика: где именно рождается дубль
Удобнее идти от шаблонов и правил, а не от симптомов в выдаче. В WordPress дубли часто появляются из-за темы, SEO-плагина или кастомного кода, который вмешивается в canonical через фильтры.
Проверьте, не переопределяется ли canonical в теме. В стандартной установке WordPress тег обычно генерируется ядром, но тема или плагин могут менять поведение через фильтр rel_canonical или добавлять свой тег вручную.
<?php
add_filter('rel_canonical', function ($canonical) {
if (is_category() && is_paged()) {
return false;
}
return $canonical;
});Такой код не стоит вставлять без понимания логики сайта, но он показывает, где искать проблему: если canonical для пагинированных архивов вам не нужен, его можно отключить точечно. Для некоторых проектов это оправдано, для других — нет. Всё зависит от того, должны ли страницы пагинации индексироваться как отдельные документы.
Ещё одна частая причина — дубли архивов таксономий. Например, у вас есть рубрика и тег с одинаковым набором записей. Поисковик видит две почти одинаковые страницы и выбирает одну наугад.
| Источник дубля | Что обычно делать | Компромисс |
|---|---|---|
| Пагинация архивов | Проверить canonical и индексацию | Не всегда отключать полностью |
| Теги с повтором рубрик | Закрыть теги от индексации или пересобрать структуру | Потеря части внутренней навигации |
| Параметры URL | Нормализовать canonical и фильтрацию | Нужно аккуратно с аналитикой |
| Страницы автора | Отключить или доработать шаблон | Если авторов несколько, решение может быть другим |
Пошаговое решение без лишнего риска
1. Уберите дубли на уровне SEO-настроек
Если у вас стоит SEO-плагин, сначала используйте его настройки, а не код. Это безопаснее: плагин обычно уже умеет управлять canonical, noindex для архивов и мета-роботами. Смотрите на такие параметры:
- noindex для тегов, если они не дают ценности;
- noindex для архивов автора на сайтах с одним автором;
- отключение индексации страниц поиска;
- контроль canonical для пагинации и архивов.
Если плагин позволяет закрыть от индексации только часть архивов, используйте это. Не надо сразу ставить noindex на всё подряд: можно случайно убрать полезные посадочные страницы.
2. Нормализуйте canonical в теме или через фильтр
Если проблема в том, что canonical указывает на неверную версию страницы, исправляйте источник. Для одиночных записей canonical должен вести на саму запись, для архивов — на текущий архивный URL, если он вообще должен индексироваться.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (! $post instanceof WP_Post) {
return $canonical;
}
// Пример: для вложений canonical лучше вести на родительскую запись,
// если вложение не должно индексироваться отдельно.
if ($post->post_type === 'attachment' && $post->post_parent) {
return get_permalink($post->post_parent);
}
return $canonical;
}, 10, 2);Этот фильтр полезен, когда у вас есть вложения, медиа-страницы или нестандартная логика темы. Но если вы не уверены, что именно ломает canonical, лучше сначала проверить, не делает ли это SEO-плагин. Два источника canonical на одной странице — частая ошибка.
3. Закройте служебные страницы от индексации
Страницы поиска, авторов на однопользовательском сайте, результаты с параметрами сортировки и фильтрации часто не должны попадать в индекс. Если они уже индексируются, поисковик тратит краулинговый бюджет на мусорные URL.
Для таких страниц обычно достаточно мета-тега noindex,follow или корректного правила в SEO-плагине. Если у вас кастомная тема, можно добавить условную логику:
<?php
add_action('wp_head', function () {
if (is_search() || is_author() || is_paged()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Но используйте такой код только если вы точно понимаете, какие страницы он затронет. Например, is_paged() включает не только архивы, но и другие пагинированные представления. Иногда это слишком грубо.
Проверка результата после внедрения
После изменений не ограничивайтесь просмотром страницы в браузере. Нужна проверка на уровне HTML и ответа сервера.
- Откройте проблемный URL и убедитесь, что canonical один и ведёт на нужную страницу.
- Проверьте, что на страницах поиска и служебных архивах стоит нужный robots-режим.
- Сравните исходный код основной записи и её дубля: canonical должен совпадать с выбранной версией.
- Проверьте HTTP-ответ для URL с параметрами: они не должны создавать отдельные индексируемые документы без необходимости.
- В Google Search Console посмотрите, как робот выбирает канонический URL.
Если у вас есть доступ к консоли браузера или к серверу, можно быстро проверить заголовки и HTML. Для страниц, которые должны быть закрыты, полезно убедиться, что они не отдают неожиданный 200 OK с полноценным индексируемым контентом.
Частые ошибки и как их исправить
Два canonical на одной странице
Обычно это конфликт темы и SEO-плагина. Оставьте только один источник. Если плагин уже выводит canonical, уберите ручной вывод из header.php или из подключенного файла.
Закрыли от индексации слишком много
Ошибка типичная: сначала закрывают теги, потом рубрики, потом пагинацию, а в итоге сайт теряет внутреннюю структуру. Проверяйте, какие страницы реально приносят трафик и нужны ли они как посадочные.
Canonical указывает на главную вместо текущей записи
Так бывает после неаккуратной правки фильтра или при использовании шаблона, который копирует canonical из главной страницы. Проверьте, не подменяется ли переменная в кастомной функции.
Параметры URL не нормализованы
Если UTM, сортировка или служебные параметры создают отдельные URL, поисковик может считать их разными страницами. В таком случае canonical должен указывать на чистую версию, а не на URL с параметрами.
Что делать, если проблема сидит в теме или плагине
Если дубли появляются после обновления темы или установки плагина, не правьте ядро WordPress. Ищите точку расширения: фильтр, action, шаблон архива, подключение SEO-мета.
Для быстрой локализации удобно временно отключить плагины по одному и проверить исходный код страницы. Если canonical и robots приходят в норму после отключения конкретного плагина, у вас уже есть виновник. Дальше либо настраиваете его, либо переносите логику в собственный мини-плагин.
Если нужен инструмент для чистки дублей, служебных страниц и лишних мета-тегов без ручного ковыряния шаблонов, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wp8.ru&utm_medium=article&utm_campaign=kak-ubrat-dubli-stranic-v-wordpress-iz-za-canonical-i-paginacii. Но даже с таким плагином важно понимать, что именно вы отключаете, иначе легко сломать индексацию полезных страниц.
Практические советы по безопасности и производительности
Любые правки canonical и robots лучше вносить через дочернюю тему или собственный плагин, а не прямо в файлы родительской темы. Тогда обновление не затрёт изменения. Перед правкой сделайте резервную копию и проверьте изменения на staging-окружении.
Если вы добавляете фильтры в functions.php, держите код минимальным и предсказуемым. Не смешивайте в одном хуке и SEO-логику, и визуальный вывод, и редиректы. Это усложняет отладку и повышает риск конфликтов.
Для больших сайтов полезно периодически пересматривать архивы, которые реально нужны в индексе. Чем меньше мусорных URL, тем проще поисковику обходить сайт и тем меньше шансов, что он выберет неканоническую версию страницы.