Attachment-страницы в WordPress часто попадают в индекс как отдельные URL, хотя по сути это тонкие страницы без полезного контента. На небольшом сайте это выглядит как мелкая проблема, но на проектах с активной загрузкой медиа быстро появляются дубли, пустые страницы и лишние обходы краулером. Если у вас в Search Console растут URL вида /attachment/ или отдельные страницы вложений, это как раз тот случай, когда проблему лучше закрыть на уровне сайта, а не ждать, пока поисковик сам догадается.
Когда attachment-страницы становятся проблемой
WordPress создаёт отдельную страницу вложения для каждого изображения, PDF или другого файла, если тема или плагин не переопределяют поведение. На практике это приводит к трём типовым сценариям:
- в индекс попадают страницы без текста и без самостоятельной ценности;
- один и тот же файл доступен по нескольким URL: сам файл, attachment-страница, иногда ещё и архивы медиа;
- краулер тратит время на обход мусорных страниц вместо полезных материалов.
Если сайт небольшой, это может быть незаметно. Но на контентных проектах, где медиафайлов много, такие страницы начинают мешать нормальной индексации.
Диагностика: как понять, что проблема действительно есть
Сначала проверьте, что именно индексируется. Не нужно сразу править код — сначала убедитесь, что URL вложений реально отдают 200 OK и доступны поисковикам.
Что смотреть в первую очередь
- отчёт Страницы в Google Search Console;
- поиск по сайту через
site:example.com attachmentили по шаблону URL вложений; - исходный код attachment-страницы: есть ли там канонический URL, мета robots и реальный контент;
- поведение темы: ведёт ли клик по изображению на отдельную страницу вложения или сразу на файл/пост.
Если attachment-страница открывается как обычная страница сайта, но на ней только картинка и заголовок, это почти всегда кандидат на закрытие от индексации или редирект на родительскую запись.
Что лучше: noindex, редирект или отключение attachment-страниц
Универсального варианта нет. Выбор зависит от того, используются ли attachment-страницы осознанно.
| Подход | Когда подходит | Минус |
|---|---|---|
| Noindex | Если страницу вложения нужно оставить доступной пользователю | URL остаётся в обходе, но не должен индексироваться |
| Редирект на родительскую запись | Если attachment-страницы не нужны вообще | Нужно аккуратно обработать случаи без родителя |
| Отключение шаблона вложений | Если на сайте нет сценариев, где attachment-страницы полезны | Нужно проверить тему и плагины на зависимость от этих URL |
Для большинства сайтов самый практичный вариант — редирект на родительскую запись или на сам файл, если родителя нет. Если же вы хотите оставить URL доступным, но убрать его из индекса, используйте noindex.
Пошаговое решение без плагинов
Ниже — рабочий вариант, который переводит attachment-страницы на родительскую запись, а если родителя нет, отправляет пользователя на главную. Код лучше добавлять в мини-плагин или в functions.php дочерней темы, но не в родительскую тему.
<?php
add_action( 'template_redirect', function () {
if ( ! is_attachment() ) {
return;
}
$parent_id = wp_get_post_parent_id( get_queried_object_id() );
if ( $parent_id ) {
wp_safe_redirect( get_permalink( $parent_id ), 301 );
exit;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
} );Этот вариант хорош тем, что не оставляет attachment-страницы в живом виде. Поисковик увидит 301-редирект и со временем перестанет считать такие URL отдельными страницами.
Если нужно оставить страницу, но закрыть от индексации
Иногда attachment-страницы используют как промежуточные страницы в галереях или в старых шаблонах. Тогда редирект может сломать поведение. В этом случае лучше добавить noindex только на attachment-страницы:
<?php
add_filter( 'wp_robots', function ( array $robots ) {
if ( is_attachment() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Это не удаляет URL из сайта, но даёт поисковикам понятный сигнал не включать его в индекс.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужно убедиться, что сервер реально отдаёт нужный статус и что поисковик видит изменения.
- откройте attachment-URL в браузере и проверьте, куда он ведёт;
- посмотрите HTTP-статус через DevTools или
curl -I https://example.com/attachment-url/; - если стоит редирект, убедитесь, что он именно
301, а не302; - в Search Console запросите переобход нескольких старых URL;
- проверьте, не остались ли ссылки на attachment-страницы в карте сайта.
Для быстрой проверки через консоль можно использовать:
curl -I https://example.com/sample-attachment/В ответе должно быть видно либо 301 Moved Permanently, либо мета-роботы с noindex, если вы выбрали этот путь.
Частые ошибки и как их исправить
Редирект ломает галереи и старые ссылки
Так бывает, если тема или плагин рассчитывают на отдельную attachment-страницу. В этом случае не делайте глобальный редирект сразу на весь сайт. Сначала проверьте, где используются attachment-URL, и при необходимости ограничьте правило только для изображений или только для вложений без родителя.
Noindex добавили, но URL всё равно индексируется
Причина обычно в том, что страница ещё не переобойдена или на неё ведут внутренние ссылки. Проверьте, нет ли ссылок на attachment-страницы в контенте, в блоках галерей и в старых шаблонах. Если URL активно связан с сайтом, поисковику нужно время, чтобы обновить индекс.
Используют редирект 302 вместо 301
Временный редирект хуже подходит для постоянной очистки индекса. Если attachment-страницы больше не нужны, нужен именно 301. Иначе поисковик может дольше держать старый URL в выдаче.
Пытаются закрыть URL только через robots.txt
Это слабое решение для уже известных страниц. Если URL уже в индексе, запрет в robots.txt не гарантирует его удаление. Лучше использовать редирект или noindex, а robots.txt оставлять для технических ограничений обхода, а не как основной инструмент удаления дублей.
Практические советы по безопасности и производительности
Если attachment-страницы отключаются через код, держите правило простым и предсказуемым. Не добавляйте тяжёлую логику в template_redirect: она выполняется на каждом запросе. Вариант с проверкой is_attachment() и редиректом — нормальный, потому что не требует лишних запросов к базе.
Если сайт большой, после изменения логики проверьте кеш страниц и CDN. Старые attachment-URL могут ещё какое-то время отдавать закешированную версию. Очистите серверный кеш, объектный кеш и CDN, если он используется.
Для проектов, где нужно системно чистить дубли, мета-данные и технический мусор, иногда удобнее закрыть задачу через набор инструментов вроде Clearfy Pro, если вам нужен не только noindex, но и контроль дублей на уровне сайта. Но даже в этом случае полезно понимать, что именно делает код и какой URL должен исчезнуть из индекса.
Если хотите, я могу следующим материалом разобрать отдельный сценарий: как убрать attachment-страницы только для изображений, но оставить PDF-документы доступными по прямой ссылке.