WordPress Notes WPDream

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

Страницы внутреннего поиска в WordPress часто попадают в индекс как тонкие и дублирующиеся URL: ?s=..., а иногда ещё и с параметрами сортировки или фильтрации, если тема или плагин добавляют их поверх поиска. Для SEO это почти всегда лишний шум. При этом полностью ломать поиск не нужно — задача обычно сводится к тому, чтобы оставить его рабочим для пользователей и одновременно не отдавать поисковикам страницы результатов.

Ниже — рабочий сценарий: что проверить, как закрыть поиск от индексации, когда достаточно noindex, а когда лучше отдавать 404 или 410. Код рассчитан на обычный WordPress без выдуманных хуков и без привязки к конкретной теме.

Когда страницы поиска становятся проблемой

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

Типичные признаки:

  • в Google Search Console видны URL вида /?s=... или /search/?s=...;
  • в выдаче встречаются страницы поиска с заголовками вроде «Результаты поиска для…»;
  • в логах сервера заметны частые заходы ботов на поисковые URL с разными запросами;
  • поисковые страницы конкурируют с нормальными посадочными страницами по низкочастотным запросам.

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

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

ПодходКогда уместенМинус
noindex, followПоиск нужен пользователям, но страницы не должны попадать в индексБоты всё равно могут обходить URL, если на них есть ссылки
Запрет в robots.txtКак дополнительная мера для снижения обходаНе гарантирует удаление уже проиндексированных URL
404 или 410Если поиск на сайте вообще не нуженЛомает пользовательский сценарий

Диагностика: как понять, что проблема есть

Сначала проверьте, как WordPress отдаёт страницы поиска сейчас. Откройте несколько URL с запросом и посмотрите исходный код страницы. Если там есть мета-тег robots с index, а в выдаче уже есть поисковые URL, значит закрытие не настроено.

Полезно проверить и серверный ответ. Для обычной страницы поиска он должен быть 200 OK, если поиск нужен пользователям. Если вы решили полностью отключить поиск, тогда уже имеет смысл отдавать 404 или 410.

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

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

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

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

Шаг 1. Добавьте robots-мета для поисковых страниц

Вставьте код в functions.php дочерней темы или в собственный плагин. Он добавит нужный robots-мета только на страницы поиска.

add_filter('wp_robots', function ($robots) {
    if (is_search()) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
});

Этот способ предпочтительнее, чем ручная печать <meta name="robots"> в шаблоне, потому что WordPress сам соберёт корректный тег, а другие фильтры не будут ломать разметку.

Шаг 2. При необходимости ограничьте каноникал

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

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

Шаг 3. Добавьте запрет в robots.txt как дополнительный слой

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

add_filter('robots_txt', function ($output, $public) {
    $output .= "\nUser-agent: *\nDisallow: /?s=\nDisallow: /search/\n";
    return $output;
}, 10, 2);

Здесь есть нюанс: путь поиска зависит от структуры сайта. Если у вас поиск живёт не в корне, а, например, на /search/, подстройте правило под реальный URL. Не копируйте строку вслепую.

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

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

В этом случае можно перехватить запрос и вернуть 404 или 410. 410 Gone обычно уместен, если вы сознательно убрали поиск навсегда. 404 — если хотите просто показать, что страницы не существует.

add_action('template_redirect', function () {
    if (is_search()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(410);
        nocache_headers();
        exit;
    }
});

Такой вариант стоит применять только если вы понимаете последствия: пользователи больше не смогут искать по сайту, а ссылки на ?s= перестанут работать как раньше.

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

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

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

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

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

Закрыли поиск только в robots.txt

Это частая ошибка. Запрет в robots.txt не гарантирует удаление уже известных URL из индекса. Если страница уже проиндексирована, нужен noindex или статус 404/410.

Поставили noindex, но оставили конфликтующий каноникал

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

Сломали поиск для пользователей

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

Не учли нестандартный URL поиска

Некоторые темы и плагины используют не стандартный ?s=, а собственный путь. Перед добавлением правил в robots.txt и перед написанием условий проверьте реальный адрес, который генерирует сайт.

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

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

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

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

Главная идея простая: не пытайтесь лечить внутренний поиск одной настройкой. Сначала определите, нужен ли он пользователям, потом выберите способ закрытия, а после этого обязательно проверьте исходный код, статус ответа и поведение в Search Console.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее