Ситуация типичная: часть страниц в WordPress не должна попадать в поиск, но закрывать весь сайт в robots.txt нельзя. Это может быть страница благодарности, внутренний поиск, служебные архивы, тестовые разделы, PDF-файлы или шаблоны, которые генерируют тонкий дублирующий контент. В таких случаях нужно не просто «спрятать» URL, а правильно выбрать способ запрета индексации.
На практике есть два рабочих уровня: meta robots в HTML-странице и заголовок X-Robots-Tag на уровне ответа сервера. Первый подходит для обычных страниц и записей. Второй удобен для файлов, архивов, REST-ответов, PDF и любых URL, где нет HTML-шаблона.
Когда проблема действительно в индексации, а не в сканировании
Ошибка многих администраторов в том, что они путают запрет индексации с запретом обхода. Если страница уже попала в индекс, одного Disallow в robots.txt часто недостаточно: поисковик может оставить URL в выдаче без сниппета. Для удаления из индекса нужен сигнал noindex или заголовок X-Robots-Tag: noindex.
Признаки, что нужен именно noindex
- в выдаче есть служебные страницы, которые не должны ранжироваться;
- в Search Console видны URL с пометкой «Просканировано, но не проиндексировано»;
- дубли создаются из-за параметров, пагинации, архивов или внутренних фильтров;
- нужно закрыть от индексации PDF, ZIP или другие файлы, которые отдает сервер.
Диагностика: что именно уже индексируется
Перед правками проверьте, какие URL реально доступны и какие мета-указания они отдают. Для HTML-страницы откройте исходный код и найдите <meta name="robots" ...>. Для файлов и нестандартных ответов проверьте заголовки ответа.
curl -I https://example.com/sample-page/В ответе ищите строки вроде X-Robots-Tag: noindex, nofollow. Если заголовка нет, а страница должна быть закрыта, значит правило еще не применено или его перебивает плагин, тема или серверная конфигурация.
Полезно также проверить, не ставит ли SEO-плагин свои директивы. В WordPress это часто происходит на уровне шаблона, а не в базе данных. Поэтому визуально страница может выглядеть закрытой, но в исходном коде останется index, follow.
Как закрыть отдельную страницу через meta robots
Если нужно закрыть конкретную страницу, запись или архив, удобнее всего добавить мета-тег через фильтр wp_robots. Это штатный способ для современных версий WordPress. Он не требует правки шаблона и не ломает обновления темы.
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_page( 123 ) || is_page( 'thank-you' ) ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Здесь можно использовать ID страницы, слаг или любое условие из шаблонных тегов WordPress: is_page(), is_single(), is_category(), is_search(). Для служебных страниц обычно достаточно noindex; nofollow добавляйте только если действительно не хотите передавать ссылки дальше.
Пример для внутреннего поиска и страницы благодарности
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_search() || is_page( 'thank-you' ) ) {
$robots['noindex'] = true;
}
return $robots;
} );Если на сайте уже работает SEO-плагин, не дублируйте директивы в нескольких местах. Иначе можно получить конфликт: один плагин ставит noindex, другой — index, а итог зависит от порядка вывода.
Как закрыть PDF, файлы и нестандартные URL через X-Robots-Tag
Для файлов и ответов без HTML лучше использовать заголовок X-Robots-Tag. В WordPress это можно сделать через хук send_headers. Такой подход особенно полезен, если медиафайлы доступны по прямым ссылкам и не должны индексироваться.
<?php
add_action( 'send_headers', function() {
if ( is_attachment() ) {
header( 'X-Robots-Tag: noindex, nofollow', true );
}
} );Если нужно закрыть только определенный тип вложений, лучше проверять MIME-тип или ID вложения. Например, для PDF:
<?php
add_action( 'send_headers', function() {
if ( is_attachment() ) {
$post = get_post();
if ( $post && get_post_mime_type( $post ) === 'application/pdf' ) {
header( 'X-Robots-Tag: noindex, nofollow', true );
}
}
} );Это не отменяет доступ к файлу для пользователей. Заголовок только сообщает поисковым системам, что URL не нужно индексировать.
Сравнение способов: что выбрать в конкретной задаче
| Способ | Где применять | Плюсы | Ограничения |
|---|---|---|---|
meta robots | Страницы, записи, архивы | Просто, штатно, удобно для шаблонов | Не подходит для файлов без HTML |
X-Robots-Tag | PDF, вложения, ответы сервера | Работает на уровне HTTP-заголовка | Нужно аккуратно встраивать в логику сайта |
robots.txt | Ограничение обхода | Полезен для экономии краулингового бюджета | Не гарантирует удаление URL из индекса |
Пошаговое решение без лишних рисков
- Определите точный тип URL: страница, архив, вложение, файл или параметрический адрес.
- Проверьте, есть ли уже директивы
noindexв SEO-плагине или теме. - Добавьте
wp_robotsдля HTML-страниц. - Добавьте
X-Robots-Tagдля файлов и вложений. - Очистите кеш страницы, объектный кеш и CDN, если они есть.
- Проверьте ответ сервера через
curl -Iи исходный код страницы. - Переобходите URL в Search Console только после того, как убедились, что директива уже отдается.
Проверка результата после внедрения
Проверять нужно не только в браузере. Браузер может показать старую версию из кеша, а поисковый робот увидит другой ответ. Минимальный набор проверок такой:
- в исходном коде страницы есть
meta name="robots"с нужной директивой; - в заголовках ответа присутствует
X-Robots-Tag, если вы его добавляли; - страница отдается с кодом
200, если она должна быть доступна пользователю; - в Search Console URL после переобхода меняет статус на исключенный из индекса или помечается как
noindex.
Для быстрой проверки HTML можно использовать:
curl -s https://example.com/thank-you/ | grep -i robotsДля заголовков:
curl -I https://example.com/wp-content/uploads/2026/01/file.pdfЧастые ошибки и как их исправить
Закрыли URL в robots.txt и ждете удаления из индекса
Это частая ошибка. Disallow запрещает обход, но не всегда удаляет уже известный URL. Если страница уже в индексе, добавьте noindex на сам URL или временно дайте роботу возможность увидеть директиву.
Ставите noindex и одновременно блокируете страницу в robots.txt
Так делать не стоит, если цель — именно убрать URL из индекса. Робот может не увидеть noindex, потому что ему закрыт доступ к странице. Сначала дайте ему прочитать директиву, потом ограничивайте обход, если это действительно нужно.
Добавляете директивы в несколько плагинов сразу
Если SEO-плагин, тема и кастомный код одновременно управляют robots-метатегом, итог становится непредсказуемым. Оставьте один источник истины: либо SEO-плагин, либо собственный код.
Не чистите кеш после правок
На сайтах с кешированием старый meta robots может висеть еще долго. После изменения директив обязательно сбросьте кеш плагина, серверный кеш и CDN, если он используется.
Безопасность и производительность
Сама директива noindex не нагружает сайт, но неправильная реализация может создать лишние запросы и конфликтующие условия. Если вы добавляете логику в тему, держите ее в дочерней теме или в небольшом mu-plugin, чтобы не потерять настройки при обновлении.
Для массовых правил лучше не проверять десятки условий на каждом запросе без необходимости. Если речь о нескольких служебных страницах, достаточно простых условных тегов WordPress. Если список URL большой, удобнее вынести его в массив и обрабатывать централизованно.
<?php
add_filter( 'wp_robots', function( array $robots ) {
$noindex_pages = array( 'thank-you', 'print-version', 'internal-search' );
if ( is_page( $noindex_pages ) ) {
$robots['noindex'] = true;
}
return $robots;
} );Если нужен более широкий контроль над дублями и техническими директивами, иногда проще использовать SEO-инструмент с нормальной поддержкой robots и canonical. Например, в Clearfy Pro есть полезные настройки для технической чистки сайта и управления дублями, но даже там важно понимать, что именно вы закрываете и почему.
Что должно получиться в итоге
Правильно настроенная индексация выглядит так: нужные страницы доступны пользователям, но не попадают в поиск; файлы и вложения отдают корректный X-Robots-Tag; в коде нет конфликтующих директив; после очистки кеша и переобхода поисковик видит именно ту версию, которую вы задали. Если этого не происходит, проблема почти всегда в одном из трех мест: кеш, конфликт плагинов или неверно выбранный способ закрытия URL.