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

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

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

Сначала стоит убедиться, что речь не о полезных посадочных страницах, а именно о технических дублях. Типичный сценарий: у каталога или архива появляются адреса с параметрами вроде ?s=, ?orderby=, ?filter_, ?min_price=, ?max_price= или другими GET-параметрами. Контент на таких страницах отличается слабо, а иногда вообще не меняется, кроме заголовка и набора товаров или записей.

Блок диагностики проблемы

Проверьте три вещи:

  • есть ли в Google Search Console страницы с параметрами в отчёте об индексировании;
  • открываются ли такие URL со статусом 200 OK и полноценным HTML;
  • не создаёт ли тема отдельные канонические URL для каждого сочетания фильтров.

Если страница с фильтром доступна по прямой ссылке, отдает индексируемый HTML и отличается только набором параметров, это кандидат на закрытие от индексации. Если же фильтр нужен как отдельная посадочная страница для SEO, закрывать его целиком нельзя — тогда лучше пересмотреть логику генерации URL.

Что именно закрывать, а что оставить

Не стоит без разбора ставить noindex на весь архив или на все страницы поиска. Обычно закрывают:

  • внутренний поиск сайта (?s=);
  • сортировки и пагинацию фильтров, если они не несут самостоятельной ценности;
  • технические параметры, которые меняют только отображение, но не смысл страницы;
  • страницы с пустой выдачей или слишком узким набором результатов.

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

Пошаговое решение

Есть три рабочих подхода: через SEO-плагин, через серверные заголовки и через код темы или плагина. На практике чаще всего достаточно комбинации канонического URL и noindex для технических страниц.

ПодходКогда использоватьПлюсыМинусы
SEO-плагинЕсли уже используется Yoast SEO, Rank Math или аналогБыстро, без правок темыНе всегда удобно для точечных правил по параметрам
Код в теме/плагинеНужна точная логика для конкретных URLГибко, прозрачно, без лишних зависимостейНужно аккуратно тестировать
Серверные правилаЕсли надо убрать мусорные параметры до генерации страницыСнижает нагрузкуСложнее поддерживать, легко ошибиться

Вариант через wp_robots

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

<?php
add_filter( 'wp_robots', function( array $robots ) {
    $is_search = is_search();
    $has_filter_params = ! empty( $_GET['orderby'] ) || ! empty( $_GET['filter'] ) || ! empty( $_GET['min_price'] ) || ! empty( $_GET['max_price'] );

    if ( $is_search || $has_filter_params ) {
        $robots['noindex'] = true;
        $robots['nofollow'] = true;
    }

    return $robots;
} );

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

Канонический URL для параметрических страниц

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

<?php
add_filter( 'get_canonical_url', function( $canonical, $post ) {
    if ( is_search() ) {
        return home_url( '/' );
    }

    if ( ! empty( $_GET['orderby'] ) || ! empty( $_GET['filter'] ) ) {
        return get_post_type_archive_link( 'post' );
    }

    return $canonical;
}, 10, 2 );

Здесь важно не подменить canonical на случайный URL. Он должен вести на основную, действительно релевантную страницу. Для архивов записей это может быть главная блога, для каталога — базовый архив нужного типа записи или таксономии.

Если используется SEO-плагин

В Yoast SEO и Rank Math можно управлять индексированием на уровне шаблонов и отдельных страниц. Это удобнее, если фильтр уже оформлен как отдельная страница или таксономия. Но для параметров в URL плагин не всегда покрывает все сценарии, поэтому код всё равно может понадобиться.

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

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

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

  • в HTML есть <meta name="robots" content="noindex, nofollow"> или эквивалентный заголовок;
  • canonical указывает на нужный базовый URL;
  • страница с параметрами не попадает в sitemap;
  • в Search Console новые URL не получают статус «Проиндексировано»;
  • при ручной проверке URL в браузере не создаётся отдельная SEO-страница.

Если используете серверные заголовки, проверьте ответ через DevTools или curl -I. Если работает только meta robots, убедитесь, что шаблон не переопределяется другим плагином.

curl -I "https://example.com/?s=test"

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

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

Закрывают весь сайт вместо технических URL

Иногда в коде ставят noindex по слишком широкому условию, например на все архивы или все страницы с GET-параметрами. В результате из индекса исчезают полезные посадочные. Исправление простое: ограничьте правило конкретными параметрами и конкретными шаблонами.

Оставляют индексируемый canonical на параметрическую страницу

Если canonical указывает на саму страницу с фильтром, поисковик может продолжать считать её отдельным документом. Для дублей canonical должен вести на основную версию, а не на URL с параметрами.

Пытаются закрыть дубли только через robots.txt

Disallow в robots.txt не убирает уже проиндексированные URL и не гарантирует их исчезновение из выдачи. Это полезно для обхода, но не заменяет noindex и canonical. Если URL уже в индексе, нужен именно сигнал на странице или заголовок X-Robots-Tag.

Не учитывают AJAX-фильтры

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

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

Не вставляйте условия на основе $_GET без проверки контекста, если код идёт в публичную тему. В приведённых примерах логика простая, но в реальном проекте лучше вынести её в отдельный мини-плагин. Так обновление темы не сломает SEO-настройки.

Если фильтров много, не делайте тяжёлые запросы в wp_head ради определения индексации. Используйте уже доступные условные теги WordPress и минимальное количество проверок. Чем меньше логики на каждой странице, тем меньше риск тормозов и конфликтов.

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

Как понять, что решение сработало

Признаки нормального результата довольно конкретные:

  • в Search Console уменьшается число индексируемых URL с параметрами;
  • страницы поиска и фильтров получают noindex или каноникал на базовую версию;
  • основные страницы раздела не конкурируют с дублями;
  • внутренние ссылки ведут на чистые адреса без лишних параметров;
  • переобход сайта не показывает новые служебные URL в индексе.

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

Как отключить XML-RPC в WordPress без поломки авторизации и отладить ошибки
15.09.2026
Как отключить emoji в WordPress без поломки верстки и лишних запросов
19.09.2026
Как закрыть от индексации страницы поискового фильтра в WordPress
09.09.2026
Как закрыть от индексации страницы пагинации архива в WordPress
12.09.2026