Если в поиске всплывают PDF, изображения или архивы из /wp-content/uploads/, одной правки в robots.txt часто недостаточно. Поисковик может уже знать прямой URL файла, а сам файл не обязан подчиняться правилам для HTML-страниц. В таких случаях удобнее отдать заголовок X-Robots-Tag: noindex именно для файлов, а не для всего сайта.
Этот подход полезен, когда нужно сохранить доступ к медиафайлам для пользователей, но убрать их из индекса. Он не решает все SEO-задачи сам по себе, зато хорошо работает как точечная мера для uploads, особенно если у вас много PDF, документов, прайсов или изображений, которые не должны ранжироваться отдельно.
Когда проблема действительно в индексации файлов
Сначала стоит понять, что именно индексируется. Если в выдаче видны URL вида /wp-content/uploads/2026/01/file.pdf или прямые ссылки на изображения, это обычно не связано с контентом записи. Поисковик просто нашёл файл по внешней ссылке, через карту сайта или по внутренним ссылкам.
Что проверить в первую очередь
- Откройте URL файла в браузере и посмотрите, отдаётся ли он напрямую, без редиректа.
- Проверьте заголовки ответа через DevTools,
curl -Iили любой HTTP checker. - Убедитесь, что файл не попадает в XML-карту сайта как отдельный объект, если этого не требуется.
- Посмотрите, нет ли на сервере уже настроенных заголовков, которые конфликтуют с WordPress или CDN.
Если файл доступен по прямому URL и не закрыт заголовком X-Robots-Tag, поисковик может продолжать его индексировать даже при наличии запрета в robots.txt. Именно поэтому для uploads лучше работать на уровне ответа сервера.
Как это работает на практике
WordPress сам по себе не добавляет X-Robots-Tag к файлам в uploads. Но вы можете сделать это через конфигурацию веб-сервера или через PHP-хук, если нужен более гибкий контроль. Для большинства сайтов достаточно закрыть от индексации типы файлов, которые не должны жить в поиске: PDF, DOCX, XLSX, ZIP, изображения-черновики и подобные вложения.
| Подход | Плюсы | Минусы |
|---|---|---|
| robots.txt | Просто добавить | Не гарантирует исключение уже известных URL |
| X-Robots-Tag | Работает на уровне ответа файла | Нужно настраивать сервер или код |
| Редирект/закрытие доступа | Жёстко убирает файл из выдачи | Может сломать публичное использование файлов |
Пошаговое решение через PHP
Если у вас нет доступа к конфигу Nginx или Apache, можно добавить заголовок из темы или небольшого mu-plugin. Это не самый низкоуровневый вариант, но для многих проектов он достаточно надёжен.
<?php
/**
* Plugin Name: Uploads Noindex Header
*/
add_action( 'send_headers', function () {
if ( is_admin() ) {
return;
}
$uri = $_SERVER['REQUEST_URI'] ?? '';
if ( strpos( $uri, '/wp-content/uploads/' ) === false ) {
return;
}
$path = wp_parse_url( $uri, PHP_URL_PATH );
$ext = strtolower( pathinfo( $path ?? '', PATHINFO_EXTENSION ) );
$noindex_ext = array( 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'zip', 'rar' );
if ( in_array( $ext, $noindex_ext, true ) ) {
header( 'X-Robots-Tag: noindex, nofollow, noarchive', true );
}
} );Этот пример добавляет заголовок только для файлов из uploads с выбранными расширениями. Для изображений можно расширить список, но делать это нужно осторожно: если картинки используются как публичный контент, массовый noindex может быть лишним.
Что важно в этом коде
- Проверка идёт по
REQUEST_URI, а не по записи в БД. - Заголовок добавляется только для нужных расширений.
- Админка не затрагивается.
- Код не ломает сам файл и не запрещает его открытие.
Вариант для Apache и Nginx
Если есть доступ к серверной конфигурации, лучше закрывать индексацию на этом уровне. Так заголовок будет отдаваться раньше, без зависимости от темы или плагинов.
Apache: пример через .htaccess
<IfModule mod_headers.c>
<FilesMatch "\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar)$">
Header set X-Robots-Tag "noindex, nofollow, noarchive"
</FilesMatch>
</IfModule>Nginx: пример через location
location ~* ^/wp-content/uploads/.*\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar)$ {
add_header X-Robots-Tag "noindex, nofollow, noarchive" always;
}Для Nginx ключевое слово always важно: без него заголовок может не добавляться на часть ответов. После правки конфигурации не забудьте проверить синтаксис и перезагрузить веб-сервер.
Как проверить, что решение сработало
Проверка должна быть не визуальной, а технической. Откройте прямой URL файла и посмотрите заголовки ответа.
curl -I https://example.com/wp-content/uploads/2026/01/file.pdfВ ответе должен появиться заголовок вида:
X-Robots-Tag: noindex, nofollow, noarchiveДальше проверьте ещё три вещи:
- файл по-прежнему открывается в браузере, если это нужно пользователям;
- заголовок не добавляется к HTML-страницам без необходимости;
- CDN или кэш-плагин не перезаписывают ответ своим набором заголовков.
Если используете Google Search Console, можно отправить URL на повторную проверку после обновления заголовка. Но не ждите мгновенного исчезновения из выдачи: поисковику нужно переобойти файл.
Частые ошибки и как их исправить
Закрыли только robots.txt
Это самая частая ошибка. Disallow не всегда убирает уже известный URL из индекса. Если файл уже попал в поиск, нужен именно X-Robots-Tag или редирект/удаление.
Сделали noindex для всех uploads без разбора
Так можно случайно скрыть полезные изображения, которые должны участвовать в трафике, например в статьях или документации. Лучше ограничивать правило по типам файлов и по конкретным каталогам.
Не учли CDN
Если файлы отдаются через Cloudflare, BunnyCDN или другой прокси, заголовок может кешироваться отдельно. После правки очистите кэш на стороне CDN и проверьте ответ именно с публичного домена.
Поставили заголовок в шаблоне страницы
Это не сработает для прямых файлов. X-Robots-Tag должен отдаваться на запрос самого файла, а не только на HTML-страницу вложения.
Чек-лист перед публикацией правки
- Определены типы файлов, которые нужно закрыть от индексации.
- Проверен ответ прямого URL файла через
curl -I. - Заголовок не конфликтует с серверными правилами и CDN.
- Файл остаётся доступным для пользователей, если это требуется.
- В Search Console отправлены важные URL на переобход.
Безопасность и производительность
Если вы закрываете от индексации документы с внутренней информацией, не ограничивайтесь только noindex. Для конфиденциальных файлов лучше использовать авторизацию, временные ссылки или хранение вне публичного каталога. X-Robots-Tag не защищает файл от прямого доступа, он лишь влияет на поисковую индексацию.
С точки зрения производительности этот способ почти не нагружает сайт, если реализован на сервере. PHP-вариант тоже лёгкий, но его лучше не усложнять лишними проверками и не вешать на каждый запрос тяжёлую логику. Если у вас уже стоит SEO-плагин с управлением индексированием вложений, проверьте, не решает ли он задачу без кастомного кода. Например, в Clearfy Pro есть инструменты для чистки дублей и технической SEO-настройки, но перед использованием всё равно стоит сверить, как именно он работает в вашей связке с темой и кэшем.
Если нужен именно точечный контроль над uploads, начните с серверного заголовка. Это проще отлаживать, легче проверять и меньше зависит от того, как устроен шаблон WordPress.