wplog.ru wordpress wplog.ru

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

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. Это не самая эффектная настройка, но именно она обычно убирает лишний шум без побочных эффектов.

×
Прокачай свой сайт WordPress!

WordPress

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

Создай сайт своей мечты ⋙