Проблема с URL вида ?utm_source=, ?replytocom=, ?sort= или внутренними фильтрами обычно всплывает не сразу. Сайт уже проиндексирован, в отчётах Search Console появляются десятки и сотни «альтернативных» адресов, а каноникал не всегда спасает: поисковик всё равно тратит обход на мусорные варианты, а аналитика смешивает полезный и служебный трафик.
Если задача не в том, чтобы «запретить всё подряд», а в том, чтобы оставить нужные страницы доступными пользователю и убрать лишние варианты из индекса, действовать нужно по схеме: сначала найти типы параметров, потом выбрать способ обработки для каждого, и только после этого править WordPress, сервер или robots.txt.
Диагностика: какие параметры реально создают проблему
Начинать стоит не с robots.txt, а с проверки того, какие URL уже попали в индекс и откуда они берутся. В WordPress чаще всего встречаются три сценария: маркетинговые метки, служебные параметры комментариев и параметры сортировки/фильтрации, которые генерируют темы или плагины.
Что смотреть в первую очередь
- отчёт «Страницы» в Google Search Console, особенно URL с
?в адресе; - логи сервера или статистику обхода, если есть доступ;
- поиск по сайту:
site:example.com inurl:?; - исходный код страниц — есть ли корректный
rel="canonical"; - настройки плагинов аналитики, рекламы и фильтров, которые добавляют параметры в ссылки.
Если параметр нужен только для трекинга и не меняет контент страницы, его обычно не имеет смысла индексировать. Если параметр меняет выдачу, например сортировку товаров или список записей, решение зависит от того, есть ли у таких страниц самостоятельная ценность. Для большинства служебных комбинаций — нет.
Как выбрать способ закрытия: robots.txt, noindex или canonical
Универсального ответа нет. Ошибка многих сайтов в том, что они пытаются закрыть всё через robots.txt. Это не всегда работает так, как ожидается: если URL уже известен поисковику, он может остаться в индексе без описания, а сама страница перестанет сканироваться, но не обязательно исчезнет быстро.
| Подход | Когда применять | Плюс | Минус |
|---|---|---|---|
noindex | Страница доступна, но не должна быть в индексе | Явный сигнал поисковику | Нужно, чтобы страница могла сканироваться |
canonical | Есть основной URL без параметров | Сохраняет доступность для пользователя | Не всегда убирает мусорные URL быстро |
robots.txt | Нужно ограничить обход служебных разделов | Снижает нагрузку на обход | Не гарантирует удаление из индекса |
На практике для параметров, которые меняют только представление, обычно лучше сочетать canonical на чистую версию и noindex,follow для служебных вариантов. А robots.txt использовать точечно, когда нужно ограничить именно обход, а не индексацию как таковую.
Пошаговое решение в WordPress
1. Добавьте noindex для URL с параметрами
Если у вас нет SEO-плагина, который уже умеет это делать, можно повесить обработку на wp_head. Ниже пример для типовых параметров: replytocom, sort, filter, utm_*. Логика простая: если в URL есть служебный параметр, выводим noindex,follow.
<?php
add_action('wp_head', function () {
if (is_admin()) {
return;
}
$query = $_GET;
if (empty($query)) {
return;
}
$noindex = false;
foreach ($query as $key => $value) {
if ($key === 'replytocom' || $key === 'sort' || $key === 'filter') {
$noindex = true;
break;
}
if (strpos($key, 'utm_') === 0) {
$noindex = true;
break;
}
}
if ($noindex) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);Этот вариант не трогает чистые URL и не ломает навигацию. Но он должен быть согласован с каноникалами: если страница с параметром всё равно ведёт на тот же контент, canonical должен указывать на основной адрес без параметров.
2. Укажите canonical на чистую версию URL
Если тема или SEO-плагин не справляются с параметрами, можно принудительно подменить canonical. Важно не подставлять один и тот же адрес для всех страниц: canonical должен строиться от текущего URL без служебных параметров.
<?php
add_filter('get_canonical_url', function ($canonical, $post) {
if (empty($_GET)) {
return $canonical;
}
$remove = array('replytocom', 'sort', 'filter');
$clean = $_GET;
foreach ($remove as $key) {
unset($clean[$key]);
}
foreach (array_keys($clean) as $key) {
if (strpos($key, 'utm_') === 0) {
unset($clean[$key]);
}
}
$url = get_permalink($post);
if (!empty($clean)) {
$url = add_query_arg($clean, $url);
}
return $url;
}, 10, 2);Если параметр действительно меняет контент и вы хотите оставить его в индексе, canonical на чистую версию ставить не нужно. В таком случае лучше сделать отдельную посадочную страницу или нормальный ЧПУ-адрес, а не полагаться на параметр.
3. Закройте служебные параметры в robots.txt точечно
robots.txt полезен, когда нужно уменьшить обход мусорных комбинаций. Но не стоит писать туда слишком общие правила. Например, блокировка всего, что содержит знак вопроса, может задеть полезные URL и внутренние механизмы сайта.
User-agent: *
Disallow: /*?replytocom=
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?utm_
Такой вариант стоит использовать аккуратно и только после проверки, что эти параметры не нужны для индексации. Для UTM это обычно безопасно, для фильтров — не всегда.
Если параметры создаёт плагин или тема
Иногда источник проблемы не в SEO, а в шаблоне или расширении. Например, комментарии добавляют replytocom, фильтры каталога — свои query string, а кнопки «поделиться» — UTM-подобные хвосты. В этом случае лучше исправлять генерацию ссылок в исходном месте, а не лечить последствия на уровне индексации.
- для комментариев проверьте, нужен ли вообще
replytocomв теме; - для фильтров убедитесь, что служебные параметры не попадают в sitemap;
- для маркетинговых меток не дублируйте UTM внутри внутренних ссылок;
- для пагинации не смешивайте параметры сортировки с основным архивом.
Если вы используете SEO-плагин, сначала проверьте его настройки canonical, noindex для архивов и обработку параметров. Часто нужная опция уже есть, и самописный код не нужен.
Как проверить, что решение сработало
После внедрения не ограничивайтесь просмотром исходника. Проверьте поведение на уровне ответа сервера, HTML и индексации.
- Откройте URL с параметром, например
/post/?replytocom=1. - Убедитесь, что в
<head>естьmeta name="robots" content="noindex,follow". - Проверьте canonical — он должен вести на чистый URL, если параметр служебный.
- В Search Console отправьте проверку URL и посмотрите, как Google видит страницу.
- Через несколько обходов проверьте, уменьшается ли количество параметризованных URL в отчётах.
Для быстрой локальной проверки удобно открыть страницу через curl и посмотреть заголовки и HTML:
curl -I 'https://example.com/post/?replytocom=1'
curl -s 'https://example.com/post/?replytocom=1' | grep -i 'robots\|canonical'Частые ошибки и как их исправить
Закрыли URL в robots.txt, но они остались в индексе
Это ожидаемо. robots.txt ограничивает обход, но не всегда удаляет уже известные адреса. Если нужно именно убрать страницу из индекса, используйте noindex и дайте поисковику возможность увидеть его.
Поставили noindex на все страницы с параметрами, включая полезные
Так часто ломают фильтры, сортировку и посадочные страницы, которые реально приводят трафик. Сначала разделите параметры на служебные и контентные, потом применяйте правило.
Canonical ведёт на неправильный адрес
Это бывает, когда код собирает URL вручную и теряет схему, язык, категорию или дополнительные сегменты. Используйте функции WordPress для сборки адреса, а не строковую склейку.
Параметры продолжают появляться во внутренних ссылках
Тогда проблема не в индексации, а в генерации ссылок. Проверьте меню, кнопки, блоки темы и плагины аналитики. Если внутренние ссылки уже содержат ?utm_, поисковик будет видеть их как отдельные URL снова и снова.
Безопасность и производительность
Чем больше мусорных URL обходят боты, тем больше лишней нагрузки на сервер и тем сложнее анализировать логи. Но не стоит пытаться «лечить» это агрессивными правилами на уровне веб-сервера без теста. Слишком широкие запреты могут отрезать полезные страницы, а потом это сложно откатить.
Если вам нужен более системный контроль дублей, параметров и технической чистки, в экосистеме WPShop для таких задач подходит Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно параметры вы закрываете и почему.
Главный критерий здесь простой: если URL не несёт самостоятельной ценности для поиска, он не должен конкурировать с основной страницей. Если несёт — его нужно оформлять как отдельную нормальную страницу, а не держать на параметре.