Attachment-страницы часто остаются незаметными до тех пор, пока в индексе не накапливаются пустые URL с изображениями. На небольшом сайте это выглядит как шум, на контентном проекте — как источник дублей, тонких страниц и лишних обходов роботом. Проблема обычно не в самих медиафайлах, а в том, что WordPress по умолчанию создаёт отдельную страницу вложения для каждого загруженного файла.
Если у вас в Search Console всплывают URL вида /attachment/ или отдельные страницы изображений с нулевой ценностью, их лучше либо отключить, либо жёстко переадресовать на родительскую запись или сам файл — в зависимости от структуры сайта.
Как понять, что проблема именно в attachment-страницах
Сначала проверьте, действительно ли эти URL индексируются и отдают отдельный HTML-документ. Для этого достаточно нескольких быстрых проверок:
- в отчёте индексации Search Console есть URL с типом Страница с перенаправлением или Просканировано, но не проиндексировано;
- в поиске по сайту находятся страницы вложений с заголовками вроде названия файла;
- при открытии изображения WordPress показывает не файл, а HTML-страницу вложения;
- в sitemap или внутренних ссылках появляются URL медиа-страниц, а не только файлов.
Быстрая диагностика через браузер или curl помогает понять, что именно отдаёт сервер:
curl -I https://example.com/wp-content/uploads/2024/10/photo.jpgЕсли вы видите не прямой файл, а HTML-страницу вложения, значит WordPress или тема ведут пользователя на attachment URL. Это и есть точка, которую нужно закрыть.
Что лучше: редирект, noindex или полное отключение
Универсального варианта нет. Для большинства сайтов самый безопасный путь — редиректить attachment-страницы на родительскую запись или на сам файл, если родителя нет. Но если у вас есть отдельная логика работы с медиа, иногда удобнее оставить URL доступным и поставить noindex. Полное отключение без редиректа обычно хуже: пользователь и робот получают 404 или пустую страницу.
| Подход | Когда подходит | Минус |
|---|---|---|
| Редирект 301 | Почти всегда для обычного сайта | Нужно аккуратно выбрать целевой URL |
noindex | Если URL должен открываться, но не индексироваться | Страница всё равно будет обходиться роботом |
| Отключение шаблона вложения | Если attachment-страницы не нужны вообще | Без редиректа можно потерять старые входящие ссылки |
Пошаговое решение через код
1. Перенаправьте attachment-страницы на родительскую запись
Этот вариант обычно самый практичный. Добавьте код в functions.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;
}
$file_url = wp_get_attachment_url( get_queried_object_id() );
if ( $file_url ) {
wp_safe_redirect( $file_url, 301 );
exit;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
} );Логика здесь простая: если у вложения есть родитель, отправляем на него; если родителя нет — на сам файл; если и это не удалось, уводим на главную. Для SEO это лучше, чем оставлять пустую страницу.
2. Уберите attachment-URL из выдачи и внутренних ссылок
Если тема или контентный редактор где-то выводят ссылку на страницу вложения, лучше заменить её на ссылку на файл. Для медиа, вставленных в контент, WordPress обычно сам умеет работать корректно, но в кастомных шаблонах это часто ломается.
add_filter( 'wp_get_attachment_link', function( $link, $id, $size, $permalink, $icon, $text ) {
if ( $permalink ) {
return wp_get_attachment_url( $id );
}
return $link;
}, 10, 6 );Этот фильтр нужен не всем. Используйте его только если точно видите, что шаблон генерирует ссылки на attachment-страницы там, где должны быть прямые файлы.
3. Если нужен noindex, задайте его точечно
Иногда attachment-страницы нельзя отключить сразу, например, если на них завязаны старые ссылки. Тогда можно оставить страницу доступной, но запретить индексацию:
add_filter( 'wp_robots', function( $robots ) {
if ( is_attachment() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
} );Это не заменяет редирект, но помогает убрать страницу из индекса, пока вы не переведёте ссылки на нормальные URL.
Проверка результата после внедрения
После правки не ограничивайтесь открытием одной страницы в браузере. Проверьте несколько сценариев:
- откройте старый attachment-URL напрямую и убедитесь, что он отдаёт
301; - проверьте, что целевой URL действительно существует и не создаёт цепочку редиректов;
- посмотрите заголовки ответа через
curl -I; - в Search Console отправьте на проверку несколько старых URL из отчёта индексации;
- поиск по сайту должен перестать находить отдельные страницы вложений.
Пример проверки редиректа:
curl -I https://example.com/sample-image/Нормальный результат — ответ 301 Moved Permanently и заголовок Location с новым адресом. Если вместо этого вы видите 200 OK, значит редирект не сработал или его перебивает другой плагин.
Частые ошибки и как их исправить
Редирект создаёт петлю
Такое бывает, если attachment-страница уже ведёт на URL, который снова попадает под условие редиректа. Обычно причина в том, что целевой адрес формируется неправильно или тема переопределяет шаблон. Проверьте, не уводит ли код на ту же страницу вложения.
Плагин SEO конфликтует с вашим кодом
Некоторые SEO-плагины уже умеют закрывать attachment-страницы или ставить им canonical. Если поверх этого добавить свой редирект, можно получить непредсказуемое поведение. Сначала посмотрите настройки плагина, потом решайте, нужен ли дополнительный код.
Старые ссылки из внешних источников ломаются
Если на attachment-страницы уже есть внешние ссылки, не удаляйте их без редиректа. Иначе вы потеряете часть трафика и получите 404. В таких случаях сначала настройте 301, а уже потом чистите внутренние ссылки и sitemap.
Отключили страницу, но не убрали её из индекса
noindex не даёт мгновенного эффекта. Поисковик должен заново обойти URL. Если страница долго остаётся в индексе, проверьте, не ведут ли на неё внутренние ссылки и не возвращает ли она код 200 вместо редиректа.
Что ещё стоит проверить на сайте
Если проблема с attachment-страницами уже всплыла, обычно рядом есть и другие технические дубли. Имеет смысл проверить:
- архивы авторов и таксономий;
- страницы пагинации с тонким контентом;
- дубли из-за параметров в URL;
- канонические ссылки в теме;
- наличие лишних медиа-страниц в sitemap.
Для сайтов, где нужно быстро навести порядок без ручной правки каждого шаблона, иногда удобнее использовать Clearfy Pro, если он уже есть в стекe: у него есть инструменты для чистки дублей и технических URL. Но если задача точечная, код выше обычно проще и прозрачнее в поддержке.
Мини-чек-лист перед публикацией изменений
- Проверили, есть ли attachment-страницы в индексе.
- Выбрали один сценарий: 301, noindex или отключение.
- Убедились, что редирект не создаёт цепочку.
- Проверили ответ сервера через
curl -I. - Посмотрели, не конфликтует ли решение с SEO-плагином.
- Обновили sitemap и внутренние ссылки, если они вели на attachment URL.
Если после внедрения URL вложений перестали открываться напрямую, но при этом старые адреса корректно переезжают на родительские записи или файлы, задача решена правильно. В этом сценарии вы убираете мусорные страницы из индекса, не ломая медиа и не теряя старые ссылки.