Как закрыть PDF на WordPress от индексации: X-Robots-Tag, Nginx, Apache

PDF в /wp-content/uploads/ часто попадают в индекс Google и Яндекса: прямая ссылка, sitemap, внешний бэклинк – и документ в выдаче. Если это прайс для клиентов, закрытый гайд или просто ненужный в поиске файл, индексацию можно ограничить заголовком X-Robots-Tag, правилами веб-сервера или через SEO-плагин. Ниже – рабочие варианты для WordPress на Nginx и Apache.

Когда это нужно

  • материалы для подписчиков или платного доступа, которые лежат по прямой URL;
  • служебные и внутренние PDF (инструкции, акты), которые не должны светиться в поиске;
  • дубли контента: PDF повторяет HTML-страницу и размывает выдачу.

Важно: noindex не делает файл секретным. Кто знает URL, скачает. Для персональных данных и настоящей конфиденциальности нужны auth, подпись URL, отдельное хранилище вне web-root, а не только robots-заголовок.

Способ 1: X-Robots-Tag на Nginx

Выделите каталог под «не для индекса» (например /wp-content/uploads/private-files/) и отдайте заголовок для всего location:

location /wp-content/uploads/private-files/ {
    add_header X-Robots-Tag "noindex, nofollow" always;
}

Либо для всех PDF в uploads:

location ~* ^/wp-content/uploads/.*\.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow" always;
}

Проверка конфига и reload (на WordOps / стандартном nginx):

sudo nginx -t && sudo systemctl reload nginx

Флаг always полезен, чтобы заголовок уходил и на не-200 ответах. Если PDF раздаёт PHP или плагин, а не nginx напрямую, заголовок нужно ставить там, где формируется ответ.

Способ 2: Apache (.htaccess / Directory)

Нужен модуль headers. В .htaccess внутри каталога или в конфиге vhost:

<IfModule mod_headers.c>
  <FilesMatch "\.pdf$">
    Header set X-Robots-Tag "noindex, nofollow"
  </FilesMatch>
</IfModule>

Вариант через Directory (путь подставьте свой):

<Directory "/var/www/example/htdocs/wp-content/uploads/private-files/">
    Header set X-Robots-Tag "noindex, nofollow"
</Directory>

Способ 3: заголовок из WordPress (functions.php / mini-plugin)

Если статика отдаётся PHP (редко для PDF) или вы перехватываете запрос через rewrite, можно повесить заголовок на URI:

add_action('template_redirect', function () {
    $protected = '/wp-content/uploads/private-files/';
    $uri = $_SERVER['REQUEST_URI'] ?? '';
    if (strpos($uri, $protected) === 0) {
        header('X-Robots-Tag: noindex, nofollow');
    }
});

Для обычных PDF, которые nginx/Apache отдаёт как файлы в обход PHP, этот хук не сработает. Тогда только конфиг веб-сервера или плагин, который реально участвует в отдаче файла.

Способ 4: SEO-плагины

Плагины вроде The SEO Framework, Yoast, Rank Math в первую очередь управляют HTML-страницами (meta robots, canonical). Для «сырых» PDF надёжнее HTTP-заголовок на сервере. Если плагин умеет robots для вложений (attachment) – используйте noindex на attachment-страницах, но прямую ссылку на .pdf всё равно лучше закрыть через nginx/Apache.

The SEO Framework – лёгкий вариант для meta/robots страниц; при необходимости смотрите расширения и настройки индексации вложений, не ожидая магии для всех файлов uploads «из коробки».

robots.txt – не единственный и не всегда достаточный инструмент

Disallow в robots.txt просит бота не ходить по пути, но:

  • не гарантирует отсутствие URL в индексе (если есть внешние ссылки);
  • не заменяет auth;
  • для точечного «не индексировать, но отдавать по ссылке» лучше X-Robots-Tag: noindex.

Пример (дополнение, не замена заголовка):

User-agent: *
Disallow: /wp-content/uploads/private-files/

Проверка

curl -sI "https://example.com/wp-content/uploads/private-files/file.pdf" | grep -i robots

Ожидаемо что-то вроде:

X-Robots-Tag: noindex, nofollow

После появления заголовка уже проиндексированные URL можно запросить на удаление в Google Search Console / Яндекс.Вебмастер. Обход и выкидывание из индекса занимают время.

Кратко

  • для PDF надёжнее X-Robots-Tag на nginx/Apache, чем надежда на robots.txt;
  • хуки WordPress работают только если запрос проходит через PHP;
  • noindex не равен защите контента: для секретов нужен доступ, не SEO-заголовок;
  • проверяйте curl -I и при необходимости чистите URL в панелях вебмастеров.

Источники и ссылки


Комментарии загружаются…