Attachment-страницы в WordPress часто всплывают в индексе как отдельные URL без полезного контента. На сайте это выглядит как дубли, мусорные страницы в поиске и лишние переходы из выдачи на пустую страницу вложения вместо самой картинки или файла. Если задача не в том, чтобы показывать отдельную страницу медиа, а в том, чтобы оставить только сам файл, attachment-архивы лучше отключить от индексации и настроить редирект.
Когда attachment-страницы становятся проблемой
Сценарий обычно один и тот же: в медиабиблиотеке загружены изображения, PDF или другие файлы, WordPress создает для каждого вложения отдельную страницу, а поисковик индексирует эти URL. В результате в отчётах появляются страницы вида /my-photo/ или /document-pdf/, которые не несут самостоятельной ценности. На небольшом сайте это раздражает, на большом — раздувает индекс и мешает анализировать реальные посадочные страницы.
Что именно нужно проверить
- Есть ли в поиске страницы вложений с тонким или пустым контентом.
- Открываются ли attachment-URL без редиректа на сам файл или родительскую запись.
- Не генерирует ли тема или плагин отдельные шаблоны для вложений.
- Не используются ли attachment-страницы как часть внутренней перелинковки.
Диагностика: как понять, что проблема именно в attachment-страницах
Сначала проверьте, как ведёт себя типичное вложение. Откройте медиафайл в админке, скопируйте его permalink и посмотрите ответ сервера. Если вместо файла или родительской записи открывается отдельная страница вложения, поисковик тоже может её индексировать. Дополнительно проверьте robots.txt и мета-тег robots: иногда страница закрыта от индексации, но всё равно остаётся в выдаче как URL без контента.
Полезно посмотреть и структуру сайта через поиск по домену. Если в выдаче есть URL с медиа-именами, а в сниппете почти нет текста, это типичный кандидат на отключение индексации. Если же attachment-страницы нужны для галереи или портфолио, решение надо адаптировать: не удалять их полностью, а ограничить только те типы вложений, которые не должны жить отдельно.
Пошаговое решение
Вариант 1. Редирект attachment-страниц на родительскую запись или файл
Если у вложения есть родительская запись, логично отправлять пользователя туда. Если родителя нет, безопаснее вести на сам файл. Ниже рабочий вариант через template_redirect:
<?php
add_action( 'template_redirect', function () {
if ( ! is_attachment() ) {
return;
}
global $post;
if ( ! $post ) {
return;
}
$parent_id = wp_get_post_parent_id( $post->ID );
if ( $parent_id ) {
wp_safe_redirect( get_permalink( $parent_id ), 301 );
exit;
}
$file_url = wp_get_attachment_url( $post->ID );
if ( $file_url ) {
wp_safe_redirect( $file_url, 301 );
exit;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
} );Этот код лучше размещать в дочерней теме или в небольшом mu-plugin, а не в файле основной темы. Тогда редирект не сломается после обновления шаблона.
Вариант 2. Закрыть attachment-страницы от индексации через wp_robots
Если редирект по какой-то причине не подходит, можно оставить страницу доступной пользователю, но убрать её из индекса. Для этого используйте фильтр wp_robots:
<?php
add_filter( 'wp_robots', function ( array $robots ) {
if ( is_attachment() ) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
} );Это не заменяет редирект, если у вас уже накопились дубли. Но как временная мера или для сайтов, где attachment-страницы нужны для интерфейса, вариант рабочий.
Вариант 3. Отключить attachment-страницы на уровне SEO-плагина
Если на сайте уже стоит SEO-плагин, проверьте, нет ли встроенной настройки для медиа-страниц. В некоторых конфигурациях проще отключить индексацию через интерфейс, чем поддерживать кастомный код. Но важно понимать, что не каждый плагин делает именно редирект: часто он только ставит noindex. Для очистки выдачи этого может быть недостаточно, если URL уже проиндексированы.
| Подход | Что делает | Когда выбирать | Компромисс |
|---|---|---|---|
| Редирект на файл/родителя | Убирает attachment-URL из пользовательского сценария | Когда страницы вложений не нужны вообще | Нужно аккуратно обработать отсутствие родителя |
noindex через код | Оставляет страницу доступной, но просит поисковик не индексировать | Когда attachment-страницы нужны для просмотра | URL может ещё какое-то время жить в индексе |
| Настройка в SEO-плагине | Упрощает управление без кода | Когда уже используется SEO-плагин и есть нужная опция | Не всегда есть редирект, только запрет индексации |
Как проверить, что решение сработало
После внедрения откройте несколько attachment-URL в браузере и проверьте код ответа. Если настроен редирект, должен быть 301 и переход на целевой URL. Если используется noindex, в исходном коде страницы должен появиться соответствующий robots-мета-тег или заголовок.
- Проверьте URL вложения в режиме инкогнито.
- Посмотрите ответ через
curl -I https://example.com/attachment-url/. - Убедитесь, что в Search Console новые attachment-страницы не появляются как индексируемые.
- Проверьте, не сломались ли ссылки на изображения в контенте и галереях.
Для быстрой проверки заголовков можно использовать такую команду:
curl -I https://example.com/sample-attachment/Если всё сделано правильно, вы увидите либо 301 Moved Permanently с новым адресом, либо страницу без индексации, если выбран вариант с noindex.
Частые ошибки и как их исправить
Редирект уводит не туда
Такое бывает, если у вложения нет родителя, а код не обрабатывает пустой wp_get_post_parent_id(). В этом случае нужно явно проверять наличие $file_url и только потом отправлять на файл. Иначе пользователь может попасть на главную или на битую страницу.
Цикл редиректов
Если attachment-страница уже редиректится плагином, а вы добавили ещё один редирект в теме, можно получить петлю. Отключите один из механизмов и проверьте цепочку ответов через curl -I -L. Для таких задач важно, чтобы редирект был только в одном месте.
Страница закрыта от индексации, но всё ещё в выдаче
Это нормальная задержка. Поисковику нужно время, чтобы переобойти URL и обновить индекс. Если страница уже отдает 301 на файл или родителя, процесс обычно идет быстрее, чем при одном только noindex.
Сломались изображения в контенте
Редирект attachment-страниц не должен влиять на URL самих файлов в wp-content/uploads. Если после изменений картинки перестали открываться, проверьте, не перепутали ли вы permalink вложения и прямой URL файла. Это разные адреса, и редиректить нужно именно страницу вложения, а не сам файл.
Практические советы по безопасности и производительности
Если на сайте много медиа, не храните такой код в основной теме. Лучше вынести его в маленький mu-plugin: так он не исчезнет после обновления и не будет зависеть от шаблона. Для сайтов с большим количеством вложений полезно дополнительно проверить, не генерируются ли лишние размеры изображений и не раздувает ли медиабиблиотека диск без необходимости.
Если вам нужно не только убрать attachment-дубли, но и почистить сайт от других технических дублей, имеет смысл смотреть в сторону инструментов уровня Clearfy Pro. Но даже в этом случае полезно понимать, что именно делает каждая настройка: редирект, noindex и отключение архивов решают разные задачи.
Если нужна минимальная рабочая схема, обычно хватает двух шагов: редирект attachment-страниц и проверка индексации через Search Console. Всё остальное — уже доводка под структуру конкретного сайта.