Проблема обычно выглядит одинаково: в индексе появляются десятки почти одинаковых страниц рубрик, меток или пользовательских таксономий, но уже с параметрами сортировки, фильтрации или пагинации. Для поисковика это разные URL, а для сайта — дубли, размывающие релевантность и расходующие краулинговый бюджет.
Если у вас есть архивы вида /category/news/?sort=popular, /tag/seo/?page=2 или страницы таксономий с техническими параметрами от темы и плагинов, их лучше либо закрыть от индексации, либо привести к одному каноническому адресу. Ниже — рабочий сценарий без выдуманных хуков и без магии.
Когда это действительно проблема
Не каждый параметр нужно запрещать. Сначала посмотрите, что именно попадает в поиск и как это влияет на сайт. Если в индексе есть:
- страницы таксономий с одинаковым контентом, но разными параметрами сортировки;
- архивы с пагинацией, которые дублируют основной список;
- служебные параметры от фильтров, которые не меняют смысл страницы;
- URL с UTM и внутренними параметрами, которые случайно стали индексируемыми;
тогда задача не в том, чтобы «запретить всё подряд», а в том, чтобы оставить индексируемой только одну версию каждой значимой страницы.
Что проверить в первую очередь
- есть ли у проблемных URL статус
200 OK; - отдают ли они одинаковый или почти одинаковый контент;
- есть ли у них канонический URL;
- не закрыты ли они уже в
robots.txtслучайно; - не генерирует ли их SEO-плагин, тема или фильтр-виджет.
Диагностика: где именно рождаются дубли
Откройте несколько URL из Search Console или логов сервера и сравните исходный HTML. Если меняется только параметр в адресе, а список записей тот же, это кандидат на canonical или noindex. Если же параметр реально меняет выдачу, например сортирует товары или статьи, нужно решать отдельно: что индексировать, а что нет.
Полезно проверить заголовки и мета-теги прямо из шаблона. Для архивов таксономий WordPress обычно использует taxonomy.php, archive.php или шаблон темы. Если там уже есть SEO-плагин, не дублируйте логику в двух местах.
Пошаговое решение
Вариант 1: закрыть параметры через noindex
Если параметр не нужен в поиске, но страницу нельзя отдавать с 404, добавьте noindex, follow для URL с конкретными GET-параметрами. Это безопаснее, чем пытаться запрещать обход через robots.txt, потому что поисковик всё равно может узнать URL из внешних ссылок.
<?php
add_filter('wp_robots', function ($robots) {
if (is_tax() && !empty($_GET['sort'])) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
if (is_tax() && !empty($_GET['filter'])) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Этот вариант подходит, если вы хотите оставить ссылки и переходы рабочими, но не плодить индексируемые копии.
Вариант 2: задать canonical на чистый архив
Если параметр не меняет смысл страницы, а только форму отображения, лучше указать канонический URL без параметров. Тогда поисковик поймёт, что основная версия — чистый архив таксономии.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_tax()) {
$canonical = get_term_link(get_queried_object());
}
return $canonical;
}, 10, 2);Здесь важно не подменять canonical наугад. Если параметр реально меняет содержимое, canonical на базовый архив может быть неверным. В таком случае лучше оставить параметр noindex-страницей.
Вариант 3: убрать параметры на уровне генерации ссылок
Если параметры добавляет ваша тема или кастомный код, проще не лечить последствия, а перестать генерировать мусорные URL. Например, при выводе ссылок на термины не добавляйте в них технические query string, если они не нужны пользователю.
<?php
$term_link = get_term_link($term);
if (!is_wp_error($term_link)) {
echo '<a href="' . esc_url($term_link) . '">' . esc_html($term->name) . '</a>';
}Это кажется очевидным, но на практике дубли часто появляются именно из-за шаблонов, где URL собирают вручную и забывают про очистку параметров.
Сравнение подходов
| Подход | Когда использовать | Минус |
|---|---|---|
noindex | Параметр нужен пользователю, но не нужен в поиске | Страница остаётся доступной для обхода |
| canonical | Параметр не меняет смысл страницы | Неправильный canonical может запутать поисковик |
| Удаление параметра из ссылок | Параметр создаёт мусор на уровне темы или плагина | Нужно править код и тестировать шаблоны |
Проверка результата после внедрения
После правок не ограничивайтесь просмотром исходника. Проверьте несколько вещей:
- в HTML страницы есть
noindexили корректный canonical; - URL с параметром не попадает в индекс как отдельная страница;
- основной архив таксономии остаётся доступным и индексируемым;
- в Search Console уменьшается число страниц с параметрами в отчётах;
- внутренние ссылки ведут на чистые URL без лишних query string.
Для быстрой проверки откройте страницу через view-source: или используйте curl и посмотрите мета-теги:
curl -I https://example.com/category/news/?sort=popularЕсли у вас настроен SEO-плагин, проверьте, не перетирает ли он ваши правила. Часто проблема в том, что код темы добавляет canonical, а плагин SEO — свой, и в итоге в HTML остаётся только один, но не тот, который вы ожидали.
Частые ошибки и как их исправить
Закрывают всё через robots.txt
Это не решает проблему дублей полностью. Если URL уже известен поисковику, он может остаться в индексе без обхода. Для таких страниц лучше использовать noindex или canonical.
Ставят canonical на главную вместо чистого архива
Так делают, когда не хотят разбираться с шаблоном. В результате поисковик получает сигнал, что страница вообще не самостоятельная, и это может ухудшить видимость нужного архива.
Закрывают пагинацию без проверки
Пагинация архивов таксономий не всегда мусор. Если на второй и третьей странице есть уникальные записи, закрывать их без анализа не стоит. Иногда достаточно оставить noindex только для параметров сортировки, а пагинацию не трогать.
Дублируют правила в теме и SEO-плагине
Если одно и то же правило задано в нескольких местах, потом сложно понять, кто именно его ломает. Выберите один источник правды: либо код темы, либо SEO-плагин, либо mu-plugin.
Практические советы по безопасности и производительности
Если вы правите это кодом, не вносите изменения прямо в родительскую тему. Используйте дочернюю тему или небольшой mu-plugin, чтобы обновления не затёрли правки. Для условий с $_GET не сравнивайте значения без проверки наличия параметра и без нормализации.
Ещё один полезный момент: чем меньше мусорных URL вы генерируете, тем меньше лишних обходов ботами и тем чище отчёты в аналитике. Если у вас много архивов и фильтров, имеет смысл дополнительно проверить, не создаёт ли тема лишние параметры в ссылках на термины, а SEO-логика не конфликтует ли с кешированием.
Если нужен более системный подход к чистке дублей, служебных страниц и SEO-настроек, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином важно понимать, какие именно URL вы закрываете и почему.
В итоге задача сводится к простому правилу: индексируем только одну каноническую версию архива, а все технические вариации либо переводим в noindex, либо убираем из генерации ссылок. Тогда поисковик перестаёт тратить внимание на дубли, а вы получаете более предсказуемую структуру сайта.