wplinks.ru wordpress WPLinks.ru

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

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

Если задача именно в том, чтобы убрать из индекса внутренние страницы поиска, лучше не ограничиваться одним robots.txt. Для таких URL надежнее сочетать meta robots или заголовок X-Robots-Tag с нормальной обработкой самого шаблона поиска.

Какие URL обычно надо закрывать

Сначала стоит понять, что именно генерирует дубли. На практике это не только стандартный поиск WordPress, но и страницы, которые выглядят как поиск, хотя формально ими не являются.

  • / ?s=... — стандартный поиск WordPress;
  • страницы поиска внутри рубрик или таксономий, если тема добавляет свои параметры;
  • результаты фильтров в каталогах и архивах;
  • страницы с пустой выдачей, которые всё равно отдаются с кодом 200;
  • URL с сортировкой и поиском одновременно, если они индексируются как отдельные страницы.

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

Проверьте, какие URL уже попали в индекс и как они отдаются сервером. Для этого достаточно нескольких ручных проверок:

  • введите в поиск сайта заведомо редкий запрос и посмотрите URL в адресной строке;
  • откройте исходный код страницы и найдите meta name="robots";
  • проверьте заголовки ответа через curl -I или DevTools;
  • сравните, отдает ли страница поиска 200 OK даже при пустой выдаче.
curl -I "https://example.com/?s=test"

Если в ответе нет X-Robots-Tag: noindex, а в HTML нет noindex, поисковик может продолжить обход таких страниц, особенно если на них есть внутренние ссылки.

Что лучше: robots.txt, meta robots или X-Robots-Tag

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

ПодходКогда подходитОграничение
robots.txtЧтобы сократить обход мусорных URLНе гарантирует удаление из индекса
meta robots noindexДля HTML-страниц поискаСтраница должна быть доступна для обхода
X-Robots-Tag: noindexДля шаблонов и ответов, где удобнее управлять заголовкомНужно аккуратно вешать только на нужные URL

Если у вас обычный поиск WordPress, чаще всего достаточно добавить noindex, follow на сам шаблон поиска. Если поиск строится через AJAX или отдельный endpoint, может понадобиться заголовок X-Robots-Tag.

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

Ниже вариант для темы или небольшого mu-plugin. Он закрывает стандартные страницы поиска и оставляет ссылки на сайте доступными для обхода.

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

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

Если тема уже выводит собственный meta robots, лучше не дублировать теги. В таком случае оставьте только фильтр wp_robots, который WordPress использует штатно в современных версиях.

Если нужен заголовок X-Robots-Tag

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

<?php
add_action('send_headers', function () {
    if (is_search()) {
        header('X-Robots-Tag: noindex, follow', true);
    }
});

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

Как закрыть только вложенный поиск, а не весь сайт

Если у вас есть поиск внутри рубрик, каталога или кастомного архива, ориентируйтесь не на is_search(), а на конкретный параметр запроса. Например, если тема использует post_type или собственный query var, можно проверять их отдельно.

<?php
add_action('wp_head', function () {
    if (is_search() && get_query_var('post_type') === 'product') {
        echo "<meta name=\"robots\" content=\"noindex,follow\" />\n";
    }
});

Такой подход удобен, когда обычный поиск по сайту нужен в индексе не всегда, а вот поиск по внутреннему каталогу или фильтрам — точно нет. Но проверяйте, как именно тема формирует URL: иногда нужный параметр лежит не в post_type, а в другом query var.

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

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

  1. Откройте страницу поиска в браузере и проверьте исходный код.
  2. Убедитесь, что есть noindex,follow в meta robots или в заголовке ответа.
  3. Проверьте страницу через curl -I и убедитесь, что заголовок действительно отдается.
  4. Посмотрите, не осталось ли в теме второго тега robots, который конфликтует с вашим.
  5. Если URL уже был в индексе, отправьте его на повторную проверку в панели вебмастера.
curl -I "https://example.com/?s=term"

Если страница всё ещё индексируется, проверьте, не закрыта ли она одновременно в robots.txt. Для удаления уже известных URL поисковику часто нужен доступ к странице, чтобы он увидел noindex.

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

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

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

Добавили noindex на все страницы

Такое случается, если условие написано слишком широко. Например, вместо is_search() используют общий хук без проверки контекста. В результате закрываются обычные записи, страницы и архивы.

Дублируется meta robots

Некоторые SEO-плагины и тема одновременно выводят свои теги. Тогда поисковик может получить конфликтующие указания. Оставьте один источник управления: либо штатный фильтр WordPress, либо настройки SEO-плагина.

Закрыли страницу, но оставили на нее внутренние ссылки

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

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

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

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

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

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

×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее