Страницы внутреннего поиска в WordPress часто попадают в индекс случайно: пользователь вводит запрос, поисковик находит URL вида ?s=, а дальше в индексе появляются пустые, дублирующие или бесполезные страницы. Для небольшого сайта это выглядит как техническая мелочь, но на практике такие URL создают лишний шум в отчётах Search Console и мешают контролировать краулинг.
Если у вас уже есть статьи про архивы авторов и таксономии, здесь задача другая: не закрыть раздел сайта целиком, а убрать именно результаты внутреннего поиска из индекса и при этом не сломать сам поиск для пользователей.
Когда это действительно проблема
Проверять нужно не по ощущениям, а по фактам. Откройте поиск по сайту и посмотрите, как формируется URL. В типичной установке WordPress это что-то вроде https://site.ru/?s=запрос. Если такие адреса уже есть в индексе, они обычно дают мало пользы и часто имеют низкое качество сниппета.
Признаки, что страницы поиска лучше закрыть
- в отчёте Search Console есть URL с параметром
s; - в поиске по сайту появляются страницы с тонким или повторяющимся контентом;
- краулер тратит время на бесполезные результаты поиска вместо важных страниц;
- в логах видно много запросов к URL поиска от ботов.
Важно не путать индексацию страницы поиска и саму функцию поиска. Пользователи должны продолжать искать по сайту, а поисковым системам обычно не нужно индексировать такие страницы.
Что лучше: meta robots, заголовки или редирект
Для этой задачи есть несколько рабочих подходов. Редиректить все страницы поиска на главную — плохая идея: пользовательский сценарий ломается, а поисковик получает неочевидное поведение. Надёжнее отдавать для результатов поиска заголовок noindex, follow или HTTP-заголовок X-Robots-Tag для конкретных URL.
| Способ | Когда подходит | Минус |
|---|---|---|
| Плагин SEO | Если уже используете SEO-плагин и не хотите писать код | Не всегда удобно точечно контролировать внутренний поиск |
| Код в теме или мини-плагине | Если нужен точный контроль без лишних зависимостей | Нужно аккуратно тестировать после обновлений |
| Редирект | Почти никогда для внутреннего поиска | Ломает пользовательский сценарий |
Если у вас уже стоит SEO-плагин, сначала проверьте его настройки. Но если нужен предсказуемый результат без привязки к конкретному плагину, проще добавить код.
Пошаговое решение через код
Ниже вариант, который добавляет noindex, follow только на страницы поиска. Его можно положить в functions.php дочерней темы или в небольшой mu-plugin.
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
}
});Этот способ подходит, если поисковики корректно читают head страницы. Но для надёжности лучше дополнительно отдать HTTP-заголовок. Тогда даже если шаблон изменится, правило останется в ответе сервера.
<?php
add_filter('wp_headers', function ($headers) {
if (is_search()) {
$headers['X-Robots-Tag'] = 'noindex, follow';
}
return $headers;
});Если хотите закрыть только пустые результаты поиска, а не все страницы поиска, логика будет другой. Тогда проверяйте, есть ли записи в have_posts(), и ставьте noindex только на пустые выдачи. Но в большинстве проектов проще и чище закрыть все URL поиска целиком.
Если используете SEO-плагин
В популярных SEO-плагинах обычно есть настройка для noindex архивов и служебных страниц. Ищите именно опцию для search pages, а не для обычных записей. После включения не полагайтесь на интерфейс — проверьте исходный код страницы и HTTP-ответ.
Если в проекте уже есть Clearfy Pro, его удобно использовать для технической чистки и управления дублями, но всё равно проверяйте, как именно он влияет на поиск и не конфликтует ли с SEO-плагином. Для таких задач важен не бренд, а конкретный итоговый ответ сервера.
Как проверить, что решение сработало
Проверка должна быть в двух плоскостях: HTML и HTTP. Сначала откройте страницу поиска в браузере и посмотрите исходный код. В <head> должен появиться meta robots. Затем проверьте заголовки ответа.
curl -I "https://site.ru/?s=test"В ответе ищите строку вроде X-Robots-Tag: noindex, follow. Если заголовка нет, значит код не сработал или условие было написано не там, где нужно.
Дополнительно проверьте:
- страница поиска открывается для пользователя без редиректа;
- в HTML есть
noindex, follow; - в Search Console URL постепенно уходит из индекса после переобхода;
- внутренний поиск продолжает работать и выдаёт результаты.
Частые ошибки и как их исправить
Код вставили в неправильное место
Если добавить условие слишком рано, до инициализации запроса, is_search() может не отработать как ожидается. Надёжнее использовать хуки, которые срабатывают уже после формирования основного запроса, например wp_head для meta-тега и wp_headers для заголовка.
Закрыли поиск редиректом на главную
Это частая ошибка. Пользователь вводит запрос, а вместо результатов получает главную страницу. Для поисковика это выглядит как слабый сигнал качества, а для аналитики — как потеря данных о реальном поведении.
Поставили noindex только в robots.txt
robots.txt не гарантирует удаление URL из индекса, если он уже известен поисковику. Для удаления из индекса нужен именно noindex в ответе страницы или заголовок X-Robots-Tag.
Забыли про параметрические URL
Иногда поиск формируется не только через ?s=, но и через дополнительные параметры фильтрации. Если у вас есть кастомный поиск или плагины фильтров, проверьте все варианты URL, которые реально генерируются на сайте.
Что учесть для безопасности и производительности
Если вы добавляете код вручную, не правьте родительскую тему напрямую. После обновления изменения пропадут. Лучше использовать дочернюю тему или небольшой mu-plugin. Для технических правил это самый предсказуемый вариант.
Ещё один практический момент: не плодите несколько решений одновременно. Если SEO-плагин уже ставит noindex, а вы сверху добавляете свой meta-тег и заголовок, итог может быть неочевидным. Сначала проверьте, что именно уже отдаёт сайт, и только потом вносите правки.
Для больших сайтов полезно периодически смотреть логи и отчёты краулинга. Если бот регулярно ходит по страницам поиска, возможно, у вас есть внутренние ссылки на такие URL — например, из шаблона поиска, виджетов или старых страниц с параметрами.
Короткий чек-лист перед публикацией
- проверить, как выглядит URL поиска на сайте;
- добавить
noindex, followв HTML или заголовок ответа; - убедиться, что поиск для пользователей не сломан;
- проверить исходный код и
curl -I; - посмотреть, нет ли конфликтов с SEO-плагином;
- после обновления шаблона повторно проверить страницу поиска.
Если нужен более широкий технический контроль над дублями, служебными страницами и индексацией, такие задачи часто удобнее решать вместе с общей SEO-чисткой сайта. Но для внутреннего поиска главное — не усложнять: одно правило, одна проверка, один понятный результат.