Если в Search Console всплывают лишние URL вида /attachment/ или медиа-страницы попадают в sitemap, проблема обычно не в самом изображении, а в том, что WordPress и SEO-плагин по-разному трактуют attachment-страницы. В итоге поисковик видит отдельные страницы без полезного контента, а сайт получает дубли и мусор в индексе.
Ниже — рабочий сценарий: сначала быстро диагностируем источник URL, затем отключаем их из sitemap и, если нужно, дополнительно закрываем сами attachment-страницы от индексации. Это разные задачи, и смешивать их не стоит.
Что именно ломается и как это увидеть
Attachment-страница в WordPress — это отдельный объект записи с собственным URL. Когда к записи прикреплено изображение, WordPress может отдавать для него отдельную страницу вложения. Если SEO-плагин включает такие URL в XML Sitemap, поисковик получает сигнал, что это полноценные страницы сайта.
Проверка занимает пару минут:
- откройте XML Sitemap и найдите раздел с изображениями или вложениями;
- проверьте, есть ли в sitemap URL, похожие на
/attachment/или страницы медиафайлов; - в Search Console откройте отчёт по индексированию и посмотрите, не индексируются ли attachment-URL;
- сравните канонический URL на attachment-странице: часто он указывает либо на саму attachment-страницу, либо на вложение без пользы для пользователя.
Если сайт уже давно живёт с этой настройкой, в индексе могут быть десятки или сотни таких страниц. В этом случае важно не только убрать их из sitemap, но и корректно отдать noindex или редирект, чтобы поисковик постепенно вычистил старые URL.
Сначала выберите подход: плагин, код или редирект
Для большинства сайтов достаточно настроек SEO-плагина. Код нужен, если вы хотите жёстко контролировать поведение независимо от темы и плагинов. Редирект полезен, когда attachment-страницы уже попали в индекс и вы хотите перевести их на родительскую запись или медиафайл.
| Подход | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Если sitemap генерирует Yoast, Rank Math или аналог | Быстро, без кода | Зависит от конкретного плагина |
| Код в теме или mu-plugin | Если нужен контроль на уровне проекта | Предсказуемо, переносимо | Нужно тестировать после обновлений |
| Редирект attachment URL | Если страницы уже индексировались | Снижает мусор в индексе | Нужно аккуратно выбрать целевой URL |
Пошаговое решение без лишних рисков
1. Уберите attachment из sitemap
Если у вас Yoast SEO, проверьте настройки медиа и XML Sitemap. В некоторых конфигурациях attachment-страницы можно отключить через сам плагин. Если такой опции нет или она не закрывает задачу полностью, проще добавить фильтр.
Для Yoast SEO можно исключить attachment-тип из sitemap через фильтр wpseo_sitemap_exclude_post_type:
<?php
add_filter( 'wpseo_sitemap_exclude_post_type', function( $exclude, $post_type ) {
if ( 'attachment' === $post_type ) {
return true;
}
return $exclude;
}, 10, 2 );Этот код лучше размещать в небольшом mu-plugin, а не в functions.php активной темы. Так вы не потеряете настройку при смене темы.
Если используется не Yoast, а другой SEO-плагин, логика та же: ищите его фильтр или опцию отключения attachment-URL из sitemap. Важно не выдумывать универсальный хук — у каждого плагина он свой.
2. Закройте attachment-страницы от индексации
Исключение из sitemap не всегда достаточно. Если URL уже известны поисковику, они могут оставаться в индексе до следующего обхода. Поэтому полезно дополнительно поставить noindex для attachment-страниц.
Для WordPress это можно сделать через wp_robots:
<?php
add_filter( 'wp_robots', function( array $robots ) {
if ( is_attachment() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Это не ломает загрузку изображений в контенте: файл по-прежнему доступен, но сама attachment-страница получает сигнал не индексироваться.
3. Если нужно, сделайте редирект на родительскую запись
Когда attachment-страницы уже засорили индекс, часто удобнее отправлять пользователя и робота на родительский пост. Это особенно полезно для сайтов, где медиа-страницы не несут самостоятельной ценности.
<?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;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
} );Здесь есть важная оговорка: если attachment-страницы у вас используются как отдельные посадочные страницы, редирект делать нельзя. Тогда ограничьтесь noindex и исключением из sitemap.
Как проверить, что всё сработало
После внедрения не полагайтесь на визуальную проверку в админке. Нужны три конкретных теста:
- Откройте sitemap и убедитесь, что attachment-URL больше не присутствуют.
- Проверьте исходный код attachment-страницы: в
<meta name="robots">или в HTTP-ответе должен бытьnoindex, если вы его добавляли. - Попробуйте открыть старый attachment-URL напрямую: если настроен редирект, он должен вести на родительскую запись или на главную.
Если у вас есть доступ к Search Console, отправьте sitemap на повторную обработку и посмотрите, как меняется статус URL через несколько обходов. Мгновенного эффекта не будет, и это нормально.
Частые ошибки и как их исправить
Отключили sitemap, но страницы всё равно индексируются
Это типичная ситуация. Sitemap — только подсказка для робота, а не запрет. Если attachment-страницы уже где-то найдены, они могут остаться в индексе. Решение: добавить noindex и, при необходимости, редирект.
Сделали 301 на главную для всех attachment-URL
Такой редирект выглядит просто, но часто ухудшает качество перехода. Если у вложения есть родительская запись, логичнее вести туда. На главную отправляйте только те attachment-страницы, у которых нет нормального родителя.
Поставили редирект и забыли про медиа в письмах, соцсетях и старых ссылках
Если attachment-URL уже использовались вне сайта, массовый редирект может быть оправдан. Но сначала проверьте логи и трафик: иногда на медиа-страницы реально заходят пользователи из старых публикаций. В таком случае лучше закрыть их от индексации, но не ломать доступ.
Добавили код в тему и потеряли его после обновления
Это не ошибка логики, а ошибка размещения. Для таких задач удобнее использовать mu-plugin или отдельный мини-плагин. Тогда настройка не исчезнет при смене темы и не зависит от редактора файлов в админке.
Чек-лист перед публикацией изменений
- Проверен источник attachment-URL в sitemap.
- Добавлен фильтр на исключение attachment из sitemap.
- Настроен
noindexдля attachment-страниц, если они уже были в индексе. - Редирект включён только там, где он действительно нужен.
- Проверены старые URL вручную и через Search Console.
- Код вынесен в mu-plugin или отдельный плагин, а не в активную тему.
Практические замечания по безопасности и производительности
Сам по себе запрет attachment-страниц не ускоряет сайт заметно, но он уменьшает количество лишних URL, которые поисковик должен обходить. Это полезно для крупных сайтов с большим количеством изображений и вложений.
Если вы правите код вручную, не используйте редактор файлов в админке на боевом сайте. Лучше загрузить изменения через Git, SFTP или отдельный deployment-процесс. И обязательно проверьте, что фильтр не конфликтует с SEO-плагином: иногда один плагин ставит noindex, а другой переопределяет robots-теги.
Если нужен более широкий контроль над дублями, каноникалами и технической чисткой сайта, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpfind.ru&utm_medium=article&utm_campaign=zakryt-xml-sitemap-attachment-v-wordpress. Но даже с плагином полезно понимать, какие именно URL вы закрываете и почему.
В итоге рабочая схема обычно выглядит так: убрать attachment из sitemap, закрыть их от индексации и только потом решать, нужен ли редирект. Такой порядок безопаснее, чем сразу массово перенаправлять всё подряд.