В WordPress дубли чаще всего появляются не из-за «плохого SEO», а из-за штатной логики CMS: архивы по датам, теги, авторы, страницы пагинации, результаты поиска, параметры сортировки и служебные URL. Если их не контролировать, поисковик тратит краулинговый бюджет на мусорные страницы, а в индексе остаются слабые или одинаковые документы.
Задача здесь не в том, чтобы «закрыть всё подряд», а в том, чтобы оставить в индексе только те URL, которые реально нужны для поиска и трафика. Остальное — либо noindex, либо каноникал, либо полное исключение из генерации ссылок и карты сайта.
Диагностика: какие дубли у вас уже есть
Сначала нужно понять, откуда именно идут повторяющиеся страницы. В WordPress типовые источники почти всегда одни и те же, но на конкретном сайте набор может отличаться. Не начинайте с правок в robots.txt: сначала посмотрите, что уже индексируется и как это выглядит в выдаче.
Что проверить в первую очередь
- архивы рубрик, меток и авторов;
- страницы пагинации вида
/page/2/; - поисковые URL с параметрами;
- страницы с UTM и другими query string;
- дубли главной через
/home/,/index.php, слэши и без слэша; - служебные страницы плагинов, если они открыты для индексации;
- дубли в XML-карте сайта.
Если есть доступ к Search Console, откройте отчет по страницам и посмотрите, какие URL попали в индекс без явной пользы. В логах сервера полезно проверить, что бот часто ходит по архивам и параметрам, а не по основным посадочным страницам.
Быстрая проверка через поиск
Для первичной оценки достаточно нескольких запросов:
site:example.com inurl:tag
site:example.com inurl:author
site:example.com inurl:?s=
site:example.com inurl:/page/Если в выдаче много однотипных страниц, значит, проблема не гипотетическая. Дальше уже решайте, что закрывать, а что оставить.
Что закрывать, а что оставлять
Не все архивы одинаково вредны. Например, рубрики часто нужны как посадочные страницы, а теги на небольшом сайте нередко только создают мусор. Поэтому лучше идти от роли страницы, а не от типа архива.
| Вариант | Когда подходит | Минус |
|---|---|---|
| noindex, follow | архивы нужны пользователю, но не должны ранжироваться | страница может еще долго оставаться в индексе, если на нее много ссылок |
| canonical на основную страницу | есть явный дубль с параметрами или сортировкой | не всегда решает проблему, если контент реально отличается |
| удаление из sitemap и отключение архива | архив не нужен вообще | нужно проверить внутренние ссылки, чтобы не было битых переходов |
Если архив не несет самостоятельной ценности, лучше не пытаться его «продвигать». Для небольших сайтов это особенно актуально для тегов и авторских архивов.
Пошаговое решение через код и настройки
Ниже — рабочая схема, которую можно внедрить без выдуманных хуков и без тяжелых костылей. Если у вас уже стоит SEO-плагин, часть задач он может закрывать, но логику все равно полезно понимать руками.
1. Закрываем лишние архивы от индексации
Если вы хотите оставить страницу доступной, но не отдавать ее в индекс, используйте wp_robots. Это правильнее, чем пытаться блокировать URL в robots.txt: бот увидит страницу, но поймет, что индексировать ее не нужно.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_tag() || is_author() || is_date() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
if ( is_search() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Этот вариант подходит, если вы не хотите ломать шаблоны и при этом убрать из индекса слабые страницы. Для рубрик решение нужно принимать отдельно: если рубрика — полноценная посадочная, не закрывайте ее автоматически.
2. Убираем служебные архивы из карты сайта
Если архив не должен индексироваться, его не должно быть и в sitemap. В WordPress 5.5+ есть встроенная XML-карта сайта, и ее можно фильтровать через wp_sitemaps_post_types и wp_sitemaps_taxonomies.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
if ( isset( $taxonomies['post_tag'] ) ) {
unset( $taxonomies['post_tag'] );
}
return $taxonomies;
} );
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
if ( isset( $post_types['attachment'] ) ) {
unset( $post_types['attachment'] );
}
return $post_types;
} );Если на сайте есть медиа-архивы вложений, их почти всегда лучше убрать из карты сайта и, при необходимости, редиректить на файл или родительскую запись. Иначе поисковик получает еще один слой дублей.
3. Отключаем архивы, которые не нужны вообще
Если теги или авторы не используются как отдельные страницы, можно отключить их генерацию на уровне темы или небольшого плагина. Для этого не нужно переписывать WordPress — достаточно убрать доступ к архивам и вернуть 404 или редирект.
<?php
add_action( 'template_redirect', function() {
if ( is_tag() ) {
wp_redirect( home_url( '/' ), 301 );
exit;
}
} );Такой подход уместен только если вы уверены, что теговые страницы не нужны пользователям и не имеют трафика. Если теги уже ранжируются, сначала проверьте их в аналитике и Search Console.
4. Нормализуем параметры URL
Параметры сортировки, фильтров и поиска часто создают бесконечное количество дублей. Если параметр не меняет смысл страницы, его лучше не индексировать и не включать в каноникал как самостоятельный URL.
Для страниц поиска и фильтрации обычно достаточно noindex плюс корректный canonical на чистый URL. Если параметр нужен для функциональности, но не для SEO, не делайте его отдельной страницей в sitemap и не ставьте на него внутренние ссылки из контента.
Если используете SEO-плагин: где не ошибиться
Плагины часто упрощают задачу, но именно из-за этого появляются ошибки. Пользователь включает «noindex для тегов», а потом забывает, что теги уже были в индексе и на них вели внутренние ссылки. В результате страницы не исчезают мгновенно, а сайт выглядит «сломавшимся» в отчетах.
Если нужен более системный контроль дублей, имеет смысл смотреть в сторону инструментов, которые умеют чистить архивы, мета-теги и карту сайта без ручного кода. Например, в Clearfy Pro есть функции для удаления дублей и технической чистки сайта. Но даже в этом случае важно проверить, что именно отключено, а не полагаться на общий чекбокс.
Сравнение подходов:
| Подход | Плюсы | Когда не подходит |
|---|---|---|
| Код в теме/мини-плагине | точный контроль, минимум лишнего | если сайт ведется не разработчиком и нужен интерфейс |
| SEO-плагин | быстрее для редактора, меньше ручной работы | если нужно закрыть нестандартные URL и параметры |
| Комбинация | гибкость и понятная поддержка | если настройки дублируются в нескольких местах |
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что поисковик видит именно то, что вы задумали.
- откройте несколько закрытых URL и проверьте наличие
noindexв исходном коде; - убедитесь, что эти страницы исчезли из XML-карты сайта;
- проверьте canonical на страницах с параметрами;
- посмотрите, не появились ли редирект-цепочки;
- проверьте ответ сервера для отключенных архивов: 301, 404 или 410 — в зависимости от сценария;
- через Search Console отправьте на переобход ключевые страницы, которые должны остаться в индексе.
Для быстрой технической проверки удобно смотреть заголовки ответа:
curl -I https://example.com/tag/sample/
curl -I https://example.com/?s=testЕсли страница должна быть закрыта, но в ответе нет X-Robots-Tag или в HTML отсутствует noindex, значит, правило не сработало. Если страница редиректится, проверьте, что конечный URL действительно тот, который вы хотели оставить.
Частые ошибки и как их исправить
Закрыли в robots.txt, но не поставили noindex
Это частая ошибка. Если URL уже в индексе, запрет в robots.txt не всегда помогает убрать его быстро. Бот может перестать заходить на страницу, но сам URL останется в выдаче без нормального обновления статуса. Для уже существующих дублей лучше использовать noindex или редирект.
Поставили noindex на важные рубрики
Иногда рубрика — это не мусорный архив, а полноценная посадочная страница с трафиком. Если закрыть ее по шаблону, можно потерять видимость по группе запросов. Перед массовым закрытием проверьте, какие архивы реально дают переходы.
Оставили страницы в sitemap
Если URL закрыт от индексации, но продолжает лежать в карте сайта, вы сами отправляете поисковику противоречивый сигнал. Это не критическая ошибка, но она замедляет очистку индекса и создает лишний шум в отчетах.
Сделали редирект на главную для всего подряд
Редирект на главную — плохая замена удалению дублей. Для несуществующих страниц лучше 404 или 410, а для ненужных архивов — осмысленный 301 на релевантный раздел, если он действительно есть. Иначе поисковик получает мягкую ошибку вместо понятного сигнала.
Практические советы по безопасности и производительности
Чем меньше лишних архивов и параметров, тем меньше нагрузка на обход и генерацию страниц. Это особенно заметно на сайтах с большим количеством записей, когда бот регулярно ходит по пустым тегам и пагинации.
- не плодите теги ради внутренней перелинковки;
- не добавляйте в меню архивы, которые не должны ранжироваться;
- не создавайте отдельные страницы под каждый фильтр, если они не несут ценности;
- проверяйте, не генерируют ли плагины свои служебные URL;
- не дублируйте одну и ту же настройку в теме, SEO-плагине и functions.php.
Если нужен более аккуратный технический контроль без ручного редактирования кода в нескольких местах, можно собрать это в одном месте — например, через Clearfy Pro, если вам важны именно чистка сайта, удаление дублей и базовая техническая оптимизация. Но даже в таком случае сначала опишите, какие URL должны остаться в индексе, а уже потом включайте инструменты.
Рабочий критерий простой: после внедрения закрытые URL не должны попадать в sitemap, в выдаче должны исчезать слабые архивы, а важные страницы — рубрики, статьи и посадочные — должны остаться доступны и без лишних редиректов. Если это так, значит, вы убрали дубли без побочных эффектов.