Как закрыть от индексации старые attachment-страницы в WordPress без потери изображений в контенте

Attachment-страницы в WordPress часто остаются незаметной причиной дублей: у изображения есть отдельный URL, поисковик его индексирует, а на сайте при этом нет полезного контента. Проблема особенно заметна после миграций, массовой загрузки медиа и включения SEO-плагина, который автоматически открывает такие страницы для индексации.

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

Когда attachment-страницы становятся проблемой

В WordPress у каждого медиафайла может быть собственная attachment-страница вида /image-name/ или похожий URL, зависящий от структуры постоянных ссылок. Для редактора это удобно, но для SEO часто бесполезно: на странице может быть только заголовок, картинка и ссылка на файл. В индексе это выглядит как тонкая страница без самостоятельной ценности.

Сценарии, где это особенно мешает:

  • сайт с большим количеством изображений в статьях;
  • старый сайт, где attachment-страницы уже успели попасть в индекс;
  • после переноса с другой CMS, когда медиа-URL сохранились, а контент на attachment-страницах пустой;
  • когда SEO-плагин автоматически ставит index,follow для медиа-страниц.

Диагностика: что именно индексируется

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

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

  • поиск по сайту: запрос site:example.com inurl:attachment или site:example.com inurl:/wp-content/uploads/;
  • отчёт по страницам в Google Search Console;
  • исходный код attachment-страницы: есть ли meta robots, canonical и редирект;
  • поведение URL при открытии: отдаёт ли он 200 OK или уже ведёт на файл/родителя.

Если страница открывается как обычная HTML-страница и не несёт полезного текста, её лучше либо закрыть от индексации, либо перенаправить. Выбор зависит от того, нужен ли вам сам URL.

Варианты решения: что выбрать в реальном проекте

ПодходКогда подходитМинус
noindex для attachment-страницНужно сохранить URL, но убрать из индексаСтраница остаётся доступной для обхода
301 на файл или родительскую записьAttachment-страницы не нужны вообщеНужно аккуратно обработать старые ссылки
Код в теме или мини-плагинеНужна точечная логика без лишних настроекТребует проверки после обновлений

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

Если у вас нет задачи сохранять attachment-страницы как отдельные посадочные, самый надёжный вариант — закрыть их от индексации и, при необходимости, отправлять пользователя на файл или родительскую запись.

Шаг 1. Добавить noindex для attachment-страниц

Этот вариант не ломает медиа в контенте: изображения в записях останутся на месте, а поисковик получит сигнал не индексировать attachment-URL.

add_action( 'wp_head', function () {
    if ( is_attachment() ) {
        echo '<meta name="robots" content="noindex,follow" />' . "\n";
    }
}, 1 );

Такой код можно добавить в мини-плагин или в functions.php дочерней темы. Для production лучше мини-плагин: он не пропадёт при смене темы.

Шаг 2. При необходимости сделать редирект

Если attachment-страницы вообще не нужны, логичнее отправлять пользователя на сам файл изображения или на родительскую запись. Для этого используйте фильтр template_redirect.

add_action( 'template_redirect', function () {
    if ( is_attachment() ) {
        $post = get_post();

        if ( $post && ! empty( $post->post_parent ) ) {
            wp_safe_redirect( get_permalink( $post->post_parent ), 301 );
            exit;
        }

        $file = wp_get_attachment_url( get_the_ID() );
        if ( $file ) {
            wp_safe_redirect( $file, 301 );
            exit;
        }

        wp_safe_redirect( home_url( '/' ), 301 );
        exit;
    }
} );

Здесь есть важная деталь: сначала проверяется родительская запись, потом сам файл. Это полезно, если у вас медиа прикреплено к статье и есть смысл вести пользователя именно туда.

Шаг 3. Убрать attachment-страницы из sitemap, если они туда попали

Некоторые SEO-плагины могут включать медиа-страницы в карту сайта или создавать отдельные sitemap для attachment-URL. Если они там есть, исключите их в настройках плагина или через фильтры самого плагина. Конкретный способ зависит от того, чем вы пользуетесь, но принцип один: в sitemap должны попадать только страницы, которые вы реально хотите индексировать.

Если используете SEO-плагин

Во многих случаях проще сначала проверить настройки, а уже потом писать код. У популярных SEO-плагинов есть опции для media attachment pages: иногда они ставят canonical на файл, иногда сразу закрывают страницы от индексации, иногда предлагают редирект на вложение или родителя.

Что важно проверить в интерфейсе плагина:

  • не включён ли индекс attachment-страниц;
  • не создаётся ли отдельный canonical на сам attachment-URL;
  • не генерируется ли sitemap для медиа;
  • не конфликтует ли редирект плагина с вашим кодом.

Если у вас уже стоит плагин для технической чистки сайта, например Clearfy Pro, проверьте, не дублирует ли он логику noindex или редиректа. Два разных механизма на один и тот же URL часто дают неожиданный результат.

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

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

  • Откройте attachment-URL в режиме инкогнито и убедитесь, что он либо редиректит, либо отдаёт страницу с noindex.
  • Посмотрите исходный код: должен быть <meta name="robots" content="noindex,follow" />, если вы выбрали закрытие без редиректа.
  • Проверьте заголовки ответа через curl -I https://example.com/attachment-url/ и убедитесь, что статус соответствует выбранной логике.
  • В Search Console отправьте повторную проверку URL после изменения.

Пример проверки через консоль:

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

Если вы делали редирект, в ответе должен быть 301 и корректный Location. Если ставили noindex без редиректа, статус обычно остаётся 200, но в HTML должен появиться robots meta.

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

Редирект на главную для всех attachment-страниц

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

Закрыли attachment-страницы в robots.txt

Это не решает задачу полностью. Если URL уже в индексе, robots.txt может помешать поисковику увидеть noindex и убрать страницу корректно. Для уже известных URL безопаснее использовать редирект или meta robots.

Поставили noindex и забыли про canonical

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

Сломали отображение изображений в контенте

Это обычно происходит, когда путают attachment-страницу и сам файл в /uploads/. Закрывать нужно именно HTML-страницу вложения, а не медиафайл. Файлы изображений должны оставаться доступными, иначе пострадают статьи и превью.

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

Если attachment-страниц много, не пытайтесь решать всё вручную через отдельные редиректы в панели. Это плохо масштабируется и быстро превращается в список исключений. Лучше один раз задать общую логику в коде или через проверенный SEO-плагин.

Для стабильности:

  • используйте дочернюю тему или мини-плагин, а не правки в ядре темы;
  • не ставьте одновременно два решения на один и тот же URL-тип;
  • после обновления темы и SEO-плагина повторно проверьте attachment-URL;
  • если сайт большой, сначала протестируйте на части медиа или на staging-окружении.

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

Что должно получиться в итоге

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

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

⭐⭐⭐⭐⭐