Страницы вложений в WordPress часто живут своей жизнью: у изображения есть сама медиафайл-страница, отдельный URL вложения и, иногда, ещё индексируемая копия без полезного контента. В результате в индекс попадают пустые или почти пустые страницы, а поисковик тратит краулинговый бюджет на мусор. Если на сайте много изображений, это быстро превращается в системную проблему.
Ниже разберём, как проверить, что именно создаёт дубли, и как безопасно убрать attachment page без поломки медиафайлов и ссылок в контенте.
Когда проблема действительно в attachment page
Не каждый URL вложения нужно удалять. Иногда медиа-страница используется осознанно: например, если на ней есть уникальное описание изображения, подпись, навигация по галерее или отдельный трафик из поиска по картинкам. Но в типичном корпоративном блоге или на контентном сайте attachment page почти всегда пустая или дублирует сам файл.
Признаки, которые стоит проверить
- в индексе есть URL вида
/attachment/или страницы вложений с заголовками изображений; - в Search Console растёт число страниц без трафика и без кликов;
- в sitemap попадают URL вложений, хотя они не несут самостоятельной ценности;
- поиск по сайту или внутренние ссылки ведут на attachment page вместо самой записи;
- в отчётах краулинга много страниц с тонким контентом или без текста.
Диагностика: где WordPress создаёт дубли
Сначала нужно понять, какой именно тип URL индексируется. В WordPress это может быть:
- страница вложения как отдельный пост типа
attachment; - URL самого файла в
/uploads/; - дубли через архивы медиа, если тема или плагин их выводит;
- страницы с параметрами, которые ссылаются на одно и то же вложение.
Проверка простая: откройте несколько URL вложений вручную и посмотрите, что отдаёт сервер — 200 OK, редирект или пустую страницу. Если страница вложения открывается как полноценная HTML-страница, её нужно либо закрыть от индексации, либо перенаправить на файл или родительскую запись.
Быстрая проверка через шаблонные URL
https://example.com/?attachment_id=123Если сайт использует ЧПУ, URL может выглядеть так:
https://example.com/photo-name/На практике важно не название URL, а поведение: есть ли у страницы уникальный контент и нужна ли она пользователю. Если нет — это кандидат на редирект или noindex.
Что лучше: редирект, noindex или отключение attachment page
Есть три рабочих подхода, и у каждого свой компромисс. Универсального решения без проверки структуры сайта нет.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| Редирект на файл или запись | Страницы вложений не нужны вообще | Убирает дубли из индекса | Нужно аккуратно выбрать цель редиректа |
noindex | Нужно сохранить URL, но не индексировать | Меньше риска сломать старые ссылки | URL остаётся доступным для обхода |
| Отключение attachment page кодом | Нужно системно убрать медиа-страницы | Чистое решение на уровне сайта | Требует проверки темы и плагинов |
Пошаговое решение через редирект attachment page
Если медиа-страницы не используются, самый практичный вариант — перенаправить их на родительскую запись, а если родителя нет, то на сам файл или на главную страницу медиа-библиотеки не вести вовсе. Для большинства сайтов безопаснее редиректить attachment page на родительский пост.
Добавьте код в functions.php дочерней темы или в небольшой mu-plugin:
<?php
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;
}
} );Этот вариант не трогает сами файлы в /uploads/. Он только убирает отдельную HTML-страницу вложения из пользовательского и поискового сценария.
Когда редирект на файл не стоит делать
Редирект на сам файл кажется логичным, но он не всегда удобен. Пользователь попадает на изображение без контекста, а поисковик может продолжать считать URL файла отдельным документом. Если ваша задача — именно убрать HTML-дубли, лучше вести на родительскую запись.
Если нужен noindex вместо редиректа
Иногда attachment page нельзя отключать сразу: например, на старом сайте есть внешние ссылки на такие URL, и вы хотите сначала мягко вывести их из индекса. Тогда добавьте noindex, follow только для страниц вложений.
Пример для wp_head:
<?php
add_action( 'wp_head', function () {
if ( is_attachment() ) {
echo '<meta name="robots" content="noindex, follow" />' . "\n";
}
} );Но здесь есть важный нюанс: если тема или SEO-плагин уже выводит robots meta, не дублируйте тег. Сначала проверьте исходный код страницы. Два одинаковых robots-тега — частая ошибка, из-за которой поведение становится непредсказуемым.
Как убрать attachment page через фильтр пермалинков
Если задача — не только закрыть индексирование, но и не давать WordPress строить отдельные ссылки на вложения, можно перехватывать URL медиафайлов на уровне генерации ссылок. Это полезно, когда тема массово выводит ссылки на attachment page в галереях.
<?php
add_filter( 'attachment_link', function( $link, $post_id ) {
$parent_id = wp_get_post_parent_id( $post_id );
if ( $parent_id ) {
return get_permalink( $parent_id );
}
return home_url( '/' );
}, 10, 2 );Такой подход меняет ссылки, которые WordPress генерирует для вложений. Он не удаляет сами записи attachment из базы, а только убирает нежелательные URL из пользовательского интерфейса.
Проверка результата после внедрения
После правки не ограничивайтесь открытием одной страницы в браузере. Проверьте несколько уровней:
- старый URL attachment page отдаёт 301, а не 200;
- в исходном коде нет лишнего
meta robots; - внутренние ссылки на изображения ведут туда, куда вы ожидаете;
- страницы вложений больше не появляются в sitemap;
- в Search Console новые URL вложений не накапливаются как отдельные страницы.
Для быстрой проверки ответа сервера удобно использовать curl:
curl -I https://example.com/sample-attachment/В ответе должен быть статус 301 и заголовок Location с целевым URL. Если остаётся 200, значит редирект не сработал или его перебивает другой плагин.
Частые ошибки и как их исправить
Редирект поставили, но URL всё ещё индексируется
Это нормально в краткосрочной перспективе: поисковику нужно время переобойти старые адреса. Убедитесь, что старый URL действительно отдаёт 301, а не 302. Затем проверьте, нет ли на него внутренних ссылок из меню, хлебных крошек, блоков галереи или XML-карты сайта.
Сломались галереи и lightbox
Обычно это происходит, если тема или плагин ожидали именно attachment page, а вы заменили ссылки на родительскую запись. В таком случае не переписывайте всё сразу: сначала отключите только индексацию, затем посмотрите, какие шаблоны реально используют эти URL.
Появились дубли robots meta
Это конфликт между кодом темы и SEO-плагином. Оставьте один источник генерации мета-тегов. Если используете Yoast SEO, Rank Math или похожий плагин, не добавляйте второй robots-тег вручную без необходимости.
Редирект ведёт на главную и теряется контекст
Так бывает, если у вложения нет родителя. Лучше заранее решить, куда вести такие URL: на архив медиа не стоит, а на главную — только как запасной вариант. Если таких вложений много, имеет смысл сначала проставить родителя там, где это возможно.
Чек-лист перед публикацией правок
- Проверил, используются ли attachment page в теме или плагинах.
- Сделал список URL, которые должны редиректиться.
- Выбрал один способ: редирект или noindex, без смешивания лишних правил.
- Проверил статус-коды через браузер или
curl. - Убедился, что sitemap не содержит ненужных медиа-страниц.
- Посмотрел Search Console на предмет новых ошибок обхода.
Практические советы по безопасности и производительности
Не вносите такие правки прямо в родительскую тему: обновление её затрёт изменения. Для кода используйте дочернюю тему или mu-plugin. Если сайт большой, лучше вынести логику редиректов в отдельный мини-плагин, чтобы потом не искать её среди шаблонов.
Если у вас уже есть SEO-плагин, сначала проверьте его настройки: некоторые из них умеют отключать attachment page без кода. Но даже тогда полезно убедиться, что плагин не оставил старые URL в индексе и не генерирует лишние ссылки в шаблонах.
На сайтах с большим количеством изображений имеет смысл отдельно проверить медиа-библиотеку на дубли файлов и лишние вложения. Но это уже другая задача: здесь речь именно о HTML-страницах вложений, которые создают мусорный индекс и не дают пользы пользователю.