Как закрыть дубли archive attachment в WordPress и убрать мусорные страницы из индекса

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

Проблема обычно не в самих изображениях, а в том, что WordPress по умолчанию создаёт attachment pages. Если тема или плагины не закрывают их от индексации, поисковик видит отдельные страницы без полезного текста, с одинаковыми заголовками и слабой связью с основным материалом. Ниже — как диагностировать ситуацию, что именно отключать и как проверить, что мусорные URL действительно ушли.

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

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

Признаки проблемы

  • в индексе есть URL вложений, но на них почти нет текста;
  • в поиске показываются страницы с одинаковыми title, отличающиеся только именем файла;
  • внутренние ссылки ведут на attachment вместо самой записи;
  • в отчётах по индексации растёт число «Просканировано, но не проиндексировано» или похожих статусов;
  • медиатека используется активно, а SEO-страниц становится заметно больше, чем нужно.

Если сайт работает на классической теме, проверьте ещё шаблон attachment.php или image.php. Иногда проблема не в WordPress как таковом, а в том, что тема выводит полноценную страницу вложения с заголовком, хлебными крошками и пустым контентом.

Что лучше: редирект, noindex или отключение attachment pages

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

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

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

Пошаговое решение: отключаем attachment-страницы в WordPress

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

1. Добавьте редирект для attachment-страниц

Код можно положить в functions.php дочерней темы или в небольшой mu-plugin. Для production-сайта mu-plugin даже удобнее: он не зависит от темы.

<?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;
    }

    $file_url = wp_get_attachment_url(get_queried_object_id());

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

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

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

2. Закройте attachment-страницы от индексации

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

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

Если используете SEO-плагин, не дублируйте его настройки кодом без необходимости. Два разных источника robots-правил иногда создают путаницу при отладке. Сначала проверьте, не закрывает ли attachment уже установленный плагин.

3. Уберите ссылки на attachment из шаблонов

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

Если вы выводите изображения вручную, лучше ссылаться либо на сам файл, либо на запись, где изображение используется. Для галерей и блоков Gutenberg проверьте настройки вставки: иногда достаточно отключить ссылку на «Страницу вложения» в параметрах блока.

Диагностика после внедрения: что проверить руками и через инструменты

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

  • Откройте несколько attachment-URL напрямую и убедитесь, что они отдают 301, а не 200.
  • Проверьте, что целевой URL соответствует логике сайта: запись, файл или главная.
  • Посмотрите исходный код страницы: на attachment не должно быть обычного индексируемого контента.
  • В Search Console или аналогичном инструменте отправьте на переобход несколько старых URL.
  • Проверьте, не остались ли внутренние ссылки на attachment в меню, блоках или старых записях.

Если есть доступ к командной строке, можно быстро проверить статус ответа:

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

В ответе должен быть редирект, а не обычный HTML с кодом 200. Если сервер или CDN вмешиваются в цепочку, проверьте, не кэшируется ли старый ответ.

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

Редирект ведёт не туда

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

Attachment-страницы закрыты, но в индексе они остаются

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

Плагин SEO и код в теме конфликтуют

Если SEO-плагин уже ставит noindex, а ваш код добавляет другой robots-тег, итоговый HTML может стать нечитаемым для диагностики. Оставьте один источник правды. Для проверки временно отключите кастомный код и посмотрите, что меняется в исходнике.

Редирект ломает доступ к файлам

Такое бывает, если вместо attachment-страницы вы случайно редиректите и сам файл из медиатеки. Проверяйте, что условие срабатывает именно на is_attachment(), а не на все медиа-URL подряд. Файл изображения должен открываться отдельно, если это предусмотрено вашей структурой.

Чек-лист перед публикацией правки

  • Проверен тип URL: attachment page, а не файл.
  • Есть понятный целевой редирект.
  • Нет дублей robots-мета от разных плагинов.
  • В шаблонах не осталось ссылок на attachment без необходимости.
  • Проверен ответ сервера через curl -I или DevTools.
  • Старые URL отправлены на переобход.

Когда лучше не писать код вручную

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

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

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

Как закрыть дубли archive attachment в WordPress и убрать мусорные страницы из индекса
18.08.2026