Как найти и удалить дубли страниц из-за attachment-страниц в WordPress

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

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

Как понять, что проблема именно в attachment-страницах

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

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

  • отчёт краулинга: много URL с маленьким объёмом текста и одинаковыми заголовками;
  • Google Search Console: страницы с низким качеством или дублированными мета-данными;
  • внутренние ссылки из записей и страниц на attachment-URL;
  • sitemap.xml: попадают ли туда страницы вложений;
  • результат поиска по сайту: открываются ли attachment-страницы как отдельные документы.

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

Какие есть варианты решения и чем они отличаются

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

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

Пошаговое решение: редирект attachment-страниц на файл

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

<?php
add_action( 'template_redirect', function () {
    if ( is_attachment() ) {
        $file_url = wp_get_attachment_url( get_queried_object_id() );

        if ( $file_url ) {
            wp_redirect( $file_url, 301 );
            exit;
        }

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

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

Когда этот вариант не подходит

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

Как закрыть attachment-страницы от индексации без удаления URL

Если вам нужно оставить страницу вложения доступной, но не показывать её в поиске, используйте noindex. Это полезно, когда на attachment-странице есть навигация по галерее или она нужна для внутреннего UX, но как отдельная SEO-страница она бесполезна.

Ниже пример, который добавляет noindex,follow только для attachment-страниц:

<?php
add_filter( 'wp_robots', function ( array $robots ) {
    if ( is_attachment() ) {
        $robots['noindex'] = true;
        $robots['follow']  = true;
    }

    return $robots;
} );

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

Как полностью отключить attachment-страницы через код

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

<?php
add_action( 'template_redirect', function () {
    if ( is_attachment() ) {
        $attachment_id = get_queried_object_id();
        $file_url = wp_get_attachment_url( $attachment_id );

        if ( $file_url ) {
            wp_safe_redirect( $file_url, 301 );
            exit;
        }

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

Здесь лучше использовать wp_safe_redirect(), если редирект ведёт на внутренний URL. Для прямой ссылки на файл тоже обычно достаточно, но безопаснее держать логику предсказуемой и не смешивать её с внешними адресами.

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

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

  • открывается ли attachment-URL и уходит ли он в 301;
  • не осталось ли страниц вложений в sitemap;
  • не появились ли цепочки редиректов;
  • не сломались ли ссылки из медиа-библиотеки и контентных блоков;
  • как отвечает сервер на старые attachment-адреса через curl -I или аналогичный инструмент.

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

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

В ответе вы должны увидеть либо 301 на файл, либо 200 с noindex, если вы выбрали мягкий вариант. Если вместо этого получаете 404, значит редирект не сработал или URL уже не существует в базе.

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

Редирект поставили, но attachment-страницы всё равно индексируются

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

Сломались изображения в галереях

Это бывает, если редирект настроен не на страницу вложения, а на сам файл, который по какой-то причине недоступен. Сначала убедитесь, что wp_get_attachment_url() возвращает корректный адрес. Если файл удалён, редирект на главную — плохая замена, лучше восстановить медиа или убрать битые ссылки из контента.

SEO-плагин перезаписывает robots-мета

Если у вас уже стоит плагин для SEO, он может задавать свои правила для attachment-страниц. Тогда код из темы будет работать не так, как ожидается. Проверьте настройки индексации медиа-страниц в самом плагине и не дублируйте логику в двух местах.

Появились цепочки редиректов

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

Чек-лист перед выкладкой на прод

  • сделан бэкап файлов и базы;
  • проверено, используются ли attachment-страницы в шаблонах;
  • выбран один вариант: редирект, noindex или отключение;
  • проверены старые URL из Search Console и логов;
  • исключены цепочки редиректов;
  • проверен sitemap и robots-мета;
  • протестированы несколько реальных медиа-URL из разных типов записей.

Что делать, если нужен более чистый технический контур

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

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

Автоматическое удаление товара из WooCommerce после продажи
20.04.2026
WooCommerce: как автоматически удалять товары после продажи
15.05.2026
Как запретить индексацию отдельных страниц в WordPress через robots, noindex и canonical
31.08.2026
Как добавить настройку автозагрузки медиафайлов в WordPress
26.02.2026
Как удалить версию WordPress из HTML кода сайта
21.11.2025