Страницы внутреннего поиска в WordPress часто становятся мусорным слоем в индексе: у них нет стабильного контента, они плодят дубли по разным запросам и забирают краулинговый бюджет. Проблема обычно всплывает после проверки Search Console или когда в поиске находятся URL вида ?s= и их вариации.
Если задача не в том, чтобы полностью отключить поиск на сайте, а именно убрать его страницы из индекса, важно выбрать способ, который не сломает сам поиск и не создаст новые дубли. Ниже — рабочая схема для типичного WordPress-сайта.
Когда внутренний поиск начинает вредить индексации
Чаще всего в индекс попадают не только URL с параметром s, но и страницы пагинации поиска, сортировки или фильтрации, если тема или плагин добавляют к ним дополнительные параметры. В результате поисковики видят десятки почти одинаковых страниц с разными запросами, а не полезные посадочные.
Как понять, что проблема именно в поиске
Проверьте несколько признаков:
- в Search Console есть URL с
?s=или/search/; - в выдаче находятся страницы поиска с пустым или почти пустым сниппетом;
- в логах обхода много запросов к поисковым URL, но мало переходов;
- на сайте есть виджет поиска, а тема генерирует отдельные страницы результатов.
Если URL поиска уже индексируются, простого удаления из sitemap обычно недостаточно. Нужен явный сигнал для роботов: либо noindex, либо запрет обхода, либо оба механизма вместе — в зависимости от того, как устроен сайт.
Что лучше: robots.txt, meta robots или серверное правило
У каждого варианта своя роль. Не стоит закрывать поиск только через robots.txt, если URL уже в индексе: робот может перестать обходить страницу, но не всегда быстро уберёт её из выдачи. С другой стороны, если поставить только noindex, поисковик должен сначала зайти на страницу и увидеть мета-тег.
| Способ | Когда подходит | Минус |
|---|---|---|
noindex в HTML | Если поиск должен работать, но не индексироваться | Нужно, чтобы робот мог обойти страницу |
robots.txt | Если нужно сократить обход мусорных URL | Не гарантирует удаление уже проиндексированных страниц |
| Редирект или 404/410 | Если поиск на сайте больше не нужен | Меняет поведение для пользователей |
Для большинства сайтов с рабочим поиском разумнее начать с noindex, follow для страниц результатов поиска и дополнительно ограничить их попадание в sitemap.
Пошаговое решение для WordPress
Ниже вариант без выдуманных хуков и без привязки к конкретной теме. Код можно добавить в дочернюю тему или в небольшой mu-plugin, если не хотите зависеть от обновлений темы.
1. Добавьте meta robots для страниц поиска
WordPress умеет определять страницу результатов поиска через is_search(). На таких страницах можно вывести noindex, follow, чтобы поисковик не индексировал результаты, но мог переходить по ссылкам внутри них.
<?php
add_action( 'wp_head', function () {
if ( is_search() ) {
echo '<meta name="robots" content="noindex,follow">' . "\n";
}
}, 1 );Этот вариант подходит, если тема не выводит собственный robots-tag и если вы не используете SEO-плагин, который уже управляет мета-тегами. Если SEO-плагин есть, проверьте его настройки: дублировать директивы не нужно.
2. Уберите поисковые URL из sitemap
Если sitemap формируется плагином или SEO-модулем, убедитесь, что туда не попадают страницы поиска. В стандартном WordPress страницы результатов поиска в sitemap обычно не попадают, но сторонние решения могут добавлять их ошибочно через кастомные правила.
Если у вас есть собственная генерация sitemap, исключайте URL, которые содержат поисковый параметр s или относятся к шаблону поиска. Важно не просто скрыть их от пользователя, а именно не отдавать в карту сайта.
3. Ограничьте обход в robots.txt, если URL создают нагрузку
Если поисковые URL массово генерируются ботами и создают лишнюю нагрузку, можно добавить точечный запрет на обход. Это не замена noindex, а дополнительный слой для экономии краулинга.
User-agent: *
Disallow: /*?s=
Disallow: /search/Синтаксис с параметрами в robots.txt поддерживается не всеми роботами одинаково, поэтому не стоит рассчитывать только на него. Но как дополнительная мера он полезен, особенно если сайт получает много мусорных запросов.
4. Если поиск не нужен, отдавайте 410 или редирект
Когда внутренний поиск отключён на уровне UX, лучше не оставлять пустые страницы результатов. В таком случае логичнее вернуть 410 Gone или сделать редирект на релевантную категорию, если запрос можно однозначно сопоставить с разделом.
<?php
add_action( 'template_redirect', function () {
if ( is_search() ) {
status_header( 410 );
nocache_headers();
include get_query_template( '404' );
exit;
}
} );Этот вариант подходит только если вы действительно готовы убрать поиск как функциональность. Для обычного сайта с поиском по каталогу или блогу лучше не использовать 410 без необходимости.
Блок диагностики: что проверить до и после правки
Перед внедрением полезно зафиксировать исходное состояние. Иначе потом сложно понять, сработало ли решение или поисковик просто ещё не переобошёл страницы.
- откройте несколько URL поиска вручную и проверьте исходный HTML;
- посмотрите, есть ли в коде страницы
<meta name="robots" content="noindex,follow">; - проверьте, не перекрывает ли его SEO-плагин;
- убедитесь, что поисковые URL не попали в sitemap;
- проверьте ответ сервера: 200, 301, 404 или 410 — в зависимости от выбранной схемы.
Если у вас есть доступ к консоли, можно быстро проверить заголовки и код ответа:
curl -I "https://example.com/?s=wordpress"
Для страниц с noindex ответ обычно остаётся 200 OK, а для отключённого поиска — уже другой код, например 410 Gone.
Как проверить, что решение сработало
После внедрения не ждите мгновенного исчезновения URL из выдачи. Сначала проверьте техническую сторону:
- откройте страницу поиска в браузере и посмотрите исходный код;
- убедитесь, что мета-тег robots присутствует именно на поисковых страницах, а не на всём сайте;
- проверьте, что sitemap не содержит URL поиска;
- в Search Console отправьте URL на повторную проверку, если они уже были проиндексированы;
- через несколько обходов посмотрите, уменьшается ли число таких URL в отчётах.
Если страницы всё ещё индексируются, обычно причина одна из трёх: тег не выводится, его перезаписывает плагин, либо URL закрыт в robots.txt, но уже висит в индексе и не получает новый обход.
Частые ошибки и как их исправить
Закрыли только robots.txt
Это самая частая ошибка. Если URL уже в индексе, одного запрета на обход мало. Добавьте noindex или верните 404/410, если поиск больше не нужен.
Поставили noindex на весь сайт
Иногда разработчики вставляют мета-тег слишком грубо и закрывают не только поиск, но и обычные страницы. Проверяйте условие is_search() и тестируйте несколько типов страниц.
Конфликт с SEO-плагином
Если на сайте уже стоит SEO-плагин, он может управлять robots-meta самостоятельно. В этом случае либо используйте его настройки, либо отключите ручной вывод тега в теме. Два разных источника директив часто дают непредсказуемый результат.
Поисковые URL всё ещё попадают в sitemap
Это бывает при кастомной генерации карты сайта или при подключении стороннего модуля. Проверьте, не формируется ли sitemap отдельно для шаблона поиска, и исключите его на уровне генератора.
Практические советы по безопасности и производительности
Если внутренний поиск на сайте активно используют боты, он может создавать лишнюю нагрузку. В таком случае полезно ограничить частоту запросов на уровне сервера или WAF, но без фанатизма: не блокируйте обычных пользователей по одному только параметру s.
Ещё один рабочий приём — логировать самые частые поисковые запросы и смотреть, не генерируют ли они пустые результаты. Если запросы однотипные и мусорные, можно доработать поиск: добавить минимальную длину запроса, нормальную обработку пустых результатов и более строгую фильтрацию.
Если вам нужен более широкий набор технических правок для SEO и чистки сайта, часть задач можно закрывать через Clearfy Pro, но для закрытия именно страниц поиска всё равно полезно понимать, что происходит на уровне шаблона и индексации: автоматический плагин не заменяет проверку ответа сервера и исходного HTML.
В итоге рабочая схема выглядит так: noindex для страниц поиска, исключение из sitemap, при необходимости ограничение в robots.txt, а если поиск не нужен — честный 410 или редирект. Это проще поддерживать, чем потом вручную вычищать мусорные URL из индекса.