Если на сайте уже появились URL вида ?s=, ?orderby=, ?filter= или другие служебные параметры, поисковики часто начинают считать их отдельными страницами. В результате в индексе копятся дубли, а краулинговый бюджет уходит на мусорные адреса вместо нормальных материалов.
Проблема обычно не в одном параметре, а в том, что WordPress, тема и плагины одновременно генерируют несколько вариантов одной и той же страницы. Ниже разберём, как это диагностировать, чем закрывать индексацию и как не сломать поиск по сайту и внутренние фильтры.
Как понять, что проблема именно в параметрах URL
Сначала проверьте, какие адреса уже попали в поиск. В Google Search Console и Яндекс Вебмастере ищите страницы с параметрами в отчётах по индексированию и страницам. Если в выдаче встречаются варианты одного и того же контента с разными query string, это уже сигнал.
Типичные признаки:
- в индексе есть URL с
?s=, хотя поиск по сайту не должен индексироваться; - страницы сортировки, фильтров или пагинации открываются по нескольким адресам;
- в логах обхода много запросов к URL, которые не несут уникального контента;
- в sitemap таких адресов нет, но поисковик всё равно их находит по внутренним ссылкам.
Какие параметры чаще всего создают дубли
На практике чаще всего мешают:
s— поиск по сайту;orderby,order— сортировка;filter_*— фильтры в каталогах и списках;replytocom— старый параметр комментариев;- служебные UTM-метки, если они попадают в индекс через внутренние ссылки или редиректы.
Не все параметры нужно запрещать одинаково. Поиск по сайту и фильтры часто должны работать для пользователя, но не обязаны индексироваться. А вот некоторые служебные параметры лучше ещё и нормализовать редиректом.
Что выбрать: robots, meta robots или редирект
Универсального одного способа нет. Для разных сценариев работают разные инструменты.
| Подход | Когда использовать | Плюс | Минус |
|---|---|---|---|
noindex, follow | Для страниц поиска, сортировки, фильтров | Страница доступна пользователю, но не должна попадать в индекс | Поисковик должен ещё раз обойти страницу, чтобы увидеть мета-тег |
robots.txt | Для явного ограничения обхода служебных URL | Снижает нагрузку на обход | Не гарантирует удаление уже проиндексированных URL |
| 301-редирект | Когда параметр не нужен и есть канонический URL | Чистит адреса и передаёт сигнал на основной URL | Нельзя делать редирект на всё подряд, можно сломать функциональность |
Если параметр нужен для работы интерфейса, но не для поиска, обычно достаточно noindex, follow плюс корректный canonical. Если параметр вообще лишний, лучше убрать его редиректом или переписать логику генерации ссылок.
Пошаговое решение для WordPress
1. Закройте поиск по сайту от индексации
Страница поиска почти всегда должна быть закрыта. Она не даёт уникального контента и быстро плодит мусорные URL.
add_filter('wp_robots', function ($robots) {
if (is_search()) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});Этот вариант работает через стандартный фильтр wp_robots и не требует правки шаблонов. Если тема уже выводит свои meta robots, проверьте, не конфликтует ли она с этим фильтром.
2. Добавьте noindex для страниц с параметрами
Если у вас есть конкретные параметры, которые не должны индексироваться, можно отлавливать их на уровне template_redirect или через фильтр robots. Для большинства сайтов удобнее второй вариант: он не ломает вывод страницы, но даёт поисковику понятный сигнал.
add_filter('wp_robots', function ($robots) {
$params = array('orderby', 'order', 'filter', 'replytocom');
foreach ($params as $param) {
if (isset($_GET[$param])) {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
});Если у вас фильтры идут с префиксом, например filter_color или filter_size, проверяйте не точное имя, а маску через strpos().
3. Нормализуйте канонический URL
Для страниц с параметрами важно, чтобы canonical указывал на чистый адрес без мусорных query string. Во многих темах это уже сделано, но лучше проверить вручную.
add_filter('get_canonical_url', function ($canonical, $post) {
if (is_search()) {
return home_url('/');
}
if (!empty($_GET)) {
$canonical = remove_query_arg(array_keys($_GET), home_url(add_query_arg(array(), $GLOBALS['wp']->request)));
}
return $canonical;
}, 10, 2);Этот пример нужно использовать аккуратно. Если у вас сложная логика фильтров, не удаляйте все параметры подряд: часть из них может быть нужна для корректной работы страницы. В таком случае лучше задавать canonical вручную в шаблоне или через SEO-плагин.
4. Уберите лишние параметры из внутренних ссылок
Если параметры появляются из-за темы или плагина, закрывать их только robots недостаточно. Лучше не генерировать мусорные ссылки вообще. Например, для сортировки и фильтров проверьте шаблоны списка записей, архивов и виджеты.
Частая ошибка — когда кнопка «Сортировать по дате» ведёт на URL с параметром, а потом этот же URL попадает в хлебные крошки, блоки «похожие записи» и sitemap HTML. В итоге поисковик видит его как отдельную страницу.
Диагностика: где искать источник дублей
Перед правкой кода полезно понять, кто именно создаёт параметр. Это может быть:
- тема, которая строит ссылки на архивы вручную;
- плагин фильтрации или поиска;
- виджет сортировки;
- скрипт, который добавляет query string к ссылкам на AJAX-обновление;
- старые ссылки в контенте и меню.
Проверьте исходный HTML страницы и найдите, где именно формируется проблемный URL. Если параметр появляется в меню или блоке навигации, править нужно источник ссылки, а не только мета-теги.
Что смотреть в коде темы
Ищите вызовы add_query_arg(), remove_query_arg(), ручную сборку URL через $_SERVER['REQUEST_URI'] и вставку параметров в href. Именно там обычно рождаются дубли.
Если в теме есть собственные шаблоны архивов, проверьте, не добавляет ли она сортировку к каждой ссылке на пагинацию. Это частая причина, когда все страницы архива получают десятки вариантов одного и того же URL.
Проверка результата после внедрения
После правок не ограничивайтесь просмотром кода страницы. Нужно проверить, как URL отдают заголовки и что видит поисковый робот.
- Откройте проблемный URL с параметром и убедитесь, что в HTML есть
noindexтам, где это нужно. - Проверьте canonical: он должен вести на чистый адрес без лишних параметров.
- Посмотрите ответ сервера через
curl -Iили DevTools, если делали редирект. - Прогоните страницу через проверку URL в Search Console.
- Убедитесь, что внутренние ссылки больше не ведут на мусорные варианты.
Пример быстрой проверки заголовков:
curl -I 'https://example.com/?s=test'Если вы используете редирект, ответ должен быть предсказуемым: либо 301 на чистый URL, либо 200 с noindex, если страница нужна пользователю. Не смешивайте оба подхода без необходимости.
Частые ошибки и как их исправить
Закрыли всё через robots.txt
Это не решает проблему уже проиндексированных URL. Если страница уже в индексе, поисковик может продолжать показывать её без нормального описания. Для таких случаев нужен noindex или 301-редирект, а не только запрет обхода.
Поставили noindex, но оставили внутренние ссылки
Поисковик всё равно будет тратить ресурсы на обход этих адресов. Лучше убрать генерацию ссылок в теме, меню, хлебных крошках и блоках фильтрации.
Сделали редирект на главную для всех параметров
Это грубая ошибка. Пользователь может потерять нужный фильтр или поиск, а поисковик увидит неестественную схему. Редирект должен быть точечным и только там, где параметр действительно лишний.
Не проверили canonical
Если canonical указывает на URL с параметром, а robots говорит обратное, сигнал получается противоречивым. В таких случаях поисковик часто игнорирует часть настроек.
Когда лучше править плагин, а не код темы
Если параметр создаёт SEO-плагин, фильтр каталога или поиск, правка темы не поможет. Ищите настройки в самом плагине: часто там уже есть опции для noindex, canonical или исключения параметров из индексации.
Если нужен более системный подход к чистке дублей и технической SEO-настройке, иногда удобнее использовать специализированные инструменты вроде Clearfy Pro. Но даже в этом случае важно понимать, какие URL вы закрываете и почему, а не включать всё подряд.
Что должно получиться в итоге
После настройки у вас остаются рабочие страницы поиска и фильтров для пользователей, но поисковик перестаёт считать их отдельными посадочными страницами. В индексе остаются только те URL, которые реально несут уникальный контент и имеют смысл для выдачи.
Если после изменений проблема не ушла сразу, это нормально: поисковику нужно время на повторный обход. Главное — чтобы на уровне сайта уже не создавались новые мусорные адреса и не появлялись противоречивые сигналы.