Attachment-страницы — типичная техническая проблема на WordPress-сайтах с большим количеством изображений. В индексе они часто оказываются бесполезными: на странице почти нет контента, а в поиске она конкурирует с основными материалами. При этом сами файлы изображений трогать не нужно — задача только в том, чтобы закрыть от индексации HTML-страницы вложений и не сломать медиа-библиотеку.
Ниже — рабочая схема: как понять, что у вас именно эта проблема, какие есть варианты решения и как проверить, что всё сработало.
Когда attachment-страницы становятся проблемой
В WordPress у каждого загруженного изображения может быть отдельная attachment-страница. Она открывается по своему URL и часто содержит только картинку, заголовок и минимум текста. Для пользователя это редко полезная посадочная, а для поисковика — ещё одна страница с почти пустым содержимым.
Проблема обычно проявляется так:
- в отчётах Search Console появляются URL вида
/attachment/или страницы вложений с названием изображения; - в поиске находятся не статьи, а отдельные страницы картинок;
- на сайте растёт количество дублей и слабых страниц;
- внутренняя перелинковка уходит на бесполезные URL вместо основных материалов.
Диагностика: как понять, что у вас именно attachment-дубли
Сначала проверьте, как WordPress отдаёт страницу вложения. Откройте несколько URL изображений в браузере и посмотрите, есть ли у них отдельная HTML-страница, а не прямой файл .jpg или .png. Если на странице есть шаблон темы, заголовок и кнопка перехода к медиафайлу, это и есть attachment page.
Полезно проверить три вещи:
- Индексируется ли URL в поиске через
site:example.ru attachmentили по названию файла. - Есть ли на странице мета-тег
noindexили canonical на основной материал. - Не ведут ли на attachment-страницы внутренние ссылки из галерей, блоков изображений или старых шаблонов.
Если у вас установлен SEO-плагин, не полагайтесь на общую настройку «закрыть медиа». У разных плагинов поведение отличается: часть из них только меняет canonical, часть — редиректит attachment на файл, а часть — оставляет страницу доступной для индексации.
Что лучше: редирект, noindex или отключение attachment-страниц
Для большинства сайтов есть три подхода. У каждого свой компромисс.
| Подход | Что делает | Когда подходит | Минус |
|---|---|---|---|
| Редирект на файл или родительскую запись | Уводит пользователя и бота с attachment URL | Если attachment-страницы не нужны вообще | Нужно аккуратно выбрать цель редиректа |
noindex | Страница доступна, но не должна попадать в индекс | Если хотите сохранить доступ по прямой ссылке | URL остаётся в обходе и может тратить crawl budget |
| Отключение attachment-шаблона | WordPress перестаёт отдавать отдельную страницу | Если нужен жёсткий технический вариант | Требует кода и тестирования на теме |
Если у вас обычный корпоративный или контентный сайт, чаще всего достаточно noindex плюс редирект на родительскую запись, если она есть. Если сайт старый и attachment-страниц очень много, лучше сразу убрать их из выдачи и не оставлять лишних URL в обходе.
Пошаговое решение без плагина
Самый предсказуемый вариант — добавить код в functions.php дочерней темы или в небольшой mu-plugin. Так вы не зависите от настроек SEO-плагина и контролируете поведение WordPress на уровне шаблона.
1. Закрываем attachment-страницы от индексации
Этот код добавляет noindex,follow для attachment-страниц. Поисковик может пройти по ссылкам дальше, но саму страницу не должен индексировать.
add_action( 'wp_head', function () {
if ( is_attachment() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );Это не редирект. Страница останется доступной по URL, но для индексации будет закрыта. Такой вариант удобен, если на attachment-страницы уже ведут внешние ссылки или старые внутренние URL.
2. Перенаправляем attachment на родительскую запись или файл
Если attachment-страницы вам не нужны, можно отправлять пользователя и бота на родительскую запись. Если родителя нет, логично вести на сам файл изображения.
add_action( 'template_redirect', function () {
if ( ! is_attachment() ) {
return;
}
global $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;
}
});Здесь важно не редиректить всё подряд на главную. Это частая ошибка: поисковик видит массовый 301 на нерелевантную страницу, и качество сигнала только ухудшается.
3. Убираем attachment из результатов поиска по сайту
Если у вас включён внутренний поиск WordPress, attachment-страницы могут попадать и туда. Это не всегда критично, но на контентных сайтах обычно лишнее.
add_filter( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() || ! $query->is_search() ) {
return;
}
$query->set( 'post_type', array( 'post', 'page' ) );
});Этот фрагмент не отключает медиафайлы в админке и не ломает библиотеку. Он только ограничивает публичный поиск на фронтенде.
Если используете SEO-плагин
Иногда проще решить задачу в SEO-плагине, особенно если у вас уже настроены canonical, robots и редиректы. Но проверяйте, что именно делает плагин: некоторые настройки только меняют мета-теги, а attachment-страница всё равно остаётся доступной.
Практический порядок такой:
- посмотрите, есть ли отдельная настройка для медиа-страниц или attachment URLs;
- проверьте, ставится ли
noindexреально в HTML; - если плагин делает редирект, убедитесь, что он не ведёт на 404 или на главную без логики;
- после изменения очистите кэш страницы и CDN, если он есть.
Если вы используете Clearfy Pro, в нём есть инструменты для технической чистки и закрытия дублей, но всё равно стоит проверить итоговый HTML и поведение редиректа вручную. Автоматическая настройка не отменяет валидацию.
Проверка результата после внедрения
После изменения не ограничивайтесь открытием одной страницы в браузере. Проверьте результат в нескольких местах.
- Откройте attachment URL в режиме инкогнито: либо должен быть редирект, либо в исходнике должен появиться
noindex. - Посмотрите исходный код страницы и убедитесь, что мета-тег robots выводится только на attachment-страницах.
- Проверьте HTTP-статус через
curl -I https://example.ru/attachment-url/или аналогичный инструмент. - В Search Console отправьте на повторную проверку несколько старых URL, если они уже были в индексе.
Если вы сделали редирект, статус должен быть 301, а конечный URL — релевантным. Если поставили noindex, убедитесь, что страница не закрыта одновременно через robots.txt; иначе поисковик может не увидеть мета-тег и оставить URL в индексе дольше, чем нужно.
Частые ошибки и как их исправить
Редирект на главную страницу
Это самая распространённая ошибка. Она выглядит как быстрый способ «убрать мусор», но по факту создаёт нерелевантную цепочку. Если у attachment есть родительская запись, ведите туда. Если нет — на сам файл изображения.
Закрытие через robots.txt без noindex
Если вы просто запретили обход в robots.txt, поисковик может не увидеть, что страница должна быть исключена. Для уже известных URL это часто не лучший путь. Для attachment-страниц надёжнее использовать noindex или редирект.
Сломанные ссылки из галерей и старых блоков
После редиректа часть старых ссылок может вести не туда, куда вы ожидали. Это особенно заметно на сайтах, где изображения вставлялись вручную в старом редакторе. Проверьте несколько типовых записей и убедитесь, что пользователь попадает в нужный контекст.
Кэш не очищен
Если на сайте есть page cache, object cache или CDN, вы можете видеть старую версию attachment-страницы даже после правки кода. Сначала очистите кэш, потом перепроверяйте HTML и заголовки ответа.
Чек-лист перед публикацией изменений
- Проверены реальные URL attachment-страниц на сайте.
- Выбран один сценарий:
noindex, редирект или оба вместе. - Код добавлен в дочернюю тему или mu-plugin, а не в основной шаблон.
- Проверен исходный HTML и HTTP-статус ответа.
- Очистен кэш WordPress, сервера и CDN.
- Проверены старые URL в Search Console.
- Внутренний поиск не возвращает attachment-страницы, если это не нужно.
Что делать с безопасностью и производительностью
С точки зрения безопасности attachment-страницы сами по себе не опасны, но они добавляют лишние URL, которые нужно обходить и хранить в индексе. На больших сайтах это лишняя нагрузка на обход и ещё один источник технического шума.
Если вы вносите код вручную, не правьте functions.php основной темы на живом сайте. Используйте дочернюю тему или отдельный мини-плагин. Так вы не потеряете изменения при обновлении и сможете быстро отключить логику, если она конфликтует с темой или SEO-плагином.
Для сайтов с большим количеством медиа полезно дополнительно проверить, не создаются ли attachment-страницы массово из-за импорта изображений. Иногда проблема не в индексации как таковой, а в том, что редакторы вставляют изображения как отдельные записи вместо нормальной привязки к контенту.
Если нужен более широкий набор технических настроек для чистки дублей и SEO-оптимизации, имеет смысл посмотреть на инструменты уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но и в этом случае базовая проверка руками остаётся обязательной: плагин не заменяет диагностику конкретного сайта.