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

Если в WordPress появляются технические страницы, PDF-файлы, выгрузки или URL с параметрами вроде ?utm_source=, одного noindex в HTML часто недостаточно. Для таких случаев удобнее использовать заголовок X-Robots-Tag: он работает на уровне ответа сервера и подходит для файлов, архивов и отдельных шаблонов, где в разметку метатег просто не попадёт.

Ниже — рабочая схема: как понять, где именно у вас индексируются лишние URL, как настроить заголовок через код или сервер, и как проверить, что поисковик действительно видит нужный запрет.

Когда X-Robots-Tag нужен, а когда нет

Этот заголовок полезен в трёх типичных сценариях:

  • нужно закрыть от индексации PDF, CSV, ZIP и другие файлы, которые отдаются не через шаблон WordPress;
  • нужно запретить индексацию страниц с параметрами, но оставить саму страницу доступной для пользователя;
  • нужно управлять индексацией на уровне ответа, а не в контенте, например для выгрузок или служебных маршрутов.

Если речь идёт о обычной записи или странице, чаще достаточно noindex в SEO-плагине или через wp_robots. Но когда URL создаётся вне шаблона, заголовок надёжнее.

Диагностика проблемы: что именно попадает в индекс

Сначала не трогайте код. Проверьте, какие URL реально индексируются и почему.

Что смотреть в первую очередь

  • отчёт «Страницы» в Google Search Console;
  • серверные логи или статистику обхода, если есть доступ;
  • ответ URL через curl -I или DevTools;
  • наличие дубликатов с параметрами ?replytocom=, ?amp, ?utm_*, ?filter=.

Пример проверки заголовков:

curl -I https://example.com/file.pdf

В ответе должен появиться заголовок вроде:

X-Robots-Tag: noindex, nofollow

Если его нет, поисковик может продолжать обходить и индексировать файл или страницу, особенно если на неё есть внутренние ссылки.

Какой способ выбрать: плагин, код или сервер

Для WordPress есть три нормальных пути. Выбор зависит от того, где именно формируется ответ.

ПодходКогда использоватьМинусы
SEO-плагинОбычные записи, страницы, архивыНе всегда работает для файлов и нестандартных ответов
Код в теме или мини-плагинеНужно точечно добавить заголовок для URL по условиюТребует аккуратной проверки и поддержки
Настройка сервераPDF, медиафайлы, служебные каталоги, nginx/apacheНужно иметь доступ к конфигу и понимать правила

Если у вас обычный сайт на WordPress, я бы начинал с кода в мини-плагине: так проще контролировать логику и не зависеть от темы.

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

Ниже пример, который добавляет X-Robots-Tag: noindex, nofollow для URL с GET-параметрами и для PDF-файлов, если они отдаются через WordPress.

<?php
/**
 * Plugin Name: WP Mentor Robots Headers
 */

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

    $request_uri = isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '';

    // Закрываем страницы с параметрами.
    if (strpos($request_uri, '?') !== false) {
        header('X-Robots-Tag: noindex, nofollow', true);
        return;
    }

    // Закрываем PDF, если файл отдается через WordPress.
    if (is_singular() && preg_match('~\.pdf$~i', $request_uri)) {
        header('X-Robots-Tag: noindex, nofollow', true);
    }
});

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

<?php
add_action('send_headers', function () {
    if (is_admin() || wp_doing_ajax() || wp_is_json_request()) {
        return;
    }

    $request_uri = isset($_SERVER['REQUEST_URI']) ? wp_unslash($_SERVER['REQUEST_URI']) : '';

    // Разрешаем конкретные параметры.
    $allowed = array('s', 'paged');
    $query_string = wp_parse_url($request_uri, PHP_URL_QUERY);

    if ($query_string) {
        parse_str($query_string, $params);
        $keys = array_keys($params);
        $diff = array_diff($keys, $allowed);

        if (!empty($diff)) {
            header('X-Robots-Tag: noindex, nofollow', true);
        }
    }
});

Если задача касается только медиафайлов, иногда проще настроить сервер. Для Apache это может выглядеть так:

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

Для nginx логика обычно задаётся через location или add_header, но там важно не сломать уже существующие заголовки и не дублировать правила в нескольких местах конфигурации.

Проверка результата после внедрения

После правки не ограничивайтесь визуальной проверкой. Нужны минимум три шага:

  1. проверьте заголовок через curl -I или DevTools;
  2. откройте URL в браузере и убедитесь, что страница доступна пользователю;
  3. посмотрите исходный ответ и убедитесь, что нет конфликтующего meta robots с противоположной директивой.

Команда для проверки:

curl -I "https://example.com/page/?utm_source=test"

Если всё сделано правильно, в ответе будет X-Robots-Tag, а в HTML при этом может не быть никакого метатега — это нормально.

Дальше проверьте Search Console. Если URL уже был в индексе, удаление не происходит мгновенно: поисковику нужно переобойти страницу и увидеть новый ответ сервера.

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

Заголовок добавили, но индекс не меняется

Чаще всего причина в том, что URL давно в индексе, а робот ещё не успел переобойти страницу. Проверьте, что заголовок реально отдаётся сейчас, и дождитесь повторного обхода. Если страница важная, можно отправить её на переобход вручную.

Закрыли не только параметры, но и нужные страницы

Это бывает, когда правило слишком широкое и срабатывает на любой URL с ?. Решение — сузить условие: проверять конкретные параметры, конкретные шаблоны или конкретные типы файлов.

Конфликт между noindex в HTML и заголовком

Если SEO-плагин ставит одно, а код — другое, поисковик получает смешанный сигнал. В таких случаях оставьте один источник правды. Для обычных страниц — либо SEO-плагин, либо wp_robots. Для файлов — только X-Robots-Tag.

Заголовок не виден из-за кеша

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

Чек-лист перед публикацией изменений

  • Проверен точный список URL, которые нужно закрыть.
  • Понятно, где формируется ответ: WordPress, сервер или CDN.
  • Нет конфликта с SEO-плагином.
  • Заголовок проверен через curl -I.
  • Кеш очищен после изменений.
  • В Search Console отслеживается повторный обход.

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

Не делайте универсальное правило на весь сайт без исключений. На больших проектах это быстро превращается в проблему поддержки: одна правка ломает индексацию целого раздела. Лучше хранить логику в мини-плагине и документировать, какие URL закрываются и почему.

Если у вас много технических страниц, имеет смысл дополнительно проверить дубли в sitemap и внутренние ссылки. Иногда X-Robots-Tag решает только часть задачи, а остальное продолжает подталкивать поисковик к обходу лишних URL.

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

Почему WordPress XML-RPC возвращает 403 или 404 и как безопасно отключить или ограничить доступ
19.09.2026
Оптимизация загрузки изображений в WordPress для ускорения сайта
29.09.2026
Как создать автоматические уведомления о обновлениях сайта в WordPress
28.09.2026
Как запретить XML-RPC для части пользователей в WordPress без поломки админки
10.09.2026
Как настроить автоматическое удаление спам-комментариев в WordPress
16.09.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »