Проблема с URL вида ?sort=price, ?filter_color=blue или ?utm_source=... обычно всплывает не сразу. Сайт начинает плодить десятки почти одинаковых страниц, а в индексе оказываются дубли, которые не несут самостоятельной ценности. Для WordPress это особенно заметно на каталогах, архивах, страницах поиска и любых страницах с фильтрами.
Ниже разберём, как закрыть такие URL от индексации аккуратно: без поломки канонических адресов, без случайного закрытия важных страниц и без лишней нагрузки на сервер.
Когда проблема уже есть: что смотреть в первую очередь
Сначала нужно понять, какие именно параметры создают мусорные URL. Не все query string одинаково вредны. Одни нужны для аналитики, другие — для сортировки, третьи — для фильтров, а четвёртые вообще не должны попадать в индекс.
Признаки, что индексация расползается
- в Search Console растёт число страниц с параметрами;
- в выдаче появляются URL с
?sort=,?filter=,?page=и похожими хвостами; - одна и та же страница доступна по нескольким адресам;
- в логах или аналитике видно, что боты часто ходят по фильтрам и сортировкам;
- канонический URL указывает на одну страницу, а в индексе сидят её вариации.
Если у вас уже подключён SEO-плагин, проверьте, не создаёт ли он собственные правила для архивов и параметров. Иногда проблему решает настройка шаблона noindex, но в ряде случаев нужен код на уровне темы или мини-плагина.
Какие URL закрывать, а какие оставить
Ошибка многих сайтов — закрывать всё подряд. Это опасно: можно случайно убрать из индекса полезные посадочные страницы, которые реально приводят трафик. Сначала разделите параметры на группы.
| Тип параметра | Пример | Что делать |
|---|---|---|
| Аналитика | utm_source, utm_campaign | Не индексировать, обычно не нужны в поиске |
| Сортировка | sort=price | Чаще всего закрывать от индексации |
| Фильтры | filter_color=blue | Закрывать, если это не отдельные SEO-страницы |
| Пагинация | paged=2 | Не закрывать автоматически без проверки логики архива |
| Поиск по сайту | ?s=запрос | Обычно закрывать от индексации |
Если фильтрованные страницы у вас специально оптимизированы под SEO, их нельзя бездумно закрывать. В таком случае лучше управлять индексацией точечно: через каноникал, мета-тег robots и правила для конкретных шаблонов.
Пошаговое решение: закрываем параметры от индексации
Надёжный вариант — добавить логику в тему или в небольшой must-use плагин. Тогда вы контролируете, какие параметры переводят страницу в noindex, а какие нет.
Шаг 1. Определяем список параметров
Начните с параметров, которые точно не должны индексироваться: UTM-метки, сортировки, служебные фильтры, внутренний поиск. Для них можно поставить noindex,follow и канонический URL без параметров.
Шаг 2. Добавляем мета-тег robots и canonical
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$blocked_params = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'sort', 'filter_color', 'filter_size', 's');
$has_blocked_param = false;
foreach ($blocked_params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
$has_blocked_param = true;
break;
}
}
if (!$has_blocked_param) {
return;
}
echo '<meta name="robots" content="noindex,follow" />' . "\n";
$canonical = remove_query_arg($blocked_params, home_url(add_query_arg(array(), $GLOBALS['wp']->request)));
echo '<link rel="canonical" href="' . esc_url($canonical) . '" />' . "\n";
}, 1);Этот пример рабочий по логике, но его нужно адаптировать под ваш сайт. Если у вас сложные фильтры, не пытайтесь вычислять каноникал через $GLOBALS['wp']->request вслепую. Лучше брать текущий URL более предсказуемым способом и тестировать на конкретных шаблонах.
Шаг 3. Закрываем поисковые страницы
Страницы внутреннего поиска почти всегда создают мусор. Для них лучше поставить noindex на уровне шаблона, если SEO-плагин не делает это сам.
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Если поиск у вас используется как полноценная посадочная страница, а не технический инструмент, это правило нужно пересматривать. Но для большинства сайтов индексация поиска только раздувает мусор.
Альтернативы: плагин, код или серверное правило
Способ зависит от того, насколько часто у вас меняются параметры и кто поддерживает сайт. Иногда удобнее решить задачу через SEO-плагин, иногда — через код, а иногда — через правила на уровне сервера.
| Подход | Плюсы | Минусы |
|---|---|---|
| SEO-плагин | Быстро, без кода, удобно для редактора | Не всегда хватает гибкости для сложных фильтров |
| Код в теме или mu-plugin | Точный контроль, можно учесть логику сайта | Нужно тестировать и сопровождать |
| Серверные правила | Полезно для массовых служебных URL | Легко ошибиться и закрыть лишнее |
Если вы уже используете Clearfy Pro для чистки сайта и управления дублями, часть задач можно закрыть через его настройки. Но для нестандартных фильтров и параметров всё равно часто нужен код или отдельная логика в шаблоне.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой страницы. Нужно убедиться, что поисковый робот видит именно тот вариант, который вы ожидаете.
- откройте URL с параметром и проверьте исходный код страницы;
- убедитесь, что есть
<meta name="robots" content="noindex,follow" />; - проверьте, что canonical указывает на чистый URL без параметров;
- посмотрите отчёт в Google Search Console по страницам с параметрами;
- сравните, не исчезли ли из индекса нужные посадочные страницы.
Для быстрой проверки можно использовать curl:
curl -I "https://example.com/catalog/?sort=price"
Здесь важно не только наличие ответа 200, но и то, как страница отдаёт мета-данные в HTML. Заголовки сами по себе не покажут canonical, поэтому дополнительно смотрите исходник.
Частые ошибки и как их исправить
Закрыли все параметры через robots.txt
Это грубая ошибка. Если запретить обход слишком широко, поисковик может перестать видеть canonical и не поймёт, что делать с дублями. Для параметров на уже доступных страницах чаще нужен noindex, а не запрет сканирования.
Поставили noindex на нужные посадочные страницы
Такое случается, когда фильтрованные URL используются как SEO-страницы. Решение — исключить конкретные шаблоны или набор параметров из общей логики и закрывать только технические комбинации.
Каноникал ведёт на неправильный адрес
Обычно это происходит, если URL собирают вручную и забывают про слеши, язык, пагинацию или дополнительные правила ЧПУ. Проверяйте canonical на реальных страницах, а не по одному примеру.
Параметры продолжают индексироваться из-за внутренних ссылок
Если сайт массово ссылается на URL с параметрами, поисковик будет их находить снова. Исправьте генерацию ссылок в шаблоне, а не только мета-теги. Иногда проблема сидит в меню, фильтре или JS-скрипте.
Практические советы по безопасности и производительности
Чем меньше мусорных URL вы отдаёте боту, тем меньше лишней работы делает сервер. Это не магическая оптимизация, но на больших каталогах эффект заметен в логах и краулинге.
- не генерируйте фильтры, если они не используются в реальной навигации;
- не храните логику индексации только в одном плагине без резервного плана;
- проверяйте, что код не ломает админку и REST-запросы;
- не закрывайте от индексации страницы, которые приносят трафик по низкочастотным запросам;
- если правите тему, выносите логику в дочернюю тему или mu-plugin, чтобы не потерять изменения при обновлении.
Если задача сводится не только к закрытию дублей, но и к общей чистке SEO-ошибок, имеет смысл посмотреть в сторону инструментов вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но и в этом случае сначала проверьте, какие именно правила он добавляет на вашем сайте, чтобы не получить конфликт с кастомным кодом.
Когда лучше не закрывать параметр, а менять структуру
Если параметр стал частью основной навигации и поисковый трафик уже идёт на такие адреса, простое noindex может быть не лучшим вариантом. Иногда правильнее:
- сделать отдельную посадочную страницу без параметров;
- перевести важный фильтр в статический URL;
- оставить параметр только для интерфейса, а не для индексации;
- перенести SEO-ценность на чистый адрес через 301, если это действительно замена страницы.
Такой подход требует аккуратной миграции и проверки аналитики. Но он лучше, чем бесконечно бороться с параметрами, которые сайт сам же продолжает плодить.