Дубли в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, пагинация, параметры URL, версии с www и без него, страницы автора, результаты поиска по сайту, а иногда и одинаковые записи, доступные по нескольким адресам. Пока это не мешает пользователю, проблема незаметна. Но для поисковика это уже несколько страниц с одинаковым или почти одинаковым содержимым, и дальше начинается путаница с индексацией.
Ниже — рабочая схема, как найти источник дублей в WordPress, что закрыть от индексации, где поставить канонический адрес, а где лучше вообще не трогать код и ограничиться настройками плагина.
Как понять, что у вас именно дубли, а не просто просадка трафика
Сначала нужно отделить дубли от других технических проблем. Если страница есть в индексе, но в выдаче показывается не та версия URL, это уже сигнал. Если в Search Console растёт число страниц с одинаковым заголовком или описанием, а в отчёте по индексированию появляются адреса с параметрами, пагинацией или служебными путями — это типичный сценарий дублей.
Что проверить в первую очередь
- открывается ли одна и та же страница по
httpиhttps; - есть ли версии с
wwwи без него; - доступны ли архивы тегов, рубрик, автора и дат;
- появляются ли URL с параметрами вроде
?replytocom=,?utm_,?sort=; - не индексируются ли страницы поиска по сайту;
- не дублируется ли контент на страницах пагинации.
Если у вас стоит SEO-плагин, часть этих вещей уже может быть закрыта настройками. Но важно не гадать, а посмотреть исходный код и заголовки ответа.
Диагностика проблемы: где искать дубли в WordPress
Самый быстрый путь — взять несколько подозрительных URL и сравнить их вручную. Откройте страницу в браузере, затем проверьте исходный код и найдите тег rel="canonical". Он должен указывать на единственный основной адрес. Если canonical ведёт на другой URL или отсутствует, поисковик получает лишний сигнал.
Полезно также посмотреть, не отдаются ли разные версии страницы с одинаковым содержимым. Например, запись доступна как обычный пост, как часть архива рубрики и как результат внутреннего поиска. Для пользователя это нормально, для индексации — не всегда.
Мини-проверка через консоль
Если есть доступ к серверу, можно быстро посмотреть редиректы и canonical через curl:
curl -I https://example.com/page/curl -s https://example.com/page/ | grep -i canonicalЕсли canonical отсутствует или указывает на не ту версию, сначала исправляйте это. Закрывать страницы от индексации без canonical — слабое решение: поисковик всё равно может видеть дубли, просто без явного указания основного адреса.
Пошаговое решение: что закрывать, а что оставлять
Универсального списка нет, но в большинстве проектов логика похожа: основную запись оставляем открытой, служебные и повторяющиеся страницы ограничиваем. Ниже — практический порядок.
1. Приведите сайт к одной основной версии домена
Сайт должен открываться только в одной комбинации: https и либо с www, либо без него. Все остальные варианты должны редиректить на основной адрес с кодом 301. Это не просто вопрос аккуратности: иначе одна и та же страница существует в нескольких версиях.
Если редиректов нет, их лучше настроить на уровне сервера или через конфигурацию хостинга. В WordPress это можно дополнительно проверить в Настройки → Общие, но полагаться только на эти поля не стоит.
2. Закройте от индексации служебные архивы
Архивы автора, даты и внутреннего поиска часто не несут самостоятельной ценности. Если на сайте один автор, архив автора почти всегда дублирует список записей. Архивы дат на контентных сайтах тоже редко нужны в индексе. Их можно закрыть через SEO-плагин или через noindex в шаблоне, если вы контролируете тему.
Для рубрик и тегов решение зависит от структуры сайта. Если рубрики реально помогают навигации и содержат уникальные описания, их можно оставить. Если тегов слишком много и они созданы без системы, это источник тонких дублей и мусорных страниц.
3. Уберите из индекса внутренний поиск и параметры URL
Страницы поиска по сайту почти всегда создают дубли. То же касается URL с параметрами сортировки, фильтрации, UTM-метками и служебными хвостами. Для поисковика это отдельные адреса, хотя контент может быть тем же.
Если параметры нужны для аналитики, это не значит, что их нужно индексировать. Наоборот, их обычно оставляют для пользователя и исключают из индексации через правила SEO-плагина, robots.txt или настройку канонического URL.
4. Проверьте пагинацию архивов
Пагинация сама по себе не ошибка. Проблема возникает, когда страницы архива /page/2/, /page/3/ и дальше выглядят почти одинаково, а заголовки и описания не меняются. В таком случае поисковик может воспринимать их как повторяющиеся страницы.
Обычно не нужно закрывать пагинацию целиком. Достаточно, чтобы каждая страница имела корректный canonical на саму себя и не дублировала мета-теги первой страницы архива.
Когда лучше решить задачу через плагин, а когда через код
Если сайт типовой, проще и безопаснее использовать SEO-плагин. Если у вас кастомная тема или особая логика контента, точечный код даёт больше контроля. Ниже — короткое сравнение.
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Типовой сайт, нужно быстро закрыть архивы, теги, поиск | Меньше гибкости в нестандартных шаблонах |
| Код в теме или плагине | Нужны точечные правила для конкретных типов записей | Нужно аккуратно тестировать после обновлений |
| Комбинация | Часть правил в плагине, часть в шаблоне | Легко задвоить логику, если не вести учёт |
Если вы используете Clearfy Pro, там есть практичные настройки для удаления дублей и чистки сайта. Это не отменяет проверки canonical и редиректов, но позволяет быстро закрыть типовые источники мусорных URL. Ссылка: Clearfy Pro.
Пример кода: убрать поиск и архив автора из индексации
Если вы не хотите зависеть от плагина, можно добавить точечные правила в дочернюю тему или в небольшой mu-plugin. Пример ниже не закрывает страницы от доступа, а только запрещает их индексирование через robots:
add_action('wp_head', function () {
if (is_search() || is_author()) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
});Это рабочий вариант для простых случаев, но он не решает проблему дублей на уровне URL. Если страницы поиска уже попали в индекс, одного noindex может быть мало: иногда нужен ещё и корректный canonical, а в отдельных случаях — редирект или запрет индексации в SEO-плагине.
Пример кода: задать canonical для нестандартного шаблона
Иногда дубли возникают не из-за WordPress, а из-за кастомной логики темы. Например, одна и та же подборка выводится на двух разных URL. Тогда лучше явно указать canonical на основной адрес:
add_filter('get_canonical_url', function ($canonical, $post) {
if ($post instanceof WP_Post && has_category('news', $post)) {
return get_permalink($post);
}
return $canonical;
}, 10, 2);Здесь важно не пытаться «улучшить» canonical наугад. Если фильтр возвращает неверный адрес, вы сами создадите новую проблему. Используйте его только там, где понимаете логику шаблона и можете проверить результат на реальном URL.
Проверка результата после внедрения
После настройки не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковик и браузер видят именно то, что вы задумали.
- откройте несколько URL и проверьте, что все альтернативные версии редиректят на основной адрес;
- посмотрите исходный код и убедитесь, что canonical указывает на нужную страницу;
- проверьте, что страницы поиска, автора и служебные архивы не попадают в sitemap, если вы их закрывали;
- в Search Console запросите повторную проверку важных URL;
- сравните отчёт по индексированию через несколько дней, а не сразу после правок.
Если у вас есть доступ к логам или аналитике, посмотрите, не остались ли в обращении старые адреса с параметрами. Это хороший индикатор того, что редиректы работают не везде.
Частые ошибки и почему они ломают индексацию
Закрыли страницу в robots.txt, но не убрали из индекса
Это частая ошибка. Если URL уже известен поисковику, запрет в robots.txt не всегда помогает убрать его из индекса. В некоторых случаях поисковик видит адрес, но не может прочитать содержимое и canonical. Для уже проиндексированных дублей обычно нужен noindex или редирект.
Поставили noindex на всё подряд
Иногда после установки SEO-плагина закрывают и архивы, и рубрики, и теги, и страницы пагинации, а потом удивляются, что сайт потерял внутреннюю перелинковку в поиске. Не стоит бездумно прятать всё. Сначала определите, какие страницы реально полезны пользователю и могут ранжироваться отдельно.
Canonical указывает на несуществующий или редиректящий URL
Если canonical ведёт на адрес, который сам редиректит или отдаёт 404, это плохой сигнал. Канонический URL должен быть конечным и рабочим. После изменений всегда проверяйте исходный код и HTTP-ответ.
Оставили дубли в sitemap
Если в карту сайта попали страницы поиска, архивы с параметрами или служебные URL, вы сами подсказываете поисковику, что их нужно обходить. Sitemap должен содержать только те страницы, которые вы действительно хотите видеть в индексе.
Что ещё проверить, чтобы дубли не вернулись
После чистки дублей полезно закрепить правила на уровне процесса. Не создавайте новые шаблоны без проверки canonical, не плодите теги без структуры и не подключайте плагины фильтрации, которые генерируют отдельные URL для каждого состояния страницы. Если на сайте есть редакторы, им тоже стоит объяснить, что теги и рубрики — это не место для хаотичного заполнения.
Если проект большой и технически запущенный, иногда проще сначала навести порядок в дублях через плагин, а потом уже дорабатывать шаблоны. Но в любом случае проверка должна быть одинаковой: один основной URL, корректный canonical, лишние служебные страницы не в индексе, sitemap без мусора.