Если на сайте появились десятки или сотни почти одинаковых URL с параметрами, поисковик начинает тратить краулинговый бюджет на мусорные страницы. Чаще всего это фильтры, сортировки, пагинация, UTM-параметры, внутренний поиск и служебные query string. В WordPress это особенно заметно на каталогах, архивах записей и страницах с кастомными фильтрами.
Задача здесь не в том, чтобы «запретить всё подряд», а в том, чтобы оставить в индексе полезные посадочные страницы и убрать технические дубли. Ниже — рабочая схема: как диагностировать проблему, что править в robots.txt, где ставить noindex, когда нужен canonical, и как проверить, что ничего не сломалось.
Как понять, что у вас именно дубли от параметров
Сначала посмотрите, какие URL реально индексируются. В Google Search Console откройте отчёт по страницам и выгрузите примеры URL с параметрами. Если видите варианты вроде ?sort=price, ?orderby=date, ?filter_color=black, ?s=..., ?utm_source=... — это уже сигнал.
На самом сайте признаки обычно такие:
- один и тот же контент доступен по нескольким адресам;
- в выдаче появляются страницы с параметрами, которые не должны ранжироваться;
- в логах много обходов URL с сортировками и фильтрами;
- внутренние ссылки сами генерируют параметры в навигации.
Полезно проверить, что отдают такие страницы в HTML. Откройте исходник и найдите тег link rel="canonical". Если canonical указывает на саму параметризованную страницу, а не на чистый URL, поисковик может считать её отдельной страницей.
Что делать в первую очередь: диагностика и приоритизация
Не все параметры одинаково вредны. Одни можно закрыть от индексации, другие лучше оставить, если они формируют полезные посадочные страницы. Например, фильтр по бренду или типу материала иногда нужен для SEO, а сортировка по цене — почти всегда технический дубль.
Разделите параметры на три группы
- Технические — сортировка, пагинация, UTM, служебные параметры, внутренний поиск.
- Пограничные — фильтры, которые могут быть полезны только в отдельных сценариях.
- Ценные — страницы, которые вы сознательно хотите индексировать как посадочные.
Если сомневаетесь, начните с технических параметров. Их можно закрывать без риска для семантики.
Пошаговое решение: robots.txt, canonical и noindex
Обычно лучше не ограничиваться одним инструментом. Для разных типов дублей работают разные меры.
1. Закройте очевидный мусор в robots.txt
Это не удаляет URL из индекса само по себе, но сокращает обход бесполезных адресов. Для WordPress можно добавить правила вручную, если у вас нет плагина, который управляет robots.txt.
User-agent: *
Disallow: /?s=
Disallow: /*?orderby=
Disallow: /*?sort=
Disallow: /*?filter_
Disallow: /*?utm_
Disallow: /*?replytocom=
С этим есть важная оговорка: robots.txt не должен блокировать страницы, на которых вы хотите увидеть canonical или meta robots. Если URL уже в индексе, одного запрета в robots.txt мало — поисковик может дольше держать старую версию в выдаче.
2. Ставьте canonical на чистую страницу
Если параметр не меняет смысл страницы, canonical должен вести на основную версию без query string. Для WordPress это можно сделать на уровне темы или небольшого плагина.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$canonical = home_url(add_query_arg([], $GLOBALS['wp']->request));
if (!empty($_GET)) {
$canonical = strtok(home_url(add_query_arg([], $GLOBALS['wp']->request)), '?');
}
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}, 1);
Этот пример не универсален для всех сайтов, но показывает принцип: если URL содержит только технические параметры, canonical должен указывать на чистую страницу. В реальном проекте лучше не дублировать canonical, если его уже выводит SEO-плагин.
3. Для страниц, которые не нужны в индексе, используйте noindex
Если страница должна открываться пользователю, но не должна индексироваться, добавьте noindex,follow. Это подходит для внутреннего поиска, страниц сортировки и некоторых фильтров.
<?php
add_filter('wp_robots', function (array $robots) {
if (isset($_GET['s']) || isset($_GET['orderby']) || isset($_GET['sort'])) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});
Этот способ работает только если страница не закрыта robots.txt раньше, чем поисковик увидит мета-тег. Поэтому для уже проиндексированных URL обычно комбинируют canonical, noindex и последующую очистку в Search Console.
Когда достаточно плагина, а когда нужен код
Если у вас типовой сайт и проблема в UTM, внутреннем поиске и стандартных дублях, часть задач можно закрыть плагином. Например, в Clearfy Pro есть инструменты для чистки сайта и удаления дублей, что удобно, когда не хочется вручную поддерживать набор мелких правок. Но если у вас кастомные фильтры, собственный каталог или нестандартные query vars, без кода обычно не обойтись.
| Подход | Что решает | Ограничения |
|---|---|---|
| Плагин | Типовые дубли, базовая чистка, часть SEO-настроек | Не всегда понимает кастомные параметры |
| Код в теме/плагине | Точный контроль canonical, noindex, логика по условиям | Нужно тестировать и поддерживать |
| robots.txt | Сокращает обход мусорных URL | Не удаляет уже индексированные страницы |
Если задача ограничивается чисткой типовых дублей, плагин часто быстрее. Если нужно управлять индексацией по бизнес-логике, лучше делать это кодом, а не надеяться на универсальную настройку.
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой. Нужны минимум три проверки.
- Откройте проблемный URL с параметром и посмотрите исходный код: canonical должен вести на чистую страницу, а для неиндексируемых страниц должен быть
noindex. - Проверьте ответ сервера через
curl -Iили DevTools, чтобы убедиться, что страница не отдаёт неожиданный редирект или ошибку. - В Search Console отправьте на переобход несколько URL и посмотрите, как меняется статус индексации.
Пример быстрой проверки заголовков:
curl -I "https://example.com/catalog/?sort=price"
Если вы используете noindex, убедитесь, что страница не закрыта от обхода раньше времени. Иначе поисковик может не увидеть директиву и продолжит держать URL в индексе дольше, чем нужно.
Частые ошибки и как их исправить
Закрыли всё в robots.txt и забыли про canonical
Это частая ошибка. В результате URL перестают обходиться, но уже попавшие в индекс страницы могут висеть месяцами. Исправление: для уже известных дублей сначала ставьте canonical/noindex, а robots.txt используйте как дополнительный слой.
Один canonical на все страницы фильтра
Если фильтр меняет смысл страницы и вы хотите индексировать отдельные комбинации, нельзя отправлять всё на главную категорию. Это обесценивает релевантные посадочные. Исправление: разделите фильтры на индексируемые и технические.
Дублируется canonical из плагина и темы
Иногда SEO-плагин уже выводит canonical, а тема добавляет второй тег. Поисковик может проигнорировать оба или выбрать не тот. Исправление: оставьте один источник canonical.
Ставят noindex на страницу, которая должна ранжироваться
Это случается после массовой настройки по шаблону. Исправление: проверьте список URL, где директива добавляется условно, и исключите посадочные страницы.
Безопасность и производительность: что не стоит делать
Не пытайтесь решать проблему массовыми редиректами всех параметров на главную. Это ломает аналитику, ухудшает UX и может создать цепочки редиректов. Также не стоит плодить отдельные правила для каждого query string без системы: через месяц вы сами не вспомните, почему один параметр закрыт, а другой нет.
Если фильтров много, держите логику в одном месте — в небольшом mu-plugin или отдельном мини-плагине. Так проще обновлять тему без потери правил и проще отключить изменения, если что-то пошло не так.
Для сайтов с высокой нагрузкой полезно ещё проверить, не генерируют ли фильтры тяжёлые запросы к базе. Иногда проблема индексации идёт вместе с проблемой производительности: поисковик обходит мусорные URL, а сервер тратит ресурсы на одинаковые выборки. В таком случае сначала оптимизируют фильтрацию, потом уже правят SEO-метки.
Если нужен более быстрый способ на типовом сайте, можно посмотреть в сторону инструментов чистки и удаления дублей, например Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином всё равно стоит проверить canonical и список реально индексируемых URL вручную.
Короткий чек-лист перед публикацией изменений
- Параметры разделены на технические и полезные.
- Для технических дублей есть canonical на чистую страницу.
- Для страниц без SEO-ценности стоит
noindex,follow. - В
robots.txtнет блокировки страниц, которые должны отдать canonical. - Нет двойного canonical из темы и SEO-плагина.
- Проверены исходный код, заголовки и статус страниц с параметрами.
- В Search Console отправлены примеры URL на повторную проверку.
Если после изменений в индексе всё ещё остаются старые URL, это не всегда ошибка настройки. Поисковику нужно время на переобход и переоценку сигнала. Но если canonical, robots и noindex согласованы между собой, процесс обычно идёт предсказуемо и без побочных эффектов.