Страница поиска в WordPress часто становится источником мусорных URL: ?s=, пустые запросы, длинные хвосты из случайных фраз, а иногда и дубли с параметрами фильтров. Для небольшого сайта это незаметно, но на живом проекте такие страницы начинают попадать в отчёты сканирования и мешают нормальной индексации. Если задача именно в том, чтобы убрать внутренний поиск из индекса, лучше решать её на уровне шаблона и HTTP-ответа, а не только мета-тегом.
Когда проблема действительно есть
Сначала проверьте, что у вас индексируются именно поисковые страницы, а не просто есть запросы к ним в логах. Откройте в браузере несколько вариантов:
https://site.ru/?s=тестhttps://site.ru/search/тест/, если у темы или плагина включён красивый поиск;- пустой поиск без запроса, если форма отправляет пустое значение.
Если страница отдаёт полноценный HTML с заголовком, хлебными крошками и списком записей, поисковый робот может её обойти и сохранить в индексе. Если же там пустая выдача или техническая страница без смысла для пользователя, её лучше закрыть от индексации и, при необходимости, от сканирования.
Что смотреть в диагностике
- Есть ли в коде страницы
<meta name="robots" content="noindex,follow">. - Не отдаёт ли поиск статус
200 OKдля пустого запроса. - Не создаёт ли тема отдельный шаблон поиска с лишними блоками и ссылками.
- Не генерируются ли дубли через параметры сортировки, фильтров или пагинации.
Что лучше: мета-robots, заголовок X-Robots-Tag или редирект
Для внутреннего поиска обычно не нужен жёсткий редирект на главную. Это ломает пользовательский сценарий и может мешать отладке. Чаще всего достаточно noindex,follow, чтобы робот не добавлял страницу в индекс, но мог пройти по ссылкам внутри неё. Если нужно закрыть ещё и сам обход, тогда используют X-Robots-Tag на уровне ответа сервера или плагина безопасности/SEO.
| Подход | Когда подходит | Минус |
|---|---|---|
Мета-тег noindex,follow |
Обычный внутренний поиск | Страница всё ещё может обходиться роботом |
X-Robots-Tag |
Нужно управлять индексированием на уровне ответа | Сложнее отлаживать без доступа к серверу |
| Редирект | Пустой поиск или технический мусор | Ломает сценарий поиска, если применять без разбора |
Пошаговое решение через код темы или мини-плагин
Надёжный вариант — добавить noindex,follow только для поисковых страниц. Для этого не нужно трогать robots.txt: запрет в robots.txt не гарантирует удаление URL из индекса, если он уже известен поисковику. Лучше управлять ответом страницы.
<?php
add_filter('wp_robots', function (array $robots): array {
if (is_search()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});
Если тема старая и не использует wp_robots, можно добавить мета-тег вручную в wp_head. Но это запасной вариант, потому что фильтр wp_robots уже встроен в WordPress и работает чище.
<?php
add_action('wp_head', function () {
if (is_search()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1);
Если поиск пустой — отдавайте 404 или 410 аккуратно
Пустой запрос ?s= часто не несёт пользы. В таком случае можно не показывать выдачу вообще. Но не делайте это для всех поисковых страниц: только для пустого запроса. Иначе пользователь не увидит результаты, когда реально ищет по сайту.
<?php
add_action('template_redirect', function () {
if (!is_search()) {
return;
}
$query = trim((string) get_search_query(false));
if ($query === '') {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include get_query_template('404');
exit;
}
});
Этот вариант уместен только если у вас действительно нет задачи показывать пустую страницу поиска. На контентных проектах это обычно правильнее, чем держать пустую выдачу с 200 OK.
Проверка результата после внедрения
После правки не ограничивайтесь просмотром исходника. Проверьте поведение в браузере и в инструментах для вебмастеров.
- Откройте страницу поиска и убедитесь, что в
<head>естьnoindex,follow. - Проверьте HTTP-ответ через DevTools или
curl -I. - Посмотрите, не изменился ли шаблон поиска и не сломались ли ссылки на результаты.
- В панели поисковой системы отправьте страницу на повторное сканирование, если она уже была в индексе.
curl -I "https://site.ru/?s=тест"
В ответе не обязательно должен быть отдельный заголовок X-Robots-Tag, если вы используете мета-тег. Главное — чтобы HTML реально содержал нужную директиву и страница не создавала лишние дубли.
Частые ошибки и как их исправить
Закрыли поиск в robots.txt и ждёте удаления из индекса
Это частая ошибка. Если URL уже известен поисковику, запрет в robots.txt не решает задачу полностью. Робот может перестать обходить страницу, но сам адрес ещё долго будет висеть в индексе без нормального управления сниппетом. Для удаления нужен noindex или корректный статус ответа.
Ставят редирект на главную для всех поисковых запросов
Так делать не стоит. Пользователь ввёл запрос, а его молча отправили на главную. Это ухудшает поведение на сайте и может ломать аналитику. Редирект допустим только для пустого поиска или явно мусорных запросов, если это обосновано.
Добавляют noindex в шаблон, но тема выводит другой head
В некоторых темах и конструкторах часть разметки собирается не через стандартный wp_head. Тогда мета-тег может не попасть в итоговый HTML. Проверяйте именно исходный код страницы, а не визуальный редактор шаблона.
Закрывают поиск, но оставляют дубли через параметры
Если у вас есть сортировка, фильтры или пагинация, они могут создавать отдельные URL на базе поиска. В таком случае одного noindex мало: нужно ещё посмотреть, не порождает ли тема лишние ссылки и не индексируются ли они отдельно.
Практические советы по безопасности и производительности
Поиск — это ещё и точка нагрузки. На слабом хостинге массовые запросы вида ?s= могут создавать лишнюю работу для базы данных. Если сайт часто получает мусорные запросы, имеет смысл ограничить пустой поиск и не отдавать тяжёлые шаблоны без необходимости.
- Не выводите на странице поиска лишние виджеты и тяжёлые блоки, если они не помогают найти контент.
- Не подключайте на поисковом шаблоне скрипты, которые нужны только на карточках записей.
- Если используете SEO-плагин, проверьте, не дублирует ли он ваши правила
noindex. - После правки очистите кэш страницы и объектный кэш, если он есть.
Если нужен более широкий контроль над дублями, техническими страницами и очисткой мусорных URL, удобнее держать это в одном месте — через SEO/cleanup-плагин или собственный мини-плагин. Но для внутреннего поиска базовая правка через wp_robots обычно закрывает задачу без лишней сложности.