Attachment-страницы в WordPress часто остаются незаметной причиной дублей: у изображения есть отдельный URL, поисковик его индексирует, а на сайте при этом нет полезного контента. Проблема особенно заметна после миграций, массовой загрузки медиа и включения SEO-плагина, который автоматически открывает такие страницы для индексации.
Ниже — рабочая схема, которая не ломает вставку изображений в записи и страницы: сначала разбираемся, какие именно attachment-URL у вас открыты, затем закрываем их от индексации и при необходимости делаем редирект на файл или на родительскую запись.
Когда attachment-страницы становятся проблемой
В WordPress у каждого медиафайла может быть собственная attachment-страница вида /image-name/ или похожий URL, зависящий от структуры постоянных ссылок. Для редактора это удобно, но для SEO часто бесполезно: на странице может быть только заголовок, картинка и ссылка на файл. В индексе это выглядит как тонкая страница без самостоятельной ценности.
Сценарии, где это особенно мешает:
- сайт с большим количеством изображений в статьях;
- старый сайт, где attachment-страницы уже успели попасть в индекс;
- после переноса с другой CMS, когда медиа-URL сохранились, а контент на attachment-страницах пустой;
- когда SEO-плагин автоматически ставит
index,followдля медиа-страниц.
Диагностика: что именно индексируется
Сначала проверьте, есть ли у attachment-страниц реальный трафик и индекс. Не надо закрывать их вслепую: иногда на такие URL ведут внешние ссылки, а у части сайтов attachment-страницы используются как промежуточные страницы галерей.
Что смотреть в первую очередь
- поиск по сайту: запрос
site:example.com inurl:attachmentилиsite:example.com inurl:/wp-content/uploads/; - отчёт по страницам в Google Search Console;
- исходный код attachment-страницы: есть ли
meta robots, canonical и редирект; - поведение URL при открытии: отдаёт ли он 200 OK или уже ведёт на файл/родителя.
Если страница открывается как обычная HTML-страница и не несёт полезного текста, её лучше либо закрыть от индексации, либо перенаправить. Выбор зависит от того, нужен ли вам сам URL.
Варианты решения: что выбрать в реальном проекте
| Подход | Когда подходит | Минус |
|---|---|---|
| noindex для attachment-страниц | Нужно сохранить URL, но убрать из индекса | Страница остаётся доступной для обхода |
| 301 на файл или родительскую запись | Attachment-страницы не нужны вообще | Нужно аккуратно обработать старые ссылки |
| Код в теме или мини-плагине | Нужна точечная логика без лишних настроек | Требует проверки после обновлений |
Пошаговое решение через код
Если у вас нет задачи сохранять attachment-страницы как отдельные посадочные, самый надёжный вариант — закрыть их от индексации и, при необходимости, отправлять пользователя на файл или родительскую запись.
Шаг 1. Добавить noindex для attachment-страниц
Этот вариант не ломает медиа в контенте: изображения в записях останутся на месте, а поисковик получит сигнал не индексировать attachment-URL.
add_action( 'wp_head', function () {
if ( is_attachment() ) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
}, 1 );Такой код можно добавить в мини-плагин или в functions.php дочерней темы. Для production лучше мини-плагин: он не пропадёт при смене темы.
Шаг 2. При необходимости сделать редирект
Если attachment-страницы вообще не нужны, логичнее отправлять пользователя на сам файл изображения или на родительскую запись. Для этого используйте фильтр template_redirect.
add_action( 'template_redirect', function () {
if ( is_attachment() ) {
$post = get_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;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );Здесь есть важная деталь: сначала проверяется родительская запись, потом сам файл. Это полезно, если у вас медиа прикреплено к статье и есть смысл вести пользователя именно туда.
Шаг 3. Убрать attachment-страницы из sitemap, если они туда попали
Некоторые SEO-плагины могут включать медиа-страницы в карту сайта или создавать отдельные sitemap для attachment-URL. Если они там есть, исключите их в настройках плагина или через фильтры самого плагина. Конкретный способ зависит от того, чем вы пользуетесь, но принцип один: в sitemap должны попадать только страницы, которые вы реально хотите индексировать.
Если используете SEO-плагин
Во многих случаях проще сначала проверить настройки, а уже потом писать код. У популярных SEO-плагинов есть опции для media attachment pages: иногда они ставят canonical на файл, иногда сразу закрывают страницы от индексации, иногда предлагают редирект на вложение или родителя.
Что важно проверить в интерфейсе плагина:
- не включён ли индекс attachment-страниц;
- не создаётся ли отдельный canonical на сам attachment-URL;
- не генерируется ли sitemap для медиа;
- не конфликтует ли редирект плагина с вашим кодом.
Если у вас уже стоит плагин для технической чистки сайта, например Clearfy Pro, проверьте, не дублирует ли он логику noindex или редиректа. Два разных механизма на один и тот же URL часто дают неожиданный результат.
Как проверить, что решение сработало
После внедрения не ограничивайтесь открытием страницы в браузере. Проверьте именно то, что видит поисковик и сервер.
- Откройте attachment-URL в режиме инкогнито и убедитесь, что он либо редиректит, либо отдаёт страницу с
noindex. - Посмотрите исходный код: должен быть
<meta name="robots" content="noindex,follow" />, если вы выбрали закрытие без редиректа. - Проверьте заголовки ответа через
curl -I https://example.com/attachment-url/и убедитесь, что статус соответствует выбранной логике. - В Search Console отправьте повторную проверку URL после изменения.
Пример проверки через консоль:
curl -I https://example.com/sample-image/
Если вы делали редирект, в ответе должен быть 301 и корректный Location. Если ставили noindex без редиректа, статус обычно остаётся 200, но в HTML должен появиться robots meta.
Частые ошибки и как их исправить
Редирект на главную для всех attachment-страниц
Это грубый вариант, который часто ухудшает поведение сайта. Если у вложения есть родительская запись, лучше вести на неё. Редирект на главную допустим только как запасной путь, когда родителя нет.
Закрыли attachment-страницы в robots.txt
Это не решает задачу полностью. Если URL уже в индексе, robots.txt может помешать поисковику увидеть noindex и убрать страницу корректно. Для уже известных URL безопаснее использовать редирект или meta robots.
Поставили noindex и забыли про canonical
Если canonical указывает на сам attachment-URL, поисковик может дольше переосмысливать страницу. Лучше, чтобы canonical вёл на родительскую запись или на сам файл только в тех случаях, когда это действительно нужно.
Сломали отображение изображений в контенте
Это обычно происходит, когда путают attachment-страницу и сам файл в /uploads/. Закрывать нужно именно HTML-страницу вложения, а не медиафайл. Файлы изображений должны оставаться доступными, иначе пострадают статьи и превью.
Практические советы по безопасности и производительности
Если attachment-страниц много, не пытайтесь решать всё вручную через отдельные редиректы в панели. Это плохо масштабируется и быстро превращается в список исключений. Лучше один раз задать общую логику в коде или через проверенный SEO-плагин.
Для стабильности:
- используйте дочернюю тему или мини-плагин, а не правки в ядре темы;
- не ставьте одновременно два решения на один и тот же URL-тип;
- после обновления темы и SEO-плагина повторно проверьте attachment-URL;
- если сайт большой, сначала протестируйте на части медиа или на staging-окружении.
Если вам нужно не только закрыть дубли, но и регулярно чистить технические хвосты сайта, удобно держать такие правила в одном месте: для noindex, canonical, редиректов и отключения лишних типов страниц. Это проще сопровождать, чем разносить логику по нескольким плагинам и шаблонам.
Что должно получиться в итоге
После настройки attachment-страницы либо исчезают из индекса через noindex, либо перестают быть самостоятельными URL благодаря 301-редиректу. При этом изображения в записях продолжают работать, а поисковик получает более чистую структуру сайта без лишних дублей.
Если у вас уже есть накопленные attachment-URL в индексе, не ждите мгновенного эффекта: сначала поисковик должен переобойти страницы, увидеть новый сигнал и только потом убрать их из выдачи. В этот период важно не менять логику туда-сюда, иначе проверка результата затянется.