Как настроить X-Robots-Tag в WordPress для отдельных страниц и типов записей

Если нужно закрыть от индексации не весь сайт, а только отдельные URL — PDF-файлы, вложения, служебные страницы, архивы или конкретные типы записей, X-Robots-Tag часто удобнее, чем править шаблоны и разбрасывать noindex по теме. Заголовок можно отдать на уровне сервера, а в WordPress оставить логику только для тех случаев, где она действительно нужна.

Это особенно полезно, когда у сайта уже есть sitemap, каноникал и базовая настройка индексации, но в индекс всё равно попадают технические URL: медиафайлы, страницы вложений, тестовые документы, выгрузки, старые архивы. В таких сценариях проще управлять ответом сервера, чем пытаться закрыть каждую страницу отдельно через шаблоны.

Когда X-Robots-Tag лучше, чем noindex в шаблоне

X-Robots-Tag работает как HTTP-заголовок. По сути, поисковик получает инструкцию до загрузки HTML. Это удобно, если:

  • нужно закрыть от индексации не HTML-страницу, а файл, например .pdf;
  • нужно применить правило ко всем URL определённого шаблона;
  • не хочется вносить изменения в тему ради одной технической задачи;
  • на сайте несколько шаблонов и легко забыть добавить noindex в один из них;
  • нужно быстро проверить гипотезу без редактирования контента.

Но это не замена всем способам сразу. Если страница уже в индексе, одного заголовка может быть недостаточно: иногда нужен ещё noindex в HTML, корректный canonical или удаление URL через инструменты поисковой системы. Для новых URL заголовок обычно работает предсказуемее.

Диагностика: что именно нужно закрыть

Перед настройкой стоит понять, где проблема. Иначе легко закрыть лишнее и потерять полезные страницы.

Проверьте тип URL

Сначала ответьте на три вопроса:

  • это HTML-страница, файл или архив?
  • URL генерирует WordPress или его отдаёт веб-сервер напрямую?
  • нужно закрыть только индексацию или ещё и переходы по ссылкам из поисковика?

Например, для вложений WordPress часто создаёт отдельные страницы. Их можно закрыть на уровне шаблона, но если у вас много медиафайлов и часть из них доступна как прямые файлы, удобнее добавить заголовок на уровне сервера для конкретного каталога или расширения.

Проверьте текущие заголовки

До изменений посмотрите, что уже отдаёт сервер:

curl -I https://example.com/sample-page/

В ответе ищите строки вроде X-Robots-Tag, Cache-Control, Content-Type. Если заголовок уже есть, не добавляйте второй конфликтующий вариант. Поисковик может получить разные инструкции в зависимости от слоя кеша или конфигурации сервера.

Какие варианты настройки реально работают

Есть три практических подхода: через сервер, через PHP в WordPress и через плагин. Выбор зависит от того, где именно находится проблемный URL.

ПодходКогда использоватьПлюсМинус
Конфиг сервераДля файлов, каталогов, шаблонов URLБыстро и независимо от темыНужен доступ к конфигу
PHP-хук в WordPressДля страниц, архивов, типов записейГибко и без правок шаблоновНе подходит для прямых файлов
ПлагинЕсли нужно без кодаПроще для редактораМеньше контроля, лишняя зависимость

Если задача точечная и техническая, я бы начал с PHP-хука. Если нужно закрыть PDF или каталог загрузок — с сервера.

Пошаговое решение в WordPress через PHP

Для страниц и архивов можно добавить заголовок через хук send_headers. Это штатный WordPress-хук, он срабатывает до отправки заголовков ответа.

add_action( 'send_headers', function () {
    if ( is_admin() ) {
        return;
    }

    if ( is_attachment() ) {
        header( 'X-Robots-Tag: noindex, nofollow', true );
        return;
    }

    if ( is_post_type_archive( 'download' ) ) {
        header( 'X-Robots-Tag: noindex, follow', true );
        return;
    }

    if ( is_page( array( 'thank-you', 'print-version' ) ) ) {
        header( 'X-Robots-Tag: noindex, nofollow', true );
        return;
    }
} );

Что здесь важно:

  • is_attachment() закрывает страницы вложений, а не сами файлы;
  • is_post_type_archive() полезен для архивов кастомных типов записей;
  • header() должен вызываться до вывода HTML, иначе будет предупреждение о заголовках;
  • не ставьте nofollow без причины — для большинства технических страниц достаточно noindex, follow.

Если нужен заголовок только для конкретного шаблона, можно проверить is_page_template():

add_action( 'send_headers', function () {
    if ( is_page_template( 'templates/landing-print.php' ) ) {
        header( 'X-Robots-Tag: noindex, nofollow', true );
    }
} );

Такой вариант полезен для посадочных страниц, которые не должны попадать в индекс, но при этом остаются доступными пользователям по прямой ссылке.

Настройка на уровне сервера для PDF и файлов

Если проблема в медиафайлах, WordPress-проверки уже не помогут. Для Apache можно добавить правило в .htaccess или конфиг виртуального хоста:

<FilesMatch "\.(pdf|docx|xlsx)$">
    Header set X-Robots-Tag "noindex, nofollow"
</FilesMatch>

Для Nginx логика обычно задаётся через location:

location ~* \\.(pdf|docx|xlsx)$ {
    add_header X-Robots-Tag "noindex, nofollow" always;
}

Здесь есть важная деталь: в Nginx нужен параметр always, иначе заголовок может не добавиться на часть ответов, например при ошибках или некоторых типах кеширования.

Как проверить, что всё сработало

После внедрения не ограничивайтесь визуальной проверкой в браузере. Нужен ответ сервера.

  1. Откройте проблемный URL через curl -I.
  2. Убедитесь, что в ответе есть нужный X-Robots-Tag.
  3. Проверьте, не перезаписывает ли его кеш-плагин или CDN.
  4. Посмотрите исходный HTML: если вы рассчитывали только на заголовок, в коде страницы не должно быть противоречащего meta robots.
  5. Если URL уже в индексе, проверьте статус в панели вебмастера не раньше чем после переобхода.

Пример проверки:

curl -I https://example.com/wp-content/uploads/2024/09/manual.pdf

В ответе ожидайте что-то вроде:

X-Robots-Tag: noindex, nofollow

Если заголовок не виден, проверьте три места: конфиг веб-сервера, кеширующий плагин и CDN. Часто именно они отдают старый ответ.

Частые ошибки и как их исправить

Заголовок добавили, но страница всё равно индексируется

Это типичная ситуация для уже известных поисковику URL. Заголовок не удаляет запись мгновенно. Нужен повторный обход, а иногда и дополнительное действие: убрать внутренние ссылки, обновить sitemap, проверить canonical и дождаться переобхода.

Используют noindex, nofollow везде подряд

Так делают из осторожности, но часто без пользы. Для служебных страниц обычно достаточно noindex, follow. Если закрыть ещё и переходы по ссылкам, поисковик хуже проходит по связанным страницам, особенно если это важные навигационные узлы.

Добавили правило в WordPress, но файл всё равно открыт

PHP-хук не влияет на прямую раздачу файлов из /uploads/. Для PDF, изображений и архивов нужен серверный уровень или отдельная логика в веб-сервере.

Конфликт с кешем

Если на сайте включён page cache, заголовок может не обновиться сразу. После изменения очистите кеш плагина, серверный кеш и CDN. Иначе вы будете проверять старый ответ и думать, что код не работает.

Смешали meta robots и X-Robots-Tag

Если в HTML стоит index, follow, а заголовок отдаёт noindex, лучше не оставлять такой конфликт. Для технических URL выберите один источник истины и придерживайтесь его. На практике для файлов — заголовок, для HTML-страниц — либо заголовок, либо meta robots, но не оба варианта без необходимости.

Практические советы по безопасности и производительности

Не используйте X-Robots-Tag как способ спрятать чувствительные данные. Если файл не должен быть доступен вообще, закрывайте его авторизацией, ограничением по правам или переносом из публичного каталога. noindex не защищает от прямого доступа по URL.

Для больших сайтов лучше держать правила максимально короткими и предсказуемыми. Чем меньше условий в send_headers, тем проще отлаживать поведение и тем ниже риск случайно закрыть полезную страницу.

Если вам нужно не только закрыть дубли и служебные URL, но и убрать лишние технические следы в WordPress, иногда удобнее собрать это в одном инструменте. Например, Clearfy Pro закрывает часть типовых SEO-задач и чистки сайта, но для точечных серверных правил всё равно полезно понимать, что именно происходит на уровне ответа.

Что проверить после внедрения

  • заголовок виден в curl -I;
  • кеш не подменяет новый ответ старым;
  • в sitemap нет URL, которые вы только что закрыли;
  • внутренние ссылки не ведут массово на закрытые страницы;
  • в панели вебмастера URL уходит из индекса после переобхода.

Если всё это сходится, настройка сделана правильно: поисковик получает однозначный сигнал, а вы не трогаете шаблоны и не плодите лишний код в теме.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отловить и удалить слабые ссылки в WordPress перед индексацией
08.09.2026
Как убрать дубли страниц в WordPress через canonical и noindex
05.09.2026
Как запретить индексацию страниц автора в WordPress
21.09.2026
Как запретить индексацию параметров фильтров и сортировки в WordPress
14.09.2026
Как настроить X-Robots-Tag в WordPress для отдельных страниц и типов записей
24.09.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше