Если в отчётах поисковиков появляются URL вида ?sort=price, ?filter_color=red, ?s=... или другие параметрические страницы, проблема обычно не в одной настройке, а в связке из шаблона, плагинов и правил индексации. Такие адреса быстро раздувают индекс, создают дубли и мешают понять, какие страницы реально должны ранжироваться.
Ниже — рабочая схема для WordPress: как диагностировать источник параметров, что закрывать через noindex, что лучше отдавать как канонический URL, а что вообще не должно попадать в обход индексации. Без магии и без выдуманных хуков.
Когда это действительно проблема
Сначала стоит убедиться, что речь именно о мусорных параметрах, а не о полезной функциональности. Не каждый URL с query string нужно запрещать. Например, пагинация, UTM-метки для аналитики или служебные параметры плагинов могут быть допустимы, если они не создают отдельный контент.
Типичные симптомы
- в индексе есть десятки или сотни URL с одинаковым контентом, но разными параметрами;
- в Search Console или аналогичном инструменте появляются страницы с сортировкой, фильтрами, внутренним поиском;
- в логах видно, что боты часто заходят на адреса с параметрами, а полезные страницы сканируются реже;
- каноникал у параметрических страниц указывает на саму себя или на неверный URL;
- в sitemap попадают адреса, которые не должны индексироваться.
Что обычно создаёт такие URL
- фильтры каталога или архива на AJAX и без AJAX;
- сортировка по цене, дате, популярности;
- внутренний поиск WordPress с параметром
?s=; - страницы с UTM и рекламными метками;
- плагины, которые добавляют параметры для трекинга, языков или состояния интерфейса.
Диагностика: откуда именно берутся дубли
Перед правками нужно понять, кто генерирует URL и как они ведут себя в HTML. Это важно: иногда достаточно поправить шаблон, а иногда нужен набор мер — от noindex до фильтрации sitemap.
Проверьте исходный HTML страницы
Откройте проблемный URL и посмотрите, что отдает <link rel="canonical"> и есть ли meta robots. Если каноникал указывает на параметрический адрес, поисковик получает сигнал индексировать именно его.
<link rel="canonical" href="https://example.com/category/shoes/">
<meta name="robots" content="noindex,follow">Если на параметрической странице стоит только canonical на чистый URL, это уже лучше. Но для поисковиков, которые активно обходят такие страницы, часто полезно добавить noindex,follow, если контент не должен ранжироваться вообще.
Посмотрите, какие параметры реально индексируются
В поисковой консоли или через site:-поиск можно быстро увидеть, какие шаблоны URL попали в индекс. Отдельно проверьте:
- параметры сортировки;
- параметры фильтров;
- внутренний поиск;
- пагинацию с параметрами;
- служебные параметры плагинов.
Если один и тот же контент доступен по чистому URL и по параметрическому, это уже кандидат на каноникал и запрет индексации.
Что делать: рабочая схема без поломки сайта
Лучше не пытаться решить всё одним способом. Для WordPress обычно работает комбинация из трёх уровней: убрать генерацию лишних URL, закрыть их от индексации на уровне шаблона и не отдавать их в sitemap.
1. Уберите генерацию лишних параметров там, где это возможно
Если фильтр или сортировка не нужны для SEO, не делайте их отдельными индексируемыми страницами. Для интерфейсных параметров лучше использовать JavaScript без изменения URL или хранить состояние в history.replaceState(), если это уместно для проекта.
Если параметр нужен только для фронтенда, но не должен создавать отдельный документ, не добавляйте его в ссылки внутри контента и не генерируйте его в меню, хлебных крошках и блоках перелинковки.
2. Закройте параметрические страницы через noindex
Для страниц поиска, сортировки и большинства фильтров безопаснее всего отдавать noindex,follow. Это оставляет боту возможность пройти по ссылкам, но не просит индексировать сам URL.
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
return;
}
if (!empty($_GET['sort']) || !empty($_GET['filter_color']) || !empty($_GET['filter_size'])) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Это пример для типовых параметров. В реальном проекте список нужно подстроить под конкретные query vars. Если фильтры создаёт плагин, лучше использовать его штатные настройки или фильтры, а не лепить всё в wp_head.
3. Укажите канонический URL на чистую страницу
Если параметрическая страница по сути дублирует основной архив или запись, canonical должен вести на основной адрес без параметров. Это особенно важно для сортировки и UTM-меток.
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_admin() || empty($canonical)) {
return $canonical;
}
if (!empty($_GET['utm_source']) || !empty($_GET['utm_medium']) || !empty($_GET['sort'])) {
return remove_query_arg(array('utm_source', 'utm_medium', 'utm_campaign', 'sort'));
}
return $canonical;
}, 10, 2);Здесь важно не переусердствовать: не все параметры можно просто выкинуть. Если параметр меняет контент страницы, canonical на чистый URL может быть неверным. Тогда лучше закрывать страницу от индексации, а не пытаться объявить её дублем.
4. Не включайте мусорные URL в sitemap
Если параметрические адреса попадают в sitemap, поисковик получает лишний сигнал, что их стоит сканировать. Проверьте настройки SEO-плагина и генератора sitemap: в карту сайта должны попадать только канонические страницы.
Если sitemap формируется кастомно, исключайте URL с query string на уровне генерации. Для этого не нужно городить сложную логику — достаточно не добавлять адреса, содержащие ?.
function my_sitemap_url_allowed($url) {
return strpos($url, '?') === false;
}Это не готовый фильтр WordPress, а простой принцип проверки перед выводом. В реальном коде применяйте его в том месте, где формируется список URL для карты сайта.
Сравнение подходов
| Подход | Когда подходит | Минус |
|---|---|---|
| Плагин SEO | Если нужно быстро закрыть поиск, архивы и часть параметров без кода | Не всегда умеет разрулить кастомные query vars |
| Код в теме или mu-plugin | Если параметры создаёт ваш шаблон или кастомный плагин | Нужно аккуратно тестировать после обновлений |
| Комбинация | Если есть и SEO-плагин, и отдельный фильтр/каталог | Нужно следить, чтобы правила не конфликтовали |
Если у вас уже стоит плагин для технической очистки сайта, например Clearfy Pro, часть задач по дублям и служебным страницам можно закрыть через его настройки. Но кастомные параметры фильтров и сортировки всё равно часто требуют точечной доработки.
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой страницы. Нужно посмотреть, что реально отдаёт сервер и как это видит бот.
Что проверить вручную
- открывается ли параметрический URL без ошибок;
- есть ли на нём
noindex,follow; - каноникал указывает на чистый URL;
- страница не попала в sitemap;
- внутренние ссылки не ведут массово на параметрические адреса.
Что проверить через инструменты
- просмотр исходного кода страницы;
- отчёт по индексированию в Search Console;
- серверные логи — уменьшается ли число обходов мусорных URL;
- кэш-плагин — не кеширует ли он параметрические страницы как отдельные объекты без необходимости.
Если после изменения правил URL всё ещё индексируется, проверьте, не отдаёт ли страница 200 OK без noindex из-за кэша. Иногда проблема не в коде, а в том, что старый HTML продолжает раздаваться из кеша.
Частые ошибки и как их исправить
Ставят noindex, но оставляют URL в sitemap
Это создаёт противоречивые сигналы. Если страница не должна индексироваться, она не должна быть в карте сайта. Исправление простое: исключить URL на этапе генерации sitemap или в настройках SEO-плагина.
Используют canonical вместо noindex для страниц с другим контентом
Если фильтр реально меняет набор товаров, записей или материалов, canonical на чистую страницу может быть спорным. В таком случае лучше закрыть страницу от индексации, а не пытаться объявить её дублем.
Закрывают всё через robots.txt
Disallow в robots.txt не заменяет noindex. Если URL уже известен поисковику, он может остаться в индексе без содержимого. Для дублей и параметров чаще нужен именно noindex или корректный canonical.
Не учитывают кэш
После правок старые заголовки и мета-теги могут продолжать отдаваться из кэша. Очистите серверный кэш, кэш плагина и, если есть, CDN. Иначе вы будете проверять уже не тот HTML.
Безопасность и производительность
Чем больше параметров принимает сайт, тем выше риск мусорных обходов и лишней нагрузки. Это не только SEO-проблема. Параметрические страницы могут раздувать количество кешируемых вариантов и нагружать базу данных, особенно если фильтры строятся на сложных запросах.
- не давайте ботам индексировать внутренний поиск;
- ограничьте число параметров, которые реально влияют на контент;
- не генерируйте отдельные URL для интерфейсных состояний;
- проверяйте, не создаёт ли фильтр тяжёлые запросы к базе;
- если используете AJAX-фильтрацию, следите, чтобы она не ломала canonical и заголовки ответа.
Если проект большой и техническая чистка нужна регулярно, имеет смысл держать правила индексации в одном месте: в SEO-плагине, в mu-plugin или в отдельном модуле темы. Тогда при обновлении шаблона не придётся заново искать, где именно спрятался очередной параметр.
Короткий чек-лист перед публикацией изменений
- параметрические URL определены и перечислены;
- для мусорных страниц добавлен
noindex,follow; - canonical ведёт на чистый URL, если это действительно дубль;
- лишние URL исключены из sitemap;
- кэш очищен на всех уровнях;
- проверка в исходном коде показывает нужные мета-теги;
- в поисковой консоли нет новых сигналов о массовых дублях.
Если задача сводится не только к индексации, но и к общей технической чистке сайта, удобно сначала убрать дубли и служебные страницы, а уже потом настраивать фильтры и sitemap. Так проще понять, что именно даёт лишние URL и где ломается логика индексации.