Attachment-страницы в WordPress часто остаются незаметными до тех пор, пока в индексе не начинают всплывать пустые URL вида /image-name/ или ?attachment_id=123. Для сайта это обычно не полезные посадочные, а тонкие страницы без контента, которые создают дубли, размывают внутреннюю перелинковку и мешают поисковику выбирать нормальную каноническую страницу.
Проблема особенно заметна на сайтах, где медиафайлы активно загружаются в статьи: изображения получают собственные URL, а затем эти URL попадают в sitemap, в отчёты по индексации и иногда даже в выдачу. Если задача — оставить сами файлы доступными, но убрать отдельные страницы вложений, это лучше сделать явно, а не ждать, пока поисковик сам разберётся.
Когда attachment-страницы действительно мешают
Не каждый сайт обязан отключать страницы вложений. Если у вас фотобанк, каталог изображений или контент, где медиа само по себе является посадочной страницей, подход будет другим. Но для обычного корпоративного сайта, блога или медиа-проекта attachment-страницы чаще всего бесполезны.
Типичные признаки проблемы
- в поиске появляются URL с изображениями вместо нормальных статей;
- в отчётах Search Console растёт число страниц без полезного контента;
- в sitemap видны URL вложений;
- на сайте есть много медиафайлов, но они не несут самостоятельной ценности;
- плагины SEO или тема не перенаправляют attachment-страницы на родительский пост.
Если вы хотите быстро проверить ситуацию, откройте несколько URL вложений вручную и посмотрите, что именно отдаёт сайт: отдельную страницу с заголовком изображения, пустой шаблон или редирект. Это сразу покажет, есть ли смысл в доработке.
Диагностика: как понять, что именно нужно исправить
Сначала проверьте, как WordPress обрабатывает attachment-страницы сейчас. В разных установках поведение отличается: где-то они доступны, где-то уже закрыты темой или SEO-плагином, а где-то отдают 200 OK и спокойно индексируются.
Что смотреть в первую очередь
- открывается ли URL вложения в браузере;
- какой код ответа возвращается: 200, 301 или 404;
- есть ли на странице текст, кроме изображения и служебных элементов;
- попадает ли URL в XML-карту сайта;
- есть ли у вложения родительская запись.
Если у attachment-страницы нет полезного контента, а файл нужен только как медиа внутри статьи, лучший вариант — перенаправить такие URL на родительский пост или на сам файл, если это оправдано логикой проекта. Для SEO обычно безопаснее редирект на родительскую запись.
Пошаговое решение: отключаем attachment-страницы через код
Самый предсказуемый способ — добавить редирект в functions.php дочерней темы или в свой мини-плагин. Так вы не зависите от настроек темы и не ждёте, пока SEO-плагин обработает этот кейс так, как вам нужно.
Ниже вариант, который отправляет attachment-страницы на родительскую запись, а если родителя нет — на главную. Это рабочая схема для большинства сайтов с обычной структурой контента.
add_action( 'template_redirect', function () {
if ( is_attachment() ) {
$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;
}
} );Этот вариант не удаляет медиафайлы и не ломает загрузку изображений в контенте. Он только убирает отдельные страницы вложений из пользовательского и поискового сценария.
Если нужен не редирект, а 404 для вложений
Иногда attachment-страницы лучше не перенаправлять, а закрыть как несуществующие. Это уместно, если на сайте нет смысла сохранять старые URL вложений и вы хотите быстрее вычистить их из индекса. Но такой подход требует аккуратности: если на вложения уже есть внешние ссылки, часть трафика потеряется.
add_action( 'template_redirect', function () {
if ( is_attachment() ) {
global $wp_query;
$wp_query->set_404();
status_header( 404 );
nocache_headers();
include get_query_template( '404' );
exit;
}
} );Для большинства проектов редирект всё же практичнее, потому что сохраняет переходы со старых ссылок и не создаёт лишних ошибок в логах.
Сравнение подходов
| Подход | Что делает | Плюсы | Минусы |
|---|---|---|---|
| Редирект на родительскую запись | Перенаправляет attachment-URL на статью | Сохраняет трафик, понятен поисковику | Нужна логика для вложений без родителя |
| Редирект на главную | Уводит все вложения на главную страницу | Просто внедрить | Слабая семантика, не лучший вариант для SEO |
| 404 для attachment | Полностью отключает страницы вложений | Быстро убирает дубли | Потеря старых URL и возможных переходов |
Если сайт уже в индексе и attachment-страниц много, чаще всего выбирают редирект. Если проект новый и вы хотите сразу убрать лишний слой URL, можно идти через 404.
Как отключить attachment-страницы через SEO-плагин
Некоторые SEO-плагины умеют закрывать attachment-страницы без кода. Это удобно, если вы не хотите править тему. Но перед включением такой настройки проверьте, что плагин делает именно редирект, а не просто ставит noindex: для уже проиндексированных URL noindex может срабатывать медленнее, чем 301.
Если в вашем SEO-плагине есть настройка перенаправления вложений, включайте её только после проверки на тестовом URL. У разных плагинов поведение отличается, и это важно учитывать на живом сайте.
Когда код лучше плагина
- нужно одинаковое поведение на всех сайтах проекта;
- не хочется зависеть от обновлений плагина;
- нужна точная логика для вложений с родителем и без родителя;
- важно минимизировать лишние настройки в админке.
Если у вас уже используется Clearfy Pro для технической чистки WordPress, имеет смысл проверить, не закрывает ли он attachment-страницы в текущей конфигурации. Но даже в этом случае полезно понимать, какой именно механизм включён: редирект, noindex или отключение шаблона.
Clearfy Pro удобен именно тем, что закрывает часть технических дублей без ручной правки кода, но для нестандартных сценариев код всё равно остаётся самым прозрачным вариантом.
Проверка результата после внедрения
После правки не ограничивайтесь открытием одной страницы в браузере. Нужно проверить, что attachment-URL действительно перестали быть отдельными посадочными и не остались в индексе как мусорные страницы.
Чек-лист проверки
- откройте несколько старых URL вложений и убедитесь, что они отдают 301 или 404;
- проверьте, что редирект ведёт на нужную страницу, а не на случайный URL;
- посмотрите исходный код страницы: нет ли canonical на attachment-URL;
- проверьте XML-sitemap, если он включает медиа;
- прогоните сайт через Search Console и посмотрите, исчезают ли URL вложений из отчётов;
- убедитесь, что изображения в статьях продолжают загружаться и не ломаются в медиабиблиотеке.
Для быстрой проверки можно использовать curl:
curl -I https://example.com/sample-image/В ответе должен быть либо 301 Moved Permanently с корректным Location, либо 404 Not Found, если вы выбрали жёсткое отключение. Если видите 200 OK, значит attachment-страница всё ещё доступна.
Частые ошибки и как их исправить
Редирект сделан на главную для всех вложений
Это рабочий, но грубый вариант. Если у вложения есть родительская запись, лучше отправлять пользователя именно туда. Иначе вы теряете релевантность и создаёте лишний шаг навигации.
Сломались изображения в контенте
Обычно это происходит, когда путают attachment-страницу и сам файл в /uploads/. Редирект должен касаться только шаблона вложения, а не URL медиафайла. Проверьте, что вы не трогаете физические файлы в медиабиблиотеке.
Плагин SEO ставит noindex, но URL всё равно в индексе
Это не ошибка WordPress, а вопрос скорости переобхода. Если URL уже были в индексе, одного noindex может быть мало. В таких случаях 301 на родительскую запись обычно быстрее приводит к нужному результату.
Редирект зациклился
Так бывает, если attachment-страница указывает на родителя, который сам является вложением или нестандартным типом записи. Добавьте проверку, чтобы редирект выполнялся только для обычных attachment-страниц, и протестируйте несколько реальных URL.
Безопасность и производительность
С точки зрения производительности редирект на уровне template_redirect не даёт большого выигрыша сам по себе, но убирает лишнюю обработку пустых шаблонов и снижает количество бесполезных страниц в обходе поисковиком. Это особенно полезно на сайтах с большим архивом медиа.
С точки зрения безопасности важно не использовать сомнительные плагины, которые обещают «почистить SEO» и при этом меняют поведение сайта без прозрачной логики. Для такой задачи лучше либо понятный код, либо проверенный инструмент с ясными настройками. Если редирект пишете вручную, храните его в дочерней теме или мини-плагине, чтобы не потерять при обновлении.
Если на сайте есть CDN, кэш-плагин или серверный кэш, после изменения правил обязательно очистите кэш. Иначе вы можете проверять уже старую версию attachment-страницы и думать, что редирект не работает.
В результате вы оставляете медиафайлы на месте, но убираете отдельный слой бесполезных URL, который чаще всего только мешает индексации и аналитике. Для технически чистого WordPress это один из тех случаев, где простое правило работает лучше, чем попытка «доработать» шаблон вложений вручную.