Страницы с параметрами в WordPress обычно появляются не из-за ошибки CMS, а из-за фильтров, сортировок, UTM-меток, поиска по сайту и технических страниц плагинов. Проблема в том, что поисковик видит десятки URL с одинаковым или почти одинаковым содержимым, а вы получаете дубли, размывание веса и лишний мусор в индексе.
Ниже разберём, как закрывать такие URL аккуратно: без поломки навигации, без лишнего запрета в robots.txt и без ситуации, когда нужные страницы внезапно исчезают из поиска.
Когда это действительно проблема
Сначала стоит понять, что именно у вас индексируется. Не все URL с параметрами нужно закрывать. Например, UTM-метки сами по себе обычно не должны попадать в индекс, а вот страницы фильтра каталога или поиска могут быть полезны пользователю, но вредны для SEO, если создают бесконечные комбинации.
Типичные сценарии
?utm_source=...,?utm_medium=...и другие маркетинговые метки;?sort=price,?orderby=dateи похожие сортировки;?s=для внутреннего поиска;?filter_color=,?brand=,?size=и другие фильтры;- служебные параметры плагинов, которые меняют только представление страницы.
Если такие URL уже попали в индекс, простого удаления через Search Console обычно мало. Нужно изменить поведение страницы: отдать корректный noindex, задать канонический URL и не плодить новые варианты.
Диагностика: что проверить перед правкой
Перед тем как что-то закрывать, посмотрите, как именно WordPress и тема сейчас отдают эти страницы. Частая ошибка — закрыть всё подряд через robots.txt, а потом обнаружить, что поисковик не может увидеть канонический адрес и продолжает держать в индексе старые версии.
- Откройте проблемный URL с параметром.
- Проверьте исходный код страницы: есть ли
meta robotsиlink rel="canonical". - Посмотрите HTTP-ответ: не отдаются ли случайно
noindexили редиректы на неподходящий адрес. - Сравните контент страницы с параметром и без него.
- Проверьте, не создаёт ли SEO-плагин отдельные правила для архивов, поиска или пагинации.
Если у вас есть доступ к консоли, полезно быстро проверить заголовки:
curl -I "https://example.com/shop/?sort=price"Для HTML-страницы важнее не сам статус 200, а наличие канонического URL и мета-тега индексации. Если страница должна быть закрыта, но при этом доступна пользователю, обычно лучше использовать noindex,follow, а не блокировку в robots.
Как закрыть страницы с параметрами: рабочие варианты
Подход зависит от того, что именно вы хотите сделать. Ниже — три практических варианта, которые реально используются в WordPress.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Нужно быстро закрыть шаблонные типы страниц | Меньше кода, удобно для редактора | Не всегда гибко для отдельных параметров |
| Код в теме или мини-плагине | Нужна точная логика по параметрам | Полный контроль, можно учесть исключения | Нужно аккуратно тестировать |
robots.txt | Нужно лишь снизить обход мусорных URL | Просто внедрить | Не гарантирует удаление из индекса |
Вариант 1. Добавить noindex для страниц с параметрами
Если параметр не должен индексироваться, но страница должна открываться пользователю, добавьте noindex,follow. В WordPress это можно сделать через фильтр wp_robots.
add_filter('wp_robots', function ($robots) {
$blocked_params = array('sort', 'orderby', 'filter_color', 'filter_size', 's');
foreach ($blocked_params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
});Этот вариант удобен, если у вас есть понятный список параметров. Не стоит проверять вообще все $_GET подряд: часть параметров может быть безопасной и полезной для индексации, например, служебные параметры авторизации или отслеживания, которые вы уже отдельно обрабатываете.
Вариант 2. Задать canonical на чистый URL
Если страница с параметром — это та же самая сущность, но с изменённым отображением, canonical должен указывать на базовый адрес без параметров. Это особенно важно для сортировок и UTM-меток.
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_singular() || is_page()) {
return $canonical;
}
if (!empty($_GET)) {
$url = home_url(add_query_arg(array(), $GLOBALS['wp']->request));
return remove_query_arg(array_keys($_GET), $url);
}
return $canonical;
}, 10, 2);На практике canonical лучше не усложнять, если SEO-плагин уже умеет делать это корректно. Если вы используете Yoast SEO, Rank Math или похожий плагин, сначала проверьте их настройки, а код подключайте только для нестандартных случаев.
Вариант 3. Запретить генерацию мусорных URL на уровне шаблона
Иногда проблема не в индексации, а в том, что тема сама строит ссылки с параметрами и плодит дубли. Тогда нужно исправлять генерацию ссылок, а не только мета-теги. Например, при выводе сортировки можно сохранять только нужный параметр и убирать всё лишнее.
$base_url = remove_query_arg(array('utm_source', 'utm_medium', 'utm_campaign', 'fbclid'));
$sort_url = add_query_arg('sort', 'price', $base_url);
echo esc_url($sort_url);Такой подход особенно полезен для меню фильтров, хлебных крошек и кнопок сортировки. Чем меньше лишних параметров в ссылках, тем меньше шансов получить дубли в индексе.
Что делать с robots.txt и почему это не основное решение
robots.txt полезен для снижения обхода, но не для гарантированного исключения из индекса. Если URL уже известен поисковику, запрет в robots может даже помешать ему увидеть noindex или canonical. Поэтому блокируйте в robots только то, что действительно нужно не сканировать, и не используйте его как единственный способ убрать дубли.
Например, можно ограничить обход технических параметров, если они создают большое количество мусорных комбинаций:
User-agent: *
Disallow: /*?sort=
Disallow: /*?orderby=
Disallow: /*?filter_Но если вы уже ставите noindex на таких страницах, сначала проверьте, не мешает ли robots увидеть этот тег. Для индексации важнее корректная HTML-разметка, чем грубый запрет обхода.
Пошаговое решение без лишнего риска
- Составьте список параметров, которые реально создают дубли.
- Определите, какие из них должны оставаться доступными пользователю, но не индексироваться.
- Добавьте
noindex,followдля нужных URL. - Задайте canonical на чистую версию страницы.
- Уберите лишние параметры из внутренних ссылок.
- Проверьте, не конфликтует ли это с SEO-плагином или кэшем.
Если у вас много шаблонных страниц, удобнее вынести логику в мини-плагин, а не в functions.php. Тогда при смене темы правила не потеряются.
Как проверить, что всё сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужны конкретные признаки, что страница стала обрабатываться правильно.
- в исходном коде есть
meta name="robots" content="noindex,follow"; canonicalуказывает на URL без лишних параметров;- внутренние ссылки больше не добавляют мусорные query string;
- страница остаётся доступной пользователю, но не претендует на отдельную индексацию;
- в Search Console уменьшается число URL с параметрами в отчётах по страницам.
Проверить HTML можно через просмотр исходника или через curl:
curl -s "https://example.com/catalog/?sort=price" | grep -iE "robots|canonical"Если canonical всё ещё содержит параметры, значит правило не сработало или его переопределяет SEO-плагин. Если noindex отсутствует, проверьте, не отрабатывает ли условие в коде слишком узко.
Частые ошибки и как их исправить
Закрыли URL в robots.txt и ждёте удаления из индекса
Это самая частая ошибка. Robots только ограничивает обход, но не всегда удаляет уже известный URL. Исправление: вернуть доступ к странице, добавить noindex и canonical, затем дождаться переобхода.
Ставят noindex на все страницы с вопросительным знаком
Так можно случайно закрыть полезные URL, например страницы поиска, фильтрации по категории или служебные ссылки, которые должны работать для пользователей. Исправление: проверять только конкретные параметры, а не сам факт наличия $_GET.
Canonical указывает на неправильный адрес
Иногда canonical строится с ошибкой и ведёт на несуществующую или уже закрытую страницу. Исправление: сравнить адрес в исходнике с реальным каноническим URL и убрать лишние параметры через remove_query_arg().
Кэш отдаёт старую версию страницы
После правки HTML может продолжать отдаваться старая мета-разметка из кэша. Исправление: очистить кэш плагина, серверный кэш и CDN, затем перепроверить исходник.
Безопасность и производительность
Работа с параметрами — это не только SEO. Любой код, который читает $_GET, должен быть предсказуемым. Не подставляйте параметры напрямую в SQL, HTML или логику редиректов без проверки. Для вывода используйте esc_url(), esc_html() и sanitize_text_field(), если параметр нужен в обработке.
Если параметров много, не делайте тяжёлые запросы к базе для каждой комбинации. Лучше ограничить список допустимых фильтров и не генерировать страницы, которые не несут ценности. Это уменьшит нагрузку на сервер и сократит количество мусорных URL.
Если вам нужен более широкий набор инструментов для чистки дублей и технической оптимизации, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно параметры вы закрываете и почему.
Когда лучше не закрывать страницу полностью
Если параметр меняет не только сортировку, но и смысл страницы для пользователя, не спешите ставить жёсткий запрет. Иногда лучше оставить страницу открытой, но привести её к единому каноническому виду и убрать лишние комбинации. Это касается, например, некоторых фильтров в каталогах, где пользователи реально ищут товарную группу по признакам.
Практический критерий простой: если URL с параметром не даёт уникальной ценности и создаёт дубли, закрывайте его от индексации. Если же он нужен как рабочая навигация, сначала нормализуйте canonical и внутренние ссылки, а уже потом решайте, нужен ли noindex.