Attachment-страницы в WordPress часто всплывают в поиске как отдельные URL с тонким или пустым содержимым. На небольшом сайте это выглядит как мусор в индексе, на большом — как лишние дубли, которые мешают нормальной оценке страниц и отнимают краулинговый бюджет. Проблема обычно не в самих файлах медиа, а в том, что WordPress по умолчанию создаёт для каждого вложения отдельную страницу-обёртку.
Если у вас уже есть статьи про пагинацию, технические страницы и 404, attachment-страницы — следующий логичный кандидат на чистку. Ниже разберём, как понять, что именно они мешают, какие есть рабочие способы закрыть их от индексации и как не сломать ссылки на изображения в контенте.
Когда attachment-страницы действительно проблема
Не каждый сайт обязан их закрывать. Если вы осознанно используете страницы вложений как отдельные посадочные, это уже другая задача. Но в типичном проекте они создают три сценария, которые стоит проверить вручную:
- в поиске появляются URL вида
/attachment/или страницы с названием файла; - вместо самой статьи в индексе торчат пустые страницы медиа;
- внутренние ссылки ведут не на файл изображения, а на attachment-страницу.
Быстрая диагностика
Сначала посмотрите, как WordPress отдаёт вложения на вашем сайте. Откройте несколько изображений из медиатеки и проверьте URL. Если при клике по картинке вы попадаете не на файл, а на отдельную страницу вложения, это уже повод вмешаться.
Дополнительно проверьте индекс через поиск по сайту и в панели вебмастера. Ищите запросы по имени файла, по фрагменту URL и по заголовкам attachment-страниц. Если такие страницы получают показы, значит поисковик их уже увидел.
Что лучше: редирект, noindex или отключение attachment-страниц
Универсального решения нет, но для большинства сайтов рабочая схема одна: не давать attachment-страницам индексироваться и, по возможности, не оставлять их как отдельные посадочные.
| Подход | Что делает | Когда подходит | Компромисс |
|---|---|---|---|
| Редирект на файл или родительскую запись | Уводит пользователя и бота с attachment-страницы | Если страницы вложений не нужны вообще | Нужно аккуратно обработать URL и не сломать медиа |
noindex + nofollow | Оставляет страницу доступной, но просит не индексировать | Если редирект нежелателен или есть старые ссылки | Страница остаётся в обходе, но не должна попадать в индекс |
| Отключение страниц вложений в теме/плагине | Меняет поведение WordPress на уровне сайта | Если нужен системный подход | Зависит от реализации и может конфликтовать с темой |
Пошаговое решение через код
Если вам нужен предсказуемый вариант без лишних зависимостей, проще всего закрыть attachment-страницы через template_redirect и отправить пользователя туда, где реально лежит контент. Для большинства сайтов безопаснее редиректить вложение на родительскую запись, а если родителя нет — на сам файл.
<?php
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
$post = get_post();
if (!$post) {
return;
}
$parent_id = (int) $post->post_parent;
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;
}
});Этот вариант хорош тем, что не оставляет отдельную страницу вложения в обходе. Но есть нюанс: если у вас где-то уже используются attachment-URL как целевые страницы, редирект изменит поведение. Поэтому перед внедрением проверьте, не завязаны ли на них старые ссылки из письма, соцсетей или внешних каталогов.
Если редирект вам не подходит, второй рабочий слой — запрет индексации через wp_robots. Это не убирает страницу из сайта, но снижает шанс её попадания в поиск.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_attachment()) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
return $robots;
});На практике я бы не ставил только noindex без понимания, зачем attachment-страница вообще нужна. Если она не несёт ценности, лучше редирект или отключение создания таких посадочных страниц на уровне темы/плагина.
Если нужно оставить медиа, но убрать дубли
Иногда задача не в полном удалении attachment-страниц, а в том, чтобы изображения в контенте вели не на отдельную страницу, а на файл или на ничего. Тогда проверьте настройки вставки медиа в редакторе и поведение темы. В старых темах и при миграциях часто сохраняется ссылка на attachment-page по умолчанию.
Если вы работаете с кастомной темой, полезно явно задавать поведение ссылок в шаблонах, где выводятся изображения. Например, в карточках записей лучше ссылаться на сам пост или на файл, а не на attachment-страницу, если она не нужна как отдельный объект.
Что проверить после внедрения
После правки не ограничивайтесь открытием одной страницы в браузере. Нужно проверить, как сервер отвечает на старые URL и что видит поисковик.
- Откройте несколько attachment-URL напрямую и убедитесь, что они дают
301илиnoindex, а не обычный200с пустым контентом. - Проверьте исходный код страницы: в
<meta name="robots">или HTTP-заголовках должен быть нужный директивный набор. - Посмотрите, не появились ли цепочки редиректов: attachment → родитель → ещё один редирект.
- В панели вебмастера отправьте на переобход несколько старых URL и проверьте статус через несколько дней, а не сразу.
Если используете кэш-плагин или серверный кэш, очистите его после изменения. Иначе вы можете смотреть на старую версию страницы и решить, что правило не сработало.
Частые ошибки и как их исправить
Редирект поставили, но attachment-страницы всё равно индексируются
Чаще всего причина в том, что поисковик ещё не переобошёл старые URL. Это нормально. Но если спустя время они продолжают появляться, проверьте, не отдаёт ли страница 200 из-за конфликта с плагином SEO, кэшем или кастомной темой.
Сломались ссылки на изображения
Так бывает, если вы редиректите не только attachment-page, но и сам файл вложения. Не путайте URL страницы вложения и URL медиафайла. Файл должен оставаться доступным, иначе пострадают изображения в контенте, Open Graph и вложения в письмах.
Плагин SEO уже ставит свои robots, а ваш код конфликтует
Если у вас установлен SEO-плагин, сначала проверьте его настройки для media/attachments. Иногда достаточно штатной опции, а дополнительный код только создаёт дублирующиеся директивы. В таких случаях лучше оставить один источник правды: либо плагин, либо код.
Редирект ведёт на несуществующего родителя
Это типичная ситуация после импорта контента. У вложения есть post_parent, но родительская запись удалена или скрыта. Поэтому в коде нужен запасной путь на сам файл или на главную страницу медиатеки, если это оправдано вашей структурой.
Практические советы по безопасности и производительности
Не пишите такой код в functions.php активной темы, если тема часто обновляется или меняется. Надёжнее вынести его в небольшой mu-plugin или в собственный мини-плагин. Тогда правило не исчезнет после смены темы.
Если сайт большой, не делайте тяжёлые запросы в template_redirect. В примере выше логика простая и дешёвая: проверка типа записи, получение родителя, редирект. Этого достаточно. Не добавляйте лишние запросы к базе ради логики, которую можно решить штатными функциями WordPress.
Для сайтов, где важна строгая SEO-гигиена, удобно сочетать код и ручную проверку медиатеки. В ряде проектов для этого используют Clearfy Pro, если нужен набор точечных настроек по дублям и чистке сайта, но сам принцип остаётся тем же: сначала понять, что именно создаёт мусор, потом убрать источник, а не только следствие.
Как понять, что проблема закрыта
Считайте задачу решённой, когда выполняются все три условия:
- attachment-URL больше не отдают индексируемую страницу с контентом;
- медиафайлы продолжают открываться и использоваться в записях;
- в поиске постепенно исчезают старые страницы вложений или перестают получать показы.
Если хотя бы один пункт не выполнен, возвращайтесь к диагностике: чаще всего проблема либо в конфликте с SEO-плагином, либо в том, что вы закрыли не тот URL-тип.