Как отключить генерацию attachment-страниц в WordPress и убрать мусорные URL из индекса

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

Проблема особенно заметна после миграций, массовой загрузки изображений и активной публикации контента. Если в отчётах поисковиков всплывают URL вида /attachment/, ?attachment_id= или отдельные страницы вложений с тонким содержимым, их лучше убрать из обхода и из индекса.

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

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

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

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

Диагностика: как понять, что у вас именно эта проблема

Сначала проверьте, существуют ли attachment-страницы и отдают ли они код 200. Откройте несколько URL вложений вручную или через краулер. Если страница открывается как отдельный HTML-документ, а не редиректит на файл или на родительскую запись, значит она реально доступна для индексации.

Что смотреть в админке и в поисковой выдаче

  • в поиске по сайту попробуйте запросы вида site:example.ru attachment или site:example.ru inurl:attachment;
  • в Google Search Console проверьте отчёт по страницам, которые обнаружены, но не нужны для индексации;
  • в логах краулера или Screaming Frog посмотрите, есть ли URL вложений с кодом ответа 200;
  • в теме проверьте, куда ведут ссылки у изображений: на файл, на attachment page или на медиафайл.

Если attachment-страницы уже попали в индекс, просто закрыть их robots.txt обычно недостаточно. Поисковик может продолжать держать их в базе как известные URL. Надёжнее убрать саму страницу из генерации или сделать редирект на более полезный адрес.

Пошаговое решение: что делать на практике

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

ПодходПлюсыМинусы
Код в теме или mu-pluginКонтроль, минимум лишней логикиНужно аккуратно тестировать после обновлений
SEO-плагинБыстрее внедрить, меньше ручной работыНе всегда даёт нужную точность
robots.txtПросто добавитьНе убирает уже известные URL из индекса

Вариант 1: редирект attachment-страниц через код

Этот способ подходит, если вы хотите убрать проблему без лишних плагинов. Добавьте код в functions.php дочерней темы или, лучше, в отдельный mu-plugin.

<?php
add_action('template_redirect', function () {
    if (!is_attachment()) {
        return;
    }

    $parent_id = wp_get_post_parent_id(get_the_ID());

    if ($parent_id) {
        wp_safe_redirect(get_permalink($parent_id), 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;
});

Логика простая: если у вложения есть родительская запись, отправляем пользователя туда. Если родителя нет, ведём на сам файл. Это лучше, чем оставлять пустую attachment page с кодом 200.

Вариант 2: отключить attachment page через фильтр permalink

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

<?php
add_filter('attachment_link', function ($link, $post_id) {
    $file = wp_get_attachment_url($post_id);
    return $file ? $file : $link;
}, 10, 2);

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

Вариант 3: закрыть вложения через SEO-плагин

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

Для сайтов, где нужна более широкая чистка дублей и технического мусора, иногда проще использовать отдельный набор настроек в SEO-плагине или инструменте вроде Clearfy Pro: он помогает закрывать лишние типы страниц и уменьшать количество технических дублей. Но даже в этом случае attachment-страницы лучше проверить вручную, а не полагаться на галочку в интерфейсе.

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

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

curl -I https://example.ru/2024/05/photo-name/

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

Дальше проверьте индексацию:

  • в Search Console отправьте проверку URL и посмотрите, как робот видит страницу;
  • запустите повторный краул сайта и убедитесь, что attachment-страницы больше не отдают 200;
  • посмотрите, не остались ли внутренние ссылки на старые URL вложений в контенте и меню;
  • если есть sitemap, убедитесь, что туда не попадают attachment-страницы.

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

Оставили 200 OK и только добавили noindex

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

Сделали редирект на главную для всех вложений

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

Закрыли URL в robots.txt

Это не удаляет уже известные адреса из индекса и не решает проблему внутренних ссылок. Robots.txt полезен как дополнительная мера, но не как единственный способ.

Не проверили, как тема вставляет изображения

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

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

  • проверили, что attachment-страницы реально существуют и отдают 200;
  • выбрали один способ: редирект, фильтр ссылок или SEO-плагин;
  • протестировали несколько URL с родителем и без родителя;
  • убедились, что внутренние ссылки больше не ведут на attachment page;
  • проверили sitemap и отчёты Search Console;
  • сделали бэкап перед изменениями в теме или mu-plugin.

Безопасность и производительность

Если вы вносите код, не правьте напрямую основной файл темы. Используйте дочернюю тему или mu-plugin, чтобы не потерять изменения после обновления. Для сайтов с высокой нагрузкой редирект через template_redirect обычно не создаёт заметной проблемы, но лишние проверки в каждом запросе лучше держать минимальными и понятными.

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

В итоге задача не в том, чтобы просто «спрятать» вложения, а в том, чтобы убрать бесполезные URL из архитектуры сайта. Тогда поисковик тратит обход на реальные страницы, а не на пустые медиа-оболочки.

Как отключить XML-RPC и ограничить его доступ в WordPress без поломки сайта
11.09.2026
Как отключить XML-RPC в WordPress без поломки Jetpack и мобильного приложения
04.09.2026
Как закрыть от индексации архив авторов в WordPress без потери полезных страниц
14.09.2026
Как закрыть дубли страниц в WordPress от пагинации, фильтров и параметров
19.08.2026
Поиск и устранение 404 ошибок в WordPress: как найти источник и исправить без лишних редиректов
28.08.2026

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