URL с параметрами — типичная причина мусора в индексе: сортировки, фильтры, UTM-метки, внутренний поиск, служебные параметры плагинов. На сайте это выглядит безобидно, но поисковик может начать обходить десятки почти одинаковых страниц, а в отчётах появятся дубли и странные канонические URL.
Задача здесь не в том, чтобы «запретить всё подряд», а в том, чтобы отделить полезные параметры от технических и закрыть только то, что реально не должно индексироваться.
Когда проблема уже есть
Сначала проверьте, что именно попало в индекс. Обычно сигналов несколько:
- в Google Search Console в отчёте по страницам видны URL с
?sort=,?filter=,?s=или UTM-параметрами; - в поиске по сайту находятся дубли одной и той же страницы с разными параметрами;
- в логах или аналитике заметно, что бот часто ходит по техническим URL;
- на странице есть один и тот же контент, но несколько адресов с разными query string.
Что важно не перепутать
Параметр сам по себе не всегда вреден. Например, ?s= для внутреннего поиска почти всегда не нужен в индексе, а вот параметры фильтрации в каталоге могут быть полезны, если они создают отдельные посадочные страницы и у них есть спрос. Поэтому решение лучше принимать по типу параметра, а не по факту наличия знака вопроса в URL.
Какой способ выбрать: robots, noindex или canonical
Для разных сценариев подходят разные инструменты. Ниже — короткое сравнение.
| Подход | Когда использовать | Минус |
|---|---|---|
noindex | Для страниц, которые должны открываться, но не индексироваться | Бот должен сначала увидеть страницу |
canonical | Если есть основная версия страницы и её дубли с параметрами | Не всегда срабатывает мгновенно |
robots.txt | Для явного ограничения обхода технических URL | Не решает проблему индексации уже известных URL |
| Кодом на уровне шаблона | Если нужен точечный контроль по параметрам | Нужно аккуратно тестировать |
На практике чаще всего работает связка: для мусорных параметров — noindex или canonical на чистую URL, для совсем технических путей — запрет обхода в robots.txt.
Пошаговое решение для WordPress
1. Определите список параметров
Сначала выпишите, какие параметры реально встречаются на сайте. Это могут быть:
s— поиск;sort,orderby— сортировка;filter,color,size— фильтры;utm_source,utm_medium,utm_campaign— метки аналитики;- служебные параметры плагинов, если они есть.
Дальше решите: параметр нужен только для работы интерфейса или он должен иметь отдельную SEO-ценность. Если SEO-ценности нет, его лучше закрыть.
2. Добавьте canonical на чистую URL
Если параметр не меняет смысл страницы, canonical часто достаточно. В WordPress это можно сделать через фильтр wpseo_canonical, если используется Yoast SEO, либо через свой код в теме/плагине. Ниже пример для общего случая: если в URL есть UTM-метки, canonical указывает на чистую страницу.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_admin() || ! is_singular()) {
return $canonical;
}
$tracking_params = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content');
foreach ($tracking_params as $param) {
if (isset($_GET[$param])) {
return get_permalink($post);
}
}
return $canonical;
}, 10, 2);Этот вариант не трогает сам контент, а только подсказывает поисковику основную версию. Для UTM это обычно правильнее, чем плодить отдельные индексируемые URL.
3. Закройте технические страницы через noindex
Если речь о внутреннем поиске, страницах сортировки или фильтрах без самостоятельной ценности, лучше ставить noindex,follow. Для этого можно вывести мета-тег в <head> на основе параметра:
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$noindex_params = array('s', 'sort', 'orderby');
foreach ($noindex_params as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
break;
}
}
}, 1);Если у вас уже стоит SEO-плагин, проверьте, не дублируете ли вы его настройки. Два разных источника robots-меток часто создают конфликт, и в итоге поисковик видит не то, что вы ожидали.
4. Ограничьте обход в robots.txt только для явного мусора
В robots.txt имеет смысл закрывать не параметры, а конкретные пути, которые генерируют технический шум. Например, внутренний поиск или служебные разделы плагинов. Для параметров robots.txt работает хуже, потому что поисковик может не увидеть контент страницы и не понять, что именно вы хотите исключить.
User-agent: *
Disallow: /?s=
Disallow: /search/
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.phpСтрока Disallow: /?s= не универсальна для всех ботов и не заменяет noindex. Используйте её как дополнительную меру, а не как единственную.
Если нужен точечный контроль по параметрам
Иногда на сайте есть сложная логика: часть параметров можно индексировать, часть — нет. Тогда удобнее обработать это в шаблоне или через мини-плагин. Ниже пример, который ставит noindex для UTM и сортировки, но не мешает обычным страницам.
<?php
/**
* Plugin Name: Parameter Noindex Helper
*/
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$blocked = array('utm_source', 'utm_medium', 'utm_campaign', 'sort', 'orderby');
$has_blocked = false;
foreach ($blocked as $param) {
if (isset($_GET[$param]) && $_GET[$param] !== '') {
$has_blocked = true;
break;
}
}
if ($has_blocked) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Если вы работаете с темой, а не с отдельным плагином, лучше вынести такую логику в mu-plugin. Тогда она не исчезнет при смене темы и не потеряется после обновления.
Как проверить, что решение сработало
Проверка нужна не только в браузере. Смотрите на три уровня:
- HTML страницы — в исходнике должен быть нужный
canonicalилиmeta robots; - HTTP-ответ — если вы используете заголовок
X-Robots-Tag, убедитесь, что он реально отдается; - Search Console — после переобхода URL должен сменить статус, а в отчётах по страницам уменьшится число мусорных адресов.
Проверить canonical можно быстро через браузер или командой:
curl -I "https://example.com/page/?utm_source=test"Если вы выводите robots-метку в HTML, откройте исходный код страницы и найдите noindex. Если используете SEO-плагин, проверьте, не переопределяет ли он ваш код своими настройками.
Частые ошибки и как их исправить
Закрыли весь сайт вместо отдельных URL
Такое случается, когда правило написано слишком широко: например, проверяется только наличие $_GET без списка параметров. В результате под noindex попадают и полезные страницы с UTM, и обычные страницы, если на них есть любой query string. Исправление простое: проверяйте только конкретные параметры.
Использовали robots.txt вместо noindex
Если страница уже известна поисковику, запрет в robots.txt не гарантирует её исчезновение из индекса. Для удаления из индекса нужен либо noindex, либо canonical на основную версию, либо 301-редирект, если страница вообще не нужна.
Поставили canonical на несуществующую или неправильную URL
Canonical должен вести на реальную каноническую страницу. Если он указывает на 404, на другой язык, на страницу с редиректом или на URL с ошибкой в слэше, поисковик может проигнорировать подсказку.
Смешали логику SEO-плагина и самописного кода
Если Yoast SEO, Rank Math или другой плагин уже управляет canonical и robots, ваш код может конфликтовать с его настройками. Перед внедрением проверьте, где именно формируется мета-тег, и не дублируйте его в двух местах.
Что делать с UTM-метками и аналитикой
UTM-параметры нужны для аналитики, но не для индексации. Их обычно не закрывают через редирект, потому что это ломает атрибуцию. Правильнее оставить URL рабочим, но указать canonical на чистую страницу и не создавать отдельные индексируемые версии.
Если у вас много рекламного трафика, дополнительно проверьте, не появляются ли UTM-URL в внутренних ссылках. Это уже ошибка шаблона или CMS, а не SEO-настройки. Внутренние ссылки должны вести на чистые адреса без меток.
Практические советы по безопасности и производительности
- Не добавляйте обработку параметров в каждый запрос без необходимости. Проверяйте только те страницы, где это реально нужно.
- Не храните список параметров в нескольких местах. Лучше один массив в mu-plugin или в отдельном небольшом плагине.
- Если сайт большой, тестируйте изменения сначала на staging-окружении.
- После внедрения проверьте кеш: иногда старые версии страниц продолжают отдавать прежний
canonicalили robots-метку.
Если нужно быстро навести порядок в технических дублях и мета-данных, можно посмотреть в сторону Clearfy Pro: у него есть инструменты для чистки типовых SEO-дублей и служебных элементов, но даже с таким плагином логику параметров всё равно стоит проверять вручную, а не включать вслепую. Подробности есть на странице плагина.
В итоге рабочая схема обычно выглядит так: полезные параметры оставляем, мусорные закрываем через noindex или canonical, технические пути ограничиваем в robots.txt, а результат проверяем в исходнике и в Search Console. Это не самая эффектная настройка, но именно она обычно убирает лишний шум без побочных эффектов.