Страницы вложений в WordPress часто создаются автоматически для каждого изображения, PDF или другого медиафайла. Проблема в том, что такие URL нередко оказываются в поиске как пустые или почти пустые страницы: на них нет полезного текста, а иногда и вовсе только картинка без контекста. Для сайта это лишний мусор в индексе, а для пользователя — тупиковая страница вместо нормальной записи.
Рабочее решение обычно состоит из двух частей: закрыть страницы вложений от индексации и настроить перенаправление на родительскую запись, если она есть. Тогда поисковики не будут держать в индексе слабые страницы, а посетитель попадёт туда, где изображение или файл действительно встроены в контент.
Что именно нужно убрать и почему одной настройки часто недостаточно
У медиафайла в WordPress может быть собственная страница вложения. Она открывается по отдельному URL и технически считается записью. Если изображение прикреплено к посту, у вложения может быть post_parent — ID родительской записи. Если родителя нет, страница вложения всё равно существует, но обычно не несёт пользы.
Здесь важно разделить две задачи:
- исключить из поиска — чтобы поисковики не индексировали страницы вложений;
- перенаправить пользователя — чтобы при переходе по старому URL он попадал на родительскую запись, а не на пустую страницу.
Если сделать только редирект, но оставить страницы доступными для индексации, поисковик всё равно может какое-то время видеть их в выдаче. Если только закрыть от индексации, но не настроить редирект, пользователь по старым ссылкам будет попадать на слабую страницу. Поэтому лучше закрывать обе проблемы сразу.
Самый простой способ: отключить страницы вложений через редирект в теме или плагине
Если вам нужен именно практический результат без лишней ручной работы, самый надёжный вариант — добавить редирект для attachment-страниц в functions.php дочерней темы или в небольшой собственный плагин. Так вы не зависите от настроек конкретной темы и не теряете правило после обновления.
Перед изменениями сделайте резервную копию файлов и базы. Если на сайте уже есть трафик на страницы вложений, редирект меняет поведение URL, поэтому лучше проверить его на staging-копии или хотя бы в часы низкой нагрузки.
Ниже код, который перенаправляет вложение на родительскую запись, а если родителя нет — на главную страницу сайта:
add_action( 'template_redirect', function () {
if ( is_attachment() ) {
$parent_id = wp_get_post_parent_id( get_the_ID() );
if ( $parent_id ) {
wp_safe_redirect( get_permalink( $parent_id ), 301 );
exit;
}
wp_safe_redirect( home_url( '/' ), 301 );
exit;
}
} );Что делает этот код:
is_attachment()срабатывает только на страницах вложений;wp_get_post_parent_id()берёт ID родительской записи;wp_safe_redirect()отправляет постоянный редирект 301;exitзавершает выполнение, чтобы WordPress не продолжал рендерить страницу.
Если у вас много вложений без родителя, редирект на главную — рабочий, но не идеальный вариант. Для SEO и удобства лучше по возможности привязывать медиа к конкретным записям, чтобы пользователь попадал в релевантный контекст, а не на общий URL сайта.
Как закрыть страницы вложений от индексации
Редирект решает поведение для пользователя, но поисковику всё равно полезно явно показать, что страница не должна участвовать в индексации. Есть несколько способов, и выбор зависит от того, чем вы управляете сайтом.
Через SEO-плагин
Если на сайте уже стоит SEO-плагин, проверьте, есть ли в нём настройка для медиа-страниц или attachment URLs. У некоторых решений можно отключить индексацию вложений и автоматически перенаправлять их на родительскую запись. Это удобнее, чем править код, если вы не хотите поддерживать собственный фрагмент.
Но здесь есть нюанс: не все плагины одинаково обрабатывают вложения. Одни только ставят noindex, другие ещё и включают редирект. После изменения обязательно проверьте фактическое поведение URL, а не только галочку в настройках.
Через мета-тег noindex
Если редирект по какой-то причине не нужен, можно оставить страницу доступной, но закрыть её от индексации через noindex. Для этого обычно используют SEO-плагин или собственную логику вывода мета-тега. Однако для вложений это менее полезный вариант, чем редирект: пользователь всё равно может попасть на пустую страницу.
Поэтому на практике noindex стоит рассматривать как дополнительную меру, а не как замену перенаправлению.
Если нужен только код без плагинов
Иногда на сайте лишний плагин не нужен, а задача сводится к одному правилу. Тогда можно обойтись кодом выше и дополнительно убедиться, что страницы вложений не попадают в XML-карту сайта. В стандартном WordPress attachment-страницы обычно не должны быть в sitemap, но это зависит от темы, SEO-плагина и того, как настроена генерация карты сайта.
Если вы используете собственную логику вывода robots.txt или мета-тегов, не пытайтесь закрывать вложения только через Disallow в robots.txt. Это не убирает URL из индекса само по себе. Поисковик может знать о странице по внешним ссылкам или внутренним переходам, даже если не сможет её сканировать. Для удаления слабых страниц из поиска нужен именно редирект или noindex, а не только запрет обхода.
Как проверить, что всё работает
После настройки откройте несколько URL вложений вручную. Проверять нужно не только страницу с картинкой, но и разные сценарии:
- вложение с родительской записью;
- вложение без родителя;
- URL старого изображения, которое уже есть в индексе;
- страницу вложения в мобильной и десктопной версии, если у темы есть отдельная логика шаблонов.
Что вы должны увидеть:
- URL вложения с родителем отдаёт 301 и ведёт на запись;
- вложение без родителя тоже не открывается как отдельная страница, а уходит на выбранный вами адрес;
- в поиске со временем исчезают старые attachment-URL или перестают ранжироваться.
Проверить код ответа можно через инструменты разработчика в браузере, онлайн-проверку заголовков или командой curl -I https://example.com/attachment-url/. Если в ответе нет 301, значит редирект не сработал или его перехватывает другой плагин, тема либо серверное правило.
Какие ошибки встречаются чаще всего
На практике проблемы обычно возникают не в самом редиректе, а в деталях:
- редирект добавили в неправильное место — код вставили в файл, который не загружается на фронтенде, или в родительскую тему, которую потом обновили;
- конфликт с SEO-плагином — плагин уже делает свой редирект, а ваш код создаёт второй слой логики;
- редирект ведёт на главную без причины — это допустимо только для вложений без родителя, иначе лучше отправлять на конкретную запись;
- путают attachment-страницу и сам файл — редирект нужен для страницы вложения, а не для URL самого изображения на сервере;
- ожидают мгновенного исчезновения из поиска — после изменения поисковику нужно время на переобход и обновление индекса.
Если сайт большой и медиафайлов много, сначала проверьте несколько типовых URL, а потом уже массово меняйте логику. Так проще поймать конфликт до того, как он затронет весь архив медиа.
Что выбрать на практике
| Ситуация | Что делать | Комментарий |
|---|---|---|
| Нужен быстрый и надёжный результат | Редирект 301 на родительскую запись | Лучший вариант для большинства сайтов |
| Есть SEO-плагин с настройкой медиа | Включить его обработку вложений и проверить редирект | Подходит, если плагин реально закрывает обе задачи |
| Вложений много, родителя нет | Редирект на главную или на релевантный раздел | Лучше по возможности пересмотреть структуру контента |
| Нужно только убрать из индекса | Добавить noindex | Но пользователь всё равно может открыть страницу |
Если задача именно в том, чтобы убрать слабые страницы из поиска и не ломать навигацию, редирект на родительскую запись — самый здравый вариант. Он не требует сложной поддержки, работает предсказуемо и не оставляет пользователя на пустом URL. А если дополнительно закрыть вложения от индексации, вы уберёте проблему и для поисковиков, и для посетителей, которые приходят по старым ссылкам.