Если нужно закрыть от индексации не только отдельные страницы, но и файлы, архивы или URL с параметрами, мета-тега noindex часто недостаточно. В таких случаях удобнее работать через HTTP-заголовок X-Robots-Tag: он применяется раньше, чем HTML, и подходит для сценариев, где вы не контролируете разметку страницы напрямую.
На практике это полезно для служебных страниц, PDF-файлов, страниц поиска по сайту, некоторых архивов и технических URL, которые не должны попадать в индекс. Ниже — как понять, нужен ли вам именно заголовок, а не обычный noindex, и как настроить его без лишнего риска.
Когда X-Robots-Tag лучше, чем meta robots
X-Robots-Tag работает на уровне ответа сервера. Это значит, что поисковый робот получает инструкцию ещё до загрузки HTML. Для WordPress это удобно в трёх случаях:
- нужно закрыть от индексации не HTML-страницу, а файл: PDF, изображение, архив;
- нужно задать правила для группы URL по шаблону, а не править шаблон темы;
- нужно закрыть технические страницы, которые генерируются плагином или сервером.
Если задача простая — например, закрыть одну запись или страницу — обычно достаточно мета-тега через SEO-плагин. Если же речь о наборе URL с параметрами, вложениях медиа или нестандартных ответах, заголовок даёт больше контроля.
Диагностика: что именно мешает индексации сейчас
Перед настройкой проверьте, что проблема действительно в отсутствии запрета на индексацию, а не в другом сигнале. Частая ошибка — закрывать URL в robots.txt и ждать, что он исчезнет из индекса. Запрет в robots.txt не гарантирует удаление уже известных страниц, а иногда мешает роботам увидеть noindex на самой странице.
Что проверить вручную
- отдаёт ли URL код
200 OK,301или404; - есть ли на странице мета-тег
robotsсnoindex; - возвращает ли сервер заголовок
X-Robots-Tag; - не закрыт ли URL в
robots.txtраньше, чем робот увидит инструкцию; - нет ли канонического адреса, который указывает на индексируемую страницу.
Проверить заголовки можно через DevTools, curl или любой HTTP-клиент. Для WordPress это особенно важно, если заголовок добавляется кодом в теме или плагине: визуально на странице вы его не увидите.
curl -I https://example.com/technical-page/В ответе ищите строку вида:
X-Robots-Tag: noindex, nofollowЕсли заголовка нет, значит правило не сработало или применяется не к тому URL.
Как добавить X-Robots-Tag в WordPress: рабочие варианты
Есть три нормальных пути: через сервер, через PHP-хук WordPress или через SEO-плагин, если он умеет это делать для нужного сценария. Для точечной настройки на уровне сайта чаще всего удобнее PHP-вариант: он прозрачен, его легко ограничить по условиям и не нужно править конфигурацию веб-сервера.
| Способ | Когда подходит | Минус |
|---|---|---|
| Конфиг сервера | Нужно закрыть файлы, архивы, целые шаблоны URL | Требует доступа к nginx/apache |
| PHP в WordPress | Нужно закрыть отдельные типы страниц или условия | Не работает для статических файлов вне WordPress |
| SEO-плагин | Нужно управлять индексированием без кода | Не всегда покрывает нестандартные URL |
Вариант 1: добавить заголовок через WordPress
Если URL обслуживается WordPress, можно отправить заголовок через хук send_headers. Этот способ подходит для служебных страниц, результатов поиска, архивов автора или любых условных шаблонов.
<?php
add_action( 'send_headers', function () {
if ( is_search() || is_author() || is_tag() ) {
header( 'X-Robots-Tag: noindex, nofollow', true );
}
if ( is_page( 'thank-you' ) ) {
header( 'X-Robots-Tag: noindex, nofollow', true );
}
} );Здесь важно не переусердствовать. Если вы добавите заголовок на все страницы без разбора, поисковик перестанет индексировать сайт целиком. Лучше ограничивать условия явно и проверять каждый сценарий отдельно.
Вариант 2: настроить на уровне nginx
Если нужно закрыть от индексации PDF или другой файл по маске, удобнее сделать это в конфигурации сервера. Пример для nginx:
location ~* \.pdf$ {
add_header X-Robots-Tag "noindex, nofollow" always;
}Параметр always важен: без него заголовок может не добавляться на некоторые ответы, например при редиректах или ошибках. Для Apache логика аналогичная, но синтаксис будет другим и зависит от включённых модулей.
Вариант 3: закрыть вложения медиафайлов
Если в индексе появляются страницы вложений изображений, а они не нужны в поиске, можно закрыть именно attachment-страницы. В WordPress это делается отдельно от самих файлов. Для самих медиафайлов заголовок на уровне PHP не поможет, потому что они часто отдаются напрямую веб-сервером.
Для attachment-страниц можно использовать такой подход:
<?php
add_action( 'template_redirect', function () {
if ( is_attachment() ) {
header( 'X-Robots-Tag: noindex, nofollow', true );
}
} );Если при этом сами файлы должны оставаться доступными, не ставьте запрет на весь каталог с изображениями. Иначе можно сломать загрузку картинок на сайте и в письмах.
Пошаговая настройка без лишнего риска
- Определите тип URL: страница WordPress, архив, вложение или статический файл.
- Выберите уровень применения: сервер, PHP-хук или SEO-плагин.
- Добавьте правило только для нужных условий.
- Очистите кеш сайта, сервера и CDN, если он есть.
- Проверьте ответ заголовков через
curl -Iили DevTools. - Убедитесь, что страница не закрыта одновременно через
robots.txtиnoindexбез необходимости.
Если на сайте стоит кеширующий плагин или серверный кеш, после изменения правил обязательно сбросьте кеш. Иначе вы будете смотреть на старый ответ и решите, что код не работает.
Как проверить, что решение сработало
Проверка должна быть не визуальной, а технической. Откройте нужный URL и посмотрите заголовки ответа. В идеале вы должны увидеть именно тот набор директив, который задали: noindex, nofollow или другой вариант.
- через
curl -Iпроверьте наличиеX-Robots-Tag; - в DevTools откройте вкладку Network и посмотрите Response Headers;
- если используется SEO-плагин, сравните его настройки с фактическим ответом сервера;
- проверьте страницу в Search Console после переобхода, но не ждите мгновенного обновления индекса.
Если заголовок есть, но страница всё ещё отображается в поиске, это не всегда ошибка настройки. Поисковик может не обновить данные сразу. Важно убедиться, что новый ответ стабильно отдаётся при каждом запросе.
Частые ошибки и как их исправить
Закрыли URL в robots.txt и забыли про саму страницу
Это самая частая проблема. Если робот не может зайти на страницу, он может не увидеть инструкцию noindex. Для уже известных URL это часто приводит к тому, что страница остаётся в индексе дольше, чем ожидается. Исправление простое: не блокируйте такие URL в robots.txt, если хотите именно убрать их из индекса.
Добавили заголовок слишком широко
Иногда правило пишут на весь сайт, а потом обнаруживают, что из поиска пропали важные страницы. Проверяйте условия в коде: is_search(), is_attachment(), конкретные слаги страниц, маски файлов. Не используйте глобальный noindex без теста на staging.
Не учли кеш
Если на сайте есть page cache, CDN или reverse proxy, новый заголовок может не попасть в ответ сразу. После изменения правил очищайте все уровни кеша. Иначе диагностика будет ложной.
Путают canonical и noindex
canonical указывает предпочтительный URL, но не запрещает индексацию сам по себе. Если задача — убрать страницу из поиска, нужен именно noindex или X-Robots-Tag. Каноникал полезен для дублей, но не заменяет запрет на индексацию.
Безопасность и производительность
Сам по себе X-Robots-Tag почти не влияет на производительность, если правило написано аккуратно. Но есть практические нюансы. Не добавляйте тяжёлую логику в хук send_headers: там не должно быть запросов к базе, сложных циклов и внешних HTTP-вызовов. Условие должно отрабатываться быстро.
Если вы правите конфиг сервера, сначала сохраните резервную копию. Ошибка в nginx или Apache может положить сайт сильнее, чем неудачный PHP-код. Для production безопаснее сначала проверить правило на staging и только потом переносить его на боевой сайт.
Если нужен более широкий контроль над дублями, индексированием и технической чисткой, иногда удобнее использовать специализированный плагин вроде Clearfy Pro, но только если его настройки реально закрывают ваш сценарий. В любом случае проверяйте фактический HTTP-ответ, а не только галочки в админке.
Что делать, если заголовок не виден
Если X-Robots-Tag не появляется в ответе, проверьте по порядку:
- тот ли шаблон или условие срабатывает;
- не отправлены ли уже заголовки раньше в другом плагине или теме;
- не перехватывает ли ответ кеш;
- не обслуживается ли файл напрямую сервером, минуя WordPress;
- не стоит ли редирект, который меняет конечный URL.
В спорных случаях проще временно добавить тестовый заголовок и проверить его на отдельной странице. Если он виден там, значит проблема не в WordPress, а в условиях применения правила.