Как запретить индексацию страниц с параметрами в WordPress без потери полезного трафика

|

Страницы с параметрами в WordPress часто появляются незаметно: UTM-метки из рекламы, сортировки, фильтры, внутренний поиск, служебные query string. Для пользователя это одна и та же страница, а для поисковика — десятки вариантов URL. В итоге в индексе копятся мусорные адреса, а в отчётах Search Console растёт число «просканировано, но не проиндексировано».

Задача здесь не в том, чтобы закрыть всё подряд. Нужен точный контроль: какие параметры можно оставить для аналитики, какие лучше убрать из индекса, а какие вообще не должны попадать в выдачу и в кэш.

Как понять, что проблема именно в параметрах URL

Сначала проверьте, действительно ли поисковик индексирует вариации одной и той же страницы. Откройте несколько URL с параметрами и сравните:

Типичные примеры:

Если в индексе появляются такие адреса, а в отчётах по страницам много дублей или почти дублей, значит нужно не только поставить noindex, но и убрать причину генерации лишних URL.

Что закрывать, а что оставлять

Не все параметры одинаково вредны. Рекламные метки обычно не нужны в индексе, но полезны для аналитики. Сортировки и фильтры зависят от структуры сайта: иногда они нужны пользователю, но не должны индексироваться. Внутренний поиск почти всегда лучше закрывать.

ПодходКогда применятьПлюсМинус
Плагин для SEOЕсли нужен быстрый контроль без кодаПроще настроитьМеньше гибкости, возможны лишние правила
Код в теме/плагинеЕсли нужен точечный контроль по параметрамТочный результатНужно тестировать и поддерживать
robots.txtДля грубого ограничения обходаСнижает нагрузкуНе гарантирует удаление из индекса

Если нужен аккуратный результат, обычно комбинируют канонический URL, noindex для служебных страниц и настройку кэша, чтобы не плодить отдельные версии.

Пошаговое решение через код

Ниже пример, который добавляет noindex, follow для страниц с типичными служебными параметрами. Код можно положить в functions.php дочерней темы или в небольшой mu-plugin.

<?php
add_action('wp_head', function () {
    if (is_admin()) {
        return;
    }

    $params = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'sort', 'orderby', 'filter_color', 'filter_size', 'replytocom');

    foreach ($params as $param) {
        if (isset($_GET[$param]) && $_GET[$param] !== '') {
            echo "<meta name=\"robots\" content=\"noindex, follow\" />\n";
            break;
        }
    }
}, 1);

Это не заменяет canonical, но помогает поисковику не считать такие URL отдельными посадочными страницами. Если на сайте уже есть SEO-плагин, проверьте, не дублирует ли он robots-мета-тег. Два разных meta robots на одной странице — частая причина странного поведения.

Следующий шаг — нормализовать канонический адрес. Для страниц с параметрами каноникал должен указывать на чистый URL без служебной строки.

<?php
add_filter('wpseo_canonical', function ($canonical) {
    if (empty($_GET)) {
        return $canonical;
    }

    $remove = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'sort', 'orderby', 'filter_color', 'filter_size', 'replytocom');
    $query = $_GET;

    foreach ($remove as $key) {
        unset($query[$key]);
    }

    $path = strtok(home_url(add_query_arg(array(), $_SERVER['REQUEST_URI'])), '?');

    return empty($query) ? $path : $canonical;
});

Этот пример рассчитан на Yoast SEO, потому что фильтр wpseo_canonical у него реальный. Если у вас другой SEO-плагин, логика та же, но хук будет отличаться. В таком случае проще оставить canonical на уровне шаблона и не пытаться «перехватить» всё через фильтр.

Если нужен контроль без кода

Когда сайт ведёт редактор или маркетолог, а не разработчик, удобнее закрывать мусорные параметры через SEO-плагин. Например, в Clearfy Pro есть инструменты для удаления дублей и технической чистки сайта; это полезно, если проблема не только в параметрах, но и в лишних архивных страницах, тегах и служебных URL. Но даже в этом случае важно понимать, что именно закрывается: не стоит бездумно ставить noindex на всё подряд, иначе можно потерять полезные страницы фильтрации.

Если параметр нужен для UX, но не для индекса, оставляйте его в работе, а для поисковика задавайте канонический адрес. Если параметр вообще не нужен, лучше убрать его генерацию на уровне шаблона, меню, фильтра или JS-логики.

Проверка результата после внедрения

После правок не ограничивайтесь просмотром исходника. Проверьте решение по шагам:

  1. Откройте URL с параметром в браузере и убедитесь, что в <head> появился noindex, follow.
  2. Проверьте canonical: он должен вести на чистую страницу без служебных параметров.
  3. Посмотрите, не создаёт ли кэш отдельную версию для каждого query string.
  4. Отправьте URL на проверку в Search Console и сравните, как он видится роботу.
  5. Через несколько дней проверьте отчёт по индексированию и список просканированных URL.

Если у вас серверный кэш или CDN, обязательно протестируйте и с очищенным кэшем, и после повторного запроса. Иногда код уже правильный, но старая версия страницы продолжает отдаваться из кэша.

Частые ошибки и как их исправить

Ставят noindex на все страницы с параметрами без разбора

Это грубая ошибка. Если параметр отвечает за полезную фильтрацию, вы можете потерять трафик из поиска по длинным запросам. Сначала разделите параметры на служебные и пользовательские.

Оставляют параметр в canonical

Тогда поисковик всё равно видит разные URL как отдельные варианты. Canonical должен указывать на основную страницу, а не на текущий адрес с хвостом из query string.

Закрывают URL только в robots.txt

Это не гарантирует удаление из индекса. Если страница уже известна поисковику, одного запрета на обход недостаточно. Для таких случаев нужен noindex или корректный canonical.

Не учитывают кэш

Если кэширование настроено без учёта query string, можно получить две проблемы сразу: либо мусорные страницы кэшируются отдельно, либо, наоборот, пользователи видят не тот контент. Проверьте правила кэша на сервере, в плагине и на CDN.

Что проверить по безопасности и производительности

Не храните список параметров в случайных местах и не дублируйте логику в нескольких плагинах. Чем больше слоёв вмешательства, тем выше шанс получить конфликт. Если решение делаете кодом, вынесите его в отдельный мини-плагин или mu-plugin, чтобы оно не зависело от темы.

Для производительности полезно ещё и сократить генерацию мусорных URL на уровне шаблона: не добавлять UTM во внутренние ссылки, не строить лишние сортировки в меню, не плодить отдельные страницы для каждого микрофильтра, если они не нужны в поиске.

Если нужен быстрый аудит дублей, технической чистки и индексации, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но сам принцип остаётся тем же: сначала определить, какие URL должны жить, а какие — только мешают индексации.

Короткий чек-лист перед публикацией

Если после внедрения в индексе всё равно остаются старые адреса, это нормально на коротком промежутке. Важно, чтобы новые ссылки и новые обходы уже шли по правильной схеме: без мусорных параметров, с понятным canonical и без конфликтов между плагинами, темой и кэшем.

WooCommerce: как отключить переход в корзину и сразу вести на оформление заказа
09.08.2026
Как избежать проблем при масштабном экспорте и импорте продуктов в WooCommerce
17.04.2026
Как удалить кэш в WordPress: практические способы и примеры
05.03.2026
Как избежать проблем с дублированием артикулов (SKU) при массовом импорте товаров в WooCommerce
08.05.2026
Создать автоматические отчёты в WordPress с помощью Expert Review
01.02.2026
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙