Дубли страниц в WordPress обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: архивы тегов, пагинация, параметры в URL, страницы автора, вложения медиа, версии с UTM и сортировками. Для поисковика это разные адреса с очень похожим содержимым, а для сайта — лишний расход краулингового бюджета и путаница в индексации.
Если задача не в том, чтобы «закрыть всё от индексации», а именно убрать технические дубли и оставить одну основную версию страницы, лучше работать в двух направлениях: canonical для склейки и noindex для страниц, которые не должны попадать в поиск вообще.
Как понять, что у вас именно дубли, а не обычные страницы
Сначала стоит проверить симптомы. Не нужно сразу править шаблоны и лезть в robots.txt: иногда проблема видна уже в выдаче и в отчётах краулера.
Что искать в поиске и в логике URL
- одна и та же статья открывается с параметрами
?utm_source=...,?replytocom=...или?sort=...; - есть отдельные страницы вложений медиа, которые дублируют контент записи;
- архивы тегов и авторов повторяют фрагменты контента без ценности;
- пагинация архивов индексируется как самостоятельные страницы, хотя это не нужно;
- одна запись доступна по нескольким адресам из-за неправильных редиректов или каноникала.
Быстрый способ диагностики — открыть несколько вариантов URL и сравнить исходный код страницы. Важно смотреть не только на визуальный контент, но и на тег link rel="canonical", мета-robots и HTTP-статус.
<link rel="canonical" href="https://example.com/post/" />Если canonical указывает на другой адрес, а сама страница при этом индексируется, значит поисковик получает противоречивые сигналы. Это частая причина, когда дубли не исчезают даже после добавления noindex в шаблон.
Какие дубли в WordPress встречаются чаще всего
Не все повторяющиеся URL одинаково опасны. Одни можно склеить canonical, другие лучше закрыть от индексации, а третьи — убрать на уровне генерации ссылок.
| Сценарий | Что делать | Компромисс |
|---|---|---|
| UTM и другие параметры | Ставить canonical на чистый URL | Страница доступна, но не плодит дубль в индексе |
| Архивы тегов и авторов | Часто noindex, если они не дают трафик | Меньше страниц в индексе, но слабее внутренняя перелинковка из архивов |
| Страницы вложений | Редирект на родительскую запись или noindex | Нужно аккуратно проверить медиа-ссылки |
| Пагинация архивов | Оставить canonical на саму страницу пагинации | Не путать с noindex без причины |
Пошаговое решение: canonical для дублей и noindex для лишних архивов
Если у вас есть доступ к теме или небольшому MU-плагину, решение лучше делать кодом. Так вы не зависите от интерфейса SEO-плагина и можете точно контролировать логику.
Шаг 1. Добавить canonical для страниц с параметрами
Для большинства параметров, которые не меняют смысл страницы, canonical должен указывать на чистую версию URL. Ниже пример для functions.php или отдельного плагина.
<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
if ( is_admin() || ! $post instanceof WP_Post ) {
return $canonical;
}
// Для обычных записей оставляем стандартный canonical.
if ( is_singular( 'post' ) ) {
return get_permalink( $post );
}
return $canonical;
}, 10, 2 );Этот фильтр не решает всё сам по себе, но помогает не ломать canonical там, где тема или плагин подставляют нестабильный адрес. Для параметров в URL canonical лучше задавать через шаблон <head> или SEO-плагин, если он уже используется.
Шаг 2. Закрыть от индексации архивы, которые не нужны в поиске
Если у вас пустые или почти пустые архивы тегов, страницы автора без уникального контента или служебные таксономии, их можно пометить noindex, follow. Это не запрет на обход, а сигнал не включать страницу в индекс.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_tag() || is_author() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Такой подход лучше, чем массово закрывать всё в robots.txt. Если вы запретите обход, поисковик может не увидеть canonical и не поймёт, что делать с дублем.
Шаг 3. Убрать страницы вложений с отдельной индексацией
Страницы attachment часто создают технический мусор. Если отдельная страница медиа не нужна, безопаснее отправлять её на родительскую запись.
<?php
add_action( 'template_redirect', function() {
if ( is_attachment() ) {
$parent = wp_get_post_parent_id( get_queried_object_id() );
if ( $parent ) {
wp_redirect( get_permalink( $parent ), 301 );
exit;
}
}
} );Если у вложения нет родителя, можно вместо редиректа оставить noindex, но не делать цепочку редиректов на главную без причины.
Если нужен быстрый контроль без правки кода
Когда сайт уже работает на SEO-плагине, часть задач проще закрыть в интерфейсе. Но важно понимать, что именно делает плагин: ставит canonical, noindex или редирект.
- для архивов тегов и авторов — проверьте, не включена ли индексация по умолчанию;
- для страниц вложений — ищите настройку редиректа на родительский URL;
- для параметров сортировки и фильтров — убедитесь, что canonical ведёт на основную версию;
- для пагинации — не ставьте noindex автоматически на все страницы с номером в URL.
Если вы используете Clearfy Pro, часть технических дублей и служебных страниц можно закрывать из настроек без ручного кода. Это удобно, когда нужно быстро привести в порядок архивы, вложения и лишние элементы индексации.
Clearfy Pro имеет смысл рассматривать как инструмент для типовых технических задач, но не как замену проверке canonical в шаблоне.
Как проверить, что решение сработало
После правок не ограничивайтесь открытием страницы в браузере. Нужна проверка на уровне HTML и ответа сервера.
- Откройте основную страницу и её дубли с параметрами.
- Проверьте, что canonical у всех вариантов указывает на один чистый URL.
- Убедитесь, что страницы, которые должны быть закрыты, отдают
noindexв meta robots или HTTP-заголовке. - Проверьте статус-код: для редиректов должен быть 301, а не 302.
- Прогоните URL через Search Console или любой краулер и посмотрите, не осталось ли противоречий.
Для быстрой проверки с сервера удобно использовать curl:
curl -I https://example.com/post/
curl -I https://example.com/post/?utm_source=testВ первом случае вы должны увидеть обычный ответ страницы, во втором — либо тот же canonical в HTML, либо редирект на чистый адрес, если вы решили чистить параметры на уровне сервера.
Частые ошибки и как их исправить
Ставят noindex на страницу и одновременно закрывают её в robots.txt
Так делать не стоит. Если поисковик не может обойти страницу, он не увидит canonical и не сможет корректно обработать сигнал. Для дублей обычно достаточно canonical, а для ненужных архивов — noindex без запрета обхода.
Склеивают всё canonical на главную
Это грубая ошибка. Canonical должен указывать на максимально близкую по смыслу страницу, а не на домашнюю просто потому, что она «главная». Иначе вы теряете релевантность и создаёте путаницу в индексации.
Оставляют страницы вложений без редиректа
Если медиа-страницы не несут ценности, они начинают конкурировать с основным контентом. Редирект на родительскую запись обычно безопаснее, чем бесконечное накопление пустых attachment-страниц.
Не проверяют тему и SEO-плагин одновременно
Иногда тема уже выводит canonical, а SEO-плагин добавляет свой. В итоге в <head> оказывается два canonical, и это уже явная ошибка. После внедрения правок всегда смотрите исходник страницы.
Что ещё учесть для безопасности и производительности
Если вы массово меняете индексацию, не делайте это на живом сайте без бэкапа. Особенно если правите шаблоны темы или подключаете код в functions.php: одна синтаксическая ошибка может положить сайт.
- вносите изменения сначала на staging-копии;
- храните правки в дочерней теме или небольшом must-use плагине;
- не дублируйте логику canonical в нескольких местах;
- после правок очистите кеш страницы и объектный кеш, если он есть;
- проверьте, не ломаются ли хлебные крошки и пагинация.
Если сайт большой, полезно сначала собрать список проблемных URL через краулер, а уже потом решать, где нужен canonical, где noindex, а где редирект. Так вы не будете закрывать от индексации страницы, которые реально приносят трафик.