wpcompany.ru wordpress WPCompany

Как закрыть от индексации страницы с параметрами в WordPress

Страницы с параметрами в WordPress обычно появляются не из-за ошибки CMS, а из-за фильтров, сортировок, UTM-меток, поиска по сайту и технических страниц плагинов. Проблема в том, что поисковик видит десятки URL с одинаковым или почти одинаковым содержимым, а вы получаете дубли, размывание веса и лишний мусор в индексе.

Ниже разберём, как закрывать такие URL аккуратно: без поломки навигации, без лишнего запрета в robots.txt и без ситуации, когда нужные страницы внезапно исчезают из поиска.

Когда это действительно проблема

Сначала стоит понять, что именно у вас индексируется. Не все URL с параметрами нужно закрывать. Например, UTM-метки сами по себе обычно не должны попадать в индекс, а вот страницы фильтра каталога или поиска могут быть полезны пользователю, но вредны для SEO, если создают бесконечные комбинации.

Типичные сценарии

  • ?utm_source=..., ?utm_medium=... и другие маркетинговые метки;
  • ?sort=price, ?orderby=date и похожие сортировки;
  • ?s= для внутреннего поиска;
  • ?filter_color=, ?brand=, ?size= и другие фильтры;
  • служебные параметры плагинов, которые меняют только представление страницы.

Если такие URL уже попали в индекс, простого удаления через Search Console обычно мало. Нужно изменить поведение страницы: отдать корректный noindex, задать канонический URL и не плодить новые варианты.

Диагностика: что проверить перед правкой

Перед тем как что-то закрывать, посмотрите, как именно WordPress и тема сейчас отдают эти страницы. Частая ошибка — закрыть всё подряд через robots.txt, а потом обнаружить, что поисковик не может увидеть канонический адрес и продолжает держать в индексе старые версии.

  1. Откройте проблемный URL с параметром.
  2. Проверьте исходный код страницы: есть ли meta robots и link rel="canonical".
  3. Посмотрите HTTP-ответ: не отдаются ли случайно noindex или редиректы на неподходящий адрес.
  4. Сравните контент страницы с параметром и без него.
  5. Проверьте, не создаёт ли SEO-плагин отдельные правила для архивов, поиска или пагинации.

Если у вас есть доступ к консоли, полезно быстро проверить заголовки:

curl -I "https://example.com/shop/?sort=price"

Для HTML-страницы важнее не сам статус 200, а наличие канонического URL и мета-тега индексации. Если страница должна быть закрыта, но при этом доступна пользователю, обычно лучше использовать noindex,follow, а не блокировку в robots.

Как закрыть страницы с параметрами: рабочие варианты

Подход зависит от того, что именно вы хотите сделать. Ниже — три практических варианта, которые реально используются в WordPress.

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

Вариант 1. Добавить noindex для страниц с параметрами

Если параметр не должен индексироваться, но страница должна открываться пользователю, добавьте noindex,follow. В WordPress это можно сделать через фильтр wp_robots.

add_filter('wp_robots', function ($robots) {
    $blocked_params = array('sort', 'orderby', 'filter_color', 'filter_size', 's');

    foreach ($blocked_params as $param) {
        if (isset($_GET[$param]) && $_GET[$param] !== '') {
            $robots['noindex'] = true;
            $robots['follow']  = true;
            break;
        }
    }

    return $robots;
});

Этот вариант удобен, если у вас есть понятный список параметров. Не стоит проверять вообще все $_GET подряд: часть параметров может быть безопасной и полезной для индексации, например, служебные параметры авторизации или отслеживания, которые вы уже отдельно обрабатываете.

Вариант 2. Задать canonical на чистый URL

Если страница с параметром — это та же самая сущность, но с изменённым отображением, canonical должен указывать на базовый адрес без параметров. Это особенно важно для сортировок и UTM-меток.

add_filter('get_canonical_url', function ($canonical, $post) {
    if (is_singular() || is_page()) {
        return $canonical;
    }

    if (!empty($_GET)) {
        $url = home_url(add_query_arg(array(), $GLOBALS['wp']->request));
        return remove_query_arg(array_keys($_GET), $url);
    }

    return $canonical;
}, 10, 2);

На практике canonical лучше не усложнять, если SEO-плагин уже умеет делать это корректно. Если вы используете Yoast SEO, Rank Math или похожий плагин, сначала проверьте их настройки, а код подключайте только для нестандартных случаев.

Вариант 3. Запретить генерацию мусорных URL на уровне шаблона

Иногда проблема не в индексации, а в том, что тема сама строит ссылки с параметрами и плодит дубли. Тогда нужно исправлять генерацию ссылок, а не только мета-теги. Например, при выводе сортировки можно сохранять только нужный параметр и убирать всё лишнее.

$base_url = remove_query_arg(array('utm_source', 'utm_medium', 'utm_campaign', 'fbclid'));
$sort_url = add_query_arg('sort', 'price', $base_url);
echo esc_url($sort_url);

Такой подход особенно полезен для меню фильтров, хлебных крошек и кнопок сортировки. Чем меньше лишних параметров в ссылках, тем меньше шансов получить дубли в индексе.

Что делать с robots.txt и почему это не основное решение

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

Например, можно ограничить обход технических параметров, если они создают большое количество мусорных комбинаций:

User-agent: *
Disallow: /*?sort=
Disallow: /*?orderby=
Disallow: /*?filter_

Но если вы уже ставите noindex на таких страницах, сначала проверьте, не мешает ли robots увидеть этот тег. Для индексации важнее корректная HTML-разметка, чем грубый запрет обхода.

Пошаговое решение без лишнего риска

  1. Составьте список параметров, которые реально создают дубли.
  2. Определите, какие из них должны оставаться доступными пользователю, но не индексироваться.
  3. Добавьте noindex,follow для нужных URL.
  4. Задайте canonical на чистую версию страницы.
  5. Уберите лишние параметры из внутренних ссылок.
  6. Проверьте, не конфликтует ли это с SEO-плагином или кэшем.

Если у вас много шаблонных страниц, удобнее вынести логику в мини-плагин, а не в functions.php. Тогда при смене темы правила не потеряются.

Как проверить, что всё сработало

После внедрения не ограничивайтесь визуальной проверкой. Нужны конкретные признаки, что страница стала обрабатываться правильно.

  • в исходном коде есть meta name="robots" content="noindex,follow";
  • canonical указывает на URL без лишних параметров;
  • внутренние ссылки больше не добавляют мусорные query string;
  • страница остаётся доступной пользователю, но не претендует на отдельную индексацию;
  • в Search Console уменьшается число URL с параметрами в отчётах по страницам.

Проверить HTML можно через просмотр исходника или через curl:

curl -s "https://example.com/catalog/?sort=price" | grep -iE "robots|canonical"

Если canonical всё ещё содержит параметры, значит правило не сработало или его переопределяет SEO-плагин. Если noindex отсутствует, проверьте, не отрабатывает ли условие в коде слишком узко.

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

Закрыли URL в robots.txt и ждёте удаления из индекса

Это самая частая ошибка. Robots только ограничивает обход, но не всегда удаляет уже известный URL. Исправление: вернуть доступ к странице, добавить noindex и canonical, затем дождаться переобхода.

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

Так можно случайно закрыть полезные URL, например страницы поиска, фильтрации по категории или служебные ссылки, которые должны работать для пользователей. Исправление: проверять только конкретные параметры, а не сам факт наличия $_GET.

Canonical указывает на неправильный адрес

Иногда canonical строится с ошибкой и ведёт на несуществующую или уже закрытую страницу. Исправление: сравнить адрес в исходнике с реальным каноническим URL и убрать лишние параметры через remove_query_arg().

Кэш отдаёт старую версию страницы

После правки HTML может продолжать отдаваться старая мета-разметка из кэша. Исправление: очистить кэш плагина, серверный кэш и CDN, затем перепроверить исходник.

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

Работа с параметрами — это не только SEO. Любой код, который читает $_GET, должен быть предсказуемым. Не подставляйте параметры напрямую в SQL, HTML или логику редиректов без проверки. Для вывода используйте esc_url(), esc_html() и sanitize_text_field(), если параметр нужен в обработке.

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

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

Когда лучше не закрывать страницу полностью

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

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

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

WordPress

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

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