Проблема с параметрами URL в WordPress обычно выглядит одинаково: одна и та же страница открывается по нескольким адресам, а поисковик начинает индексировать версии с ?utm_source=, ?sort=, ?filter= или внутренним поиском. В результате в индексе появляются дубли, расходуется краулинговый бюджет, а в отчетах по страницам сложно понять, какой URL считать основным.
Ниже — рабочая схема, которая подходит для типовых сайтов на WordPress: сначала диагностируем, какие параметры реально создают мусорные URL, затем закрываем их от индексации так, чтобы не задеть полезные страницы и не сломать аналитику.
Как понять, что проблема именно в параметрах URL
Не все URL с параметрами нужно запрещать. Иногда параметр нужен для сортировки, фильтра или кампаний, и его нельзя просто вырезать наугад. Сначала проверьте, что именно уже попало в индекс и какие адреса дублируют основной контент.
Что смотреть в первую очередь
- отчеты Google Search Console по индексированным страницам и дублирующимся URL;
- серверные логи или логи аналитики: какие параметры чаще всего встречаются у ботов;
- результаты поиска по сайту и внутренние фильтры, если они генерируют отдельные URL;
- страницы с UTM-метками, которые случайно попали в sitemap или были перелинкованы внутри сайта.
Если один и тот же контент доступен по нескольким адресам, а в индексе есть версии с параметрами, это уже повод навести порядок. Особенно часто проблема возникает на новостных, контентных и каталоговых сайтах, где есть сортировки, фильтры, поиск и рекламные метки.
Какие параметры можно закрывать, а какие лучше оставить
Здесь важно не смешивать технические и маркетинговые задачи. Параметры для кампаний нужны аналитике, но не нужны поиску. Параметры сортировки и фильтрации часто не несут уникального контента и обычно не должны индексироваться. А вот параметры, которые меняют смысл страницы, требуют отдельной проверки.
| Подход | Когда уместен | Плюсы | Минусы |
|---|---|---|---|
| robots.txt | Для грубого ограничения обхода технических URL | Просто внедрить | Не убирает уже проиндексированные страницы и не управляет canonicals |
| meta robots noindex | Для страниц, которые должны открываться, но не индексироваться | Понятно для поисковиков | Нужен доступ бота к странице |
| canonical | Если параметр не меняет основной контент | Сохраняет сигнал на основную страницу | Не всегда достаточно для мусорных URL |
| Код в теме или плагине | Когда нужна точная логика по параметрам | Гибко и предсказуемо | Требует проверки и поддержки |
Если задача — убрать из индекса именно URL с параметрами, а не просто запретить обход, обычно лучше сочетать noindex и canonical. Для отдельных технических сценариев можно дополнительно ограничить обход в robots.txt, но не стоит рассчитывать только на него.
Пошаговое решение: закрываем параметры URL через WordPress
Самый надежный вариант — управлять мета-тегами на уровне шаблона или небольшого функционального плагина. Так вы не зависите от интерфейса SEO-плагина и можете точно описать логику для конкретных параметров.
Шаг 1. Определите список параметров
Сначала выпишите все параметры, которые реально создают дубли: utm_*, gclid, fbclid, sort, filter, page, s для внутреннего поиска. Не добавляйте в список все подряд: если параметр меняет содержимое страницы и нужен пользователю, его нужно проверять отдельно.
Шаг 2. Добавьте логику noindex для страниц с параметрами
Ниже пример для functions.php дочерней темы или для собственного мини-плагина. Он ставит noindex,follow на страницы с типичными маркетинговыми и техническими параметрами, но не трогает саму основную страницу без параметров.
<?php
add_filter('wp_robots', function( $robots ) {
$params = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'gclid', 'fbclid', 'sort', 'filter');
foreach ( $params as $param ) {
if ( isset($_GET[$param]) && $_GET[$param] !== '' ) {
$robots['noindex'] = true;
$robots['follow'] = true;
break;
}
}
return $robots;
});Этот вариант хорош тем, что не ломает доступ к странице. Пользователь и бот могут открыть URL, но поисковик получит сигнал не индексировать его как отдельную страницу.
Шаг 3. Добавьте canonical на основную версию
Если параметр не меняет содержимое, canonical должен указывать на чистый URL без query string. В WordPress это можно сделать через фильтр wpseo_canonical в Yoast SEO или через общий вывод canonical в теме, если SEO-плагина нет.
<?php
add_filter('get_canonical_url', function( $canonical, $post ) {
if ( is_singular() && ! empty($_GET) ) {
return get_permalink( $post );
}
return $canonical;
}, 10, 2);Если у вас уже установлен SEO-плагин, проверьте, не генерирует ли он canonical сам. Дублировать логику в двух местах не стоит: можно получить конфликт и неправильный тег на странице.
Шаг 4. Ограничьте обход в robots.txt только для явного мусора
robots.txt полезен для параметров, которые создают бесконечные комбинации URL или не несут ценности для обхода. Но не закрывайте там страницы, которые должны быть доступны для рендеринга и получения canonical. Иначе поисковик может не увидеть нужный сигнал.
User-agent: *
Disallow: /*?sort=
Disallow: /*?filter=
Disallow: /*?utm_
Disallow: /*?fbclid=
Disallow: /*?gclid=Это не универсальное правило для всех сайтов. Перед внедрением проверьте, как ваш сервер и CMS обрабатывают такие шаблоны. На некоторых конфигурациях лучше ограничиться noindex и canonical, а robots использовать только для самых шумных адресов.
Если нужен более точный контроль: отдельная обработка поиска и фильтров
Внутренний поиск WordPress и страницы фильтрации часто требуют отдельного подхода. Поиск почти всегда создает тонкие страницы, а фильтры могут генерировать десятки комбинаций одного каталога. Для них можно задать более жесткую политику.
<?php
add_filter('wp_robots', function( $robots ) {
if ( is_search() ) {
$robots['noindex'] = true;
$robots['nofollow'] = false;
return $robots;
}
if ( isset($_GET['filter']) || isset($_GET['sort']) ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Для поиска это обычно оправдано: пользователю страница нужна, а поисковику — нет. Для фильтров логика зависит от сайта. Если фильтр формирует полноценную посадочную страницу с уникальным контентом, не закрывайте ее автоматически.
Проверка результата после внедрения
После правок не ограничивайтесь просмотром исходника в браузере. Нужно проверить, что поисковый робот видит именно те сигналы, которые вы задали.
- откройте URL с параметром и проверьте в исходном коде наличие
<meta name="