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

Внутренний поиск WordPress часто создаёт мусорные URL вида ?s=, которые поисковики могут обходить и иногда показывать в выдаче. На небольшом сайте это выглядит как мелочь, но на контентном проекте такие страницы быстро превращаются в источник дублей, пустых результатов и лишней нагрузки на обход.

Задача здесь не в том, чтобы отключить поиск как функцию, а в том, чтобы оставить его рабочим для пользователей и при этом не отдавать поисковым системам страницы результатов поиска. Это решается на уровне noindex и, при необходимости, через robots.txt и шаблон темы.

Когда проблема уже есть

Проверять нужно не только в Search Console. Откройте несколько типичных URL поиска вручную и посмотрите, что именно отдает сайт:

  • https://site.ru/?s=тест;
  • https://site.ru/?s=;
  • страницы поиска с пагинацией, если они формируются, например ?s=тест&paged=2.

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

Что именно нужно закрыть

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

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

Самый надёжный вариант — добавить мета-тег noindex,follow только для страниц поиска. Это можно сделать в теме или в небольшом mu-plugin, если не хотите привязываться к шаблону.

<?php
add_action( 'wp_head', function () {
    if ( is_search() ) {
        echo '<meta name="robots" content="noindex,follow">' . "\n";
    }
}, 1 );

Этот вариант простой и рабочий. follow оставляет поисковикам возможность переходить по ссылкам со страницы поиска, если они там есть. Для обычного сайта этого достаточно.

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

Если нужно убрать ещё и пустой поиск

Пустой запрос ?s= лучше не отдавать как полноценную индексируемую страницу. Можно принудительно редиректить его на главную или на страницу поиска с нормальным запросом. Но делайте это аккуратно: не ломайте форму поиска и не редиректите все поисковые запросы подряд.

<?php
add_action( 'template_redirect', function () {
    if ( is_search() && isset( $_GET['s'] ) && trim( wp_unslash( $_GET['s'] ) ) === '' ) {
        wp_safe_redirect( home_url( '/' ), 302 );
        exit;
    }
} );

Здесь используется временный редирект 302, потому что пустой поиск — это не постоянная каноническая страница. Если у вас есть отдельная логика для пустого поиска, подстройте редирект под неё.

Сравнение подходов: плагин, код, robots.txt

СпособПлюсМинусКогда выбирать
SEO-плагинБыстро, без кодаНе всегда есть точная настройка именно для search-страницЕсли плагин уже используется и умеет это делать штатно
Код в теме или mu-pluginТочный контрольНужно не забыть при смене темыЕсли нужен предсказуемый результат без лишних зависимостей
robots.txtЛегко добавитьНе убирает уже проиндексированные URLТолько как дополнительная мера, не вместо noindex

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

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

<meta name="robots" content="noindex,follow">

Дальше проверьте заголовки и индексацию:

  • вручную через просмотр исходного кода;
  • в Search Console — через проверку URL;
  • поиск по сайту через site:site.ru inurl:?s= в поисковике, если нужно понять, остались ли старые записи в индексе.

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

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

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

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

Поставили noindex на все страницы сайта

Иногда условие пишут слишком широко, например без проверки is_search(). В итоге мета-тег появляется на главной, записях и страницах. Проверяйте условие и тестируйте на нескольких типах URL.

Редиректите любой запрос с параметром s

Это ломает поиск. Пользователь вводит запрос, а сайт возвращает главную или случайную страницу. Редиректить можно только пустой или явно некорректный запрос, если это действительно нужно.

Добавили код в тему и забыли про обновление

Если правка важна для SEO и должна жить независимо от дизайна, лучше вынести её в маленький mu-plugin. Так она не исчезнет после смены темы.

Практические советы по безопасности и производительности

Не усложняйте решение лишними запросами к базе. Для закрытия search-страниц достаточно одного условия в wp_head. Не нужно каждый раз проверять что-то через отдельный SQL-запрос или тянуть настройки из удалённого сервиса.

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

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

Что должно получиться в итоге

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

Как удалить неиспользуемые термины таксономий в WordPress без плагинов
26.02.2026
Как изменить URL AJAX-запросов в WordPress без конфликтов
03.04.2026
Как найти и удалить дубли страниц в WordPress без потери трафика
31.08.2026
Как удалить все незавершённые заказы WooCommerce через функции без плагинов
13.05.2026
Как автоматизировать обновление подписок в WordPress
31.03.2026
×
Прокачай свой сайт WordPress!

WordPress

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

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