Attachment-страницы в WordPress часто создают лишние URL: у изображения появляется отдельная страница вложения, которая не несёт пользы пользователю и нередко дублирует контент записи. Если сайт уже собрал такие страницы в индексе, проще не удалять медиафайлы, а аккуратно отключить именно индексацию attachment-архивов и при необходимости настроить редирект на сам файл или на родительскую запись.
Когда проблема действительно есть
Сначала проверьте, что именно попало в поиск. Не путайте attachment-страницы с самими файлами изображений. Файл по адресу вроде /wp-content/uploads/2026/01/photo.jpg должен оставаться доступным, а вот страница вида /photo-name/ или /?attachment_id=123 обычно и создаёт мусор в индексе.
Признаки, что attachment-страницы мешают SEO
- в поиске видны отдельные страницы изображений без полезного текста;
- в отчётах по индексации растёт число тонких страниц;
- в выдаче открывается не статья, а пустая страница вложения;
- внутренние ссылки ведут на attachment, хотя пользователю нужен пост или сам файл.
Если сайт небольшой, это может быть незаметно. На контентных проектах и в медиа такие страницы быстро разрастаются, особенно если изображения активно вставляются в записи и страницы.
Диагностика: что именно нужно отключать
У WordPress есть два разных сценария:
- страница attachment открывается как отдельный HTML-URL;
- поисковик индексирует её как полноценную страницу, хотя там почти нет контента.
Вам нужно решить обе задачи: убрать индексацию и, по возможности, не оставлять пользователя на пустой странице вложения. Но сначала проверьте, не используется ли attachment-страница где-то осознанно: например, в старой теме или в галерее, где на неё завязана навигация.
Что проверить перед изменениями
- есть ли в теме шаблон
attachment.php; - используются ли ссылки на attachment в меню, блоках или галереях;
- не закрывает ли SEO-плагин уже эти страницы через
noindex; - не настроен ли редирект на уровне сервера или плагина безопасности.
Пошаговое решение: отключаем индексацию и сохраняем медиа
Есть три рабочих подхода: через SEO-плагин, через код и через комбинированную схему с редиректом. Если нужен быстрый и управляемый вариант, обычно достаточно кода в functions.php дочерней темы или в небольшом плагине.
| Подход | Что делает | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Ставит noindex и иногда редирект | Быстро, без кода | Не всегда даёт точный контроль |
| Код | Отключает attachment-страницы и редиректит их | Прозрачно и предсказуемо | Нужно аккуратно внедрять |
| Комбинированно | noindex + редирект на родителя | Лучше для индексации и UX | Нужно проверить конфликты |
Вариант 1: закрыть attachment-страницы от индексации через код
Если тема или SEO-плагин не справляются, можно добавить noindex для attachment-страниц. Это не удаляет медиа и не ломает загрузку файлов.
add_action('wp_head', function () {
if (is_attachment()) {
echo '<meta name="robots" content="noindex,follow" />' . "\n";
}
});Этот способ полезен как минимальная мера. Но если страница уже доступна по URL, поисковик всё равно может её обходить. Поэтому на практике лучше добавить ещё и редирект.
Вариант 2: редирект attachment-страницы на родительскую запись или файл
Самый рабочий сценарий — отправлять пользователя с attachment-страницы туда, где есть смысл: на родительскую запись, а если её нет, на сам файл изображения. Для этого используйте хук template_redirect.
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
global $post;
if ($post && !empty($post->post_parent)) {
wp_safe_redirect(get_permalink($post->post_parent), 301);
exit;
}
$file = wp_get_attachment_url(get_queried_object_id());
if ($file) {
wp_safe_redirect($file, 301);
exit;
}
});Здесь важно не использовать wp_redirect() без проверки URL. wp_safe_redirect() безопаснее для внутренних переходов. Если attachment без родителя, редирект на файл обычно лучше, чем оставлять пустую страницу.
Вариант 3: если вы используете SEO-плагин
Во многих случаях проще включить настройку, которая ставит noindex для медиа-страниц или автоматически редиректит attachment на файл/родителя. Но перед этим проверьте, не конфликтует ли плагин с вашим кодом. Два редиректа подряд часто дают петлю или лишнюю задержку.
Если у вас уже стоит плагин для чистки дублей и SEO-настроек, например Clearfy Pro, имеет смысл сначала проверить, не решает ли он задачу штатно. Это удобнее, чем держать отдельный фрагмент кода в теме, если у вас несколько сайтов и единая политика индексации.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужно убедиться, что страница вложения больше не отдаёт обычный HTML без смысла и что поисковик видит корректный сигнал.
- Откройте attachment-URL в браузере.
- Проверьте, что происходит редирект на запись или на файл.
- Посмотрите исходный код, если редирект не используется: должен быть
noindex,follow. - Проверьте ответ через
curl -I https://example.com/attachment-url/и убедитесь, что код ответа 301, а не 200. - В Search Console запросите проверку URL и посмотрите, как страница определяется после переобхода.
Если attachment-страница всё ещё индексируется, обычно причина в том, что поисковик ещё не переобошёл старый URL, либо где-то осталась внутренняя ссылка на него.
Частые ошибки и как их исправить
Редирект на саму attachment-страницу
Такое случается, если в коде неправильно получен родитель или используется не тот ID. В результате получается цикл. Проверьте, что post_parent действительно задан, а редирект ведёт на get_permalink() родителя, а не на текущий URL.
Закрыли не только attachment, но и сами файлы
Это уже другая ошибка. Не путайте HTML-страницу вложения и файл в /uploads/. Если вы закрыли доступ к файлам через robots.txt или серверные правила, изображения могут пропасть из поиска и сломаться в контенте.
Поставили noindex, но не убрали внутренние ссылки
Страница может быть закрыта от индексации, но всё равно оставаться в обходе и в логике сайта. Если тема или плагин вставляют ссылки на attachment, лучше заменить их на ссылку на файл или на запись, где изображение используется.
Конфликт с кэшем
После изменения кода старые заголовки и HTML могут отдаваться из кэша. Очистите кэш плагина, серверный кэш и CDN, если он есть. Иначе вы увидите старую версию страницы и решите, что правка не сработала.
Практические советы по безопасности и производительности
Если вы вносите код вручную, не правьте functions.php основной темы на боевом сайте. Используйте дочернюю тему или маленький mu-plugin. Так вы не потеряете изменения после обновления.
<?php
/**
* Plugin Name: Disable Attachment Pages Redirect
*/
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
$attachment_id = get_queried_object_id();
$parent_id = wp_get_post_parent_id($attachment_id);
if ($parent_id) {
wp_safe_redirect(get_permalink($parent_id), 301);
exit;
}
$file = wp_get_attachment_url($attachment_id);
if ($file) {
wp_safe_redirect($file, 301);
exit;
}
});Такой мини-плагин проще отключить, чем искать фрагмент в теме. Для производительности это тоже лучше: логика изолирована, а не размазана по шаблонам.
Когда лучше не редиректить attachment-страницы
Если у вас есть редкая тема, где attachment-страницы используются как часть пользовательского сценария, не ломайте её без проверки. В таком случае можно ограничиться noindex и убрать страницы из sitemap, если они туда попали. Но для большинства контентных сайтов редирект на родителя или файл — более практичное решение.
Главная проверка простая: attachment-страница не должна конкурировать с основным контентом и не должна создавать пустые URL в индексе. Если после настройки в поиске остаются только полезные страницы, задача решена правильно.