Страницы вложений в WordPress — это отдельные URL для изображений, PDF и других файлов, которые часто создаются автоматически. На небольшом сайте они могут быть незаметны, но на проектах с большим количеством медиа именно attachment-страницы начинают попадать в индекс, собирать мусорный трафик и плодить дубли. Проблема обычно не в самих файлах, а в том, что WordPress по умолчанию умеет показывать для них отдельную HTML-страницу.
Если у вас в отчётах появляются URL вида /attachment/, /image-name/ или страницы вложений с пустым контентом, их лучше привести в порядок. Ниже — рабочие способы закрыть такие страницы от индексации, не ломая доступ к самим файлам и не создавая лишних редиректов там, где они не нужны.
Когда attachment-страницы становятся проблемой
Сами по себе страницы вложений не всегда вредны. Но на практике они часто содержат только изображение, заголовок и минимум текста. Для поисковика это слабая страница, а для сайта — ещё один URL, который нужно обходить, хранить в индексе и иногда показывать вместо нормальной страницы записи.
Типичные симптомы:
- в индексе есть URL вложений, хотя вы их не продвигали;
- в поиске отображаются страницы с одним изображением и без полезного текста;
- в Search Console растёт число малоценных URL;
- медиа-страницы перехватывают внутреннюю перелинковку из записей или галерей;
- на сайте есть старые SEO-плагины, но attachment-архивы всё равно открываются.
Что важно не перепутать
Закрывать от индексации нужно именно HTML-страницу вложения, а не сам файл изображения или документа. Если вы поставите слишком жёсткие правила на каталог загрузок, можно случайно закрыть от обхода сами медиафайлы, и это уже повлияет на отображение картинок в поиске и на сайте.
Диагностика: как понять, что у вас именно эта проблема
Сначала проверьте, как WordPress отдаёт страницу вложения. Откройте URL изображения как отдельной страницы, а не сам файл. Если вместо файла вы видите страницу с заголовком, описанием и картинкой, значит attachment-страница существует и может индексироваться.
Полезно посмотреть и технические признаки:
- в исходном коде страницы есть обычный HTML-шаблон темы;
- в адресной строке нет прямой ссылки на файл вроде
.jpgили.png; - в Search Console есть URL с типом страницы, похожим на запись, но без содержимого;
- в sitemap попадают URL вложений, если их добавляет тема или плагин.
Если у вас уже стоит SEO-плагин, проверьте его настройки: иногда он умеет закрывать attachment-страницы, но не всегда делает это так, как ожидается. В этом случае лучше не гадать, а проверить фактический ответ сервера и мета-теги.
Пошаговое решение: что делать на практике
Есть три рабочих подхода: редиректить attachment-страницы на родительскую запись, ставить noindex на сами страницы или отключать их вывод на уровне темы/плагина. Выбор зависит от структуры сайта.
| Подход | Когда подходит | Минус |
|---|---|---|
| Редирект на родительскую запись | Если вложения не нужны как отдельные страницы | Нужно аккуратно обработать файлы без родителя |
noindex для attachment-страниц | Если хотите оставить страницу доступной, но не в индексе | Страница остаётся в обходе поисковика |
| Отключение шаблона вложений | Если attachment-страницы не используются вообще | Требует кода и проверки темы |
Вариант 1. Редирект attachment-страниц на родительскую запись
Это самый практичный вариант для большинства сайтов. Пользователь и бот попадают не на пустую страницу вложения, а на нормальный контент. Если у вложения есть родительская запись, редирект ведёт туда. Если родителя нет, можно отправлять на главную или на сам файл — в зависимости от логики сайта.
<?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;
}
wp_safe_redirect(home_url('/'), 301);
exit;
});Этот код можно добавить в дочернюю тему или в собственный мини-плагин. Для продакшена мини-плагин надёжнее: он не сломается при смене темы.
Вариант 2. Оставить страницу, но поставить noindex
Если attachment-страницы нужны для каких-то внутренних сценариев, но вы не хотите видеть их в поиске, используйте noindex,follow. Это мягче, чем редирект, и не ломает ссылки, если они уже где-то используются.
<?php
add_filter('wp_robots', function (array $robots) {
if (is_attachment()) {
$robots['noindex'] = true;
$robots['follow'] = true;
}
return $robots;
});Такой вариант особенно полезен, если у вас есть старые ссылки на attachment-страницы из писем, архивов или внешних источников, и вы не хотите сразу менять всю структуру.
Вариант 3. Отключить вывод attachment-страниц в теме
Если вы точно не используете отдельные страницы вложений, можно не только закрыть их от индексации, но и убрать сам шаблон. На практике это делается через редирект или через фильтр, который переводит attachment на родительский контент. Но полностью удалять поддержку без проверки не стоит: некоторые темы и плагины рассчитывают, что attachment-тип существует.
Если нужен более управляемый способ без ручного кода, можно использовать SEO-плагин или утилиту для чистки дублей. Например, в Clearfy Pro есть инструменты для удаления дублей и технической оптимизации, но перед включением любой опции нужно проверить, как она влияет именно на ваш шаблон и sitemap.
Как проверить, что решение сработало
После внедрения не ограничивайтесь визуальной проверкой. Нужно убедиться, что сервер отдаёт нужный ответ, а поисковик видит именно то, что вы задумали.
- Откройте attachment-URL в браузере и проверьте, куда он ведёт: на родителя, главную или остаётся на месте.
- Посмотрите исходный код страницы и найдите мета-тег robots или заголовок
X-Robots-Tag, если он используется. - Проверьте ответ через
curl -I https://example.com/attachment-url/или через инструменты разработчика. - В Search Console отправьте URL на повторную проверку и посмотрите, меняется ли статус индексации.
curl -I https://example.com/sample-attachment/Если вы используете редирект, в ответе должен быть 301 и новый адрес в заголовке Location. Если используете noindex, страница должна открываться, но в HTML или заголовках должен быть запрет на индексацию.
Частые ошибки и как их исправить
Редирект поставили слишком широко
Иногда разработчики вешают редирект на все медиа-URL, включая прямые файлы. В результате картинки перестают открываться как файлы, а это уже ломает сайт. Проверяйте условие именно на is_attachment(), а не на весь каталог загрузок.
Закрыли от индексации не страницу, а файл
Если в robots.txt или на уровне сервера запретить доступ к папке uploads целиком, поисковик может перестать видеть сами изображения. Это не то же самое, что закрыть HTML-страницу вложения. Для SEO и корректной работы сайта это разные вещи.
Не учли вложения без родителя
У старых медиафайлов родительская запись может отсутствовать. Если в коде не предусмотрен fallback, пользователь получит ошибку или пустой редирект. Для таких случаев лучше заранее определить безопасный адрес назначения.
Плагин SEO и собственный код конфликтуют
Если SEO-плагин уже ставит noindex, а вы дополнительно делаете редирект, результат может быть непредсказуемым. Сначала проверьте, что именно делает плагин, и только потом добавляйте свой код. Два решения одной задачи часто мешают друг другу.
Чек-лист перед публикацией изменений
- Проверить, используются ли attachment-страницы в теме или в старых ссылках.
- Выбрать один сценарий: редирект или
noindex. - Убедиться, что прямые файлы изображений не закрыты от доступа.
- Проверить ответ сервера на тестовом attachment-URL.
- Посмотреть, не добавляет ли SEO-плагин свои правила для вложений.
- Отправить несколько URL на повторную проверку в Search Console.
Безопасность и производительность
Любой код для редиректа или фильтра robots лучше хранить не в functions.php основной темы, а в дочерней теме или отдельном плагине. Тогда вы не потеряете настройку после обновления шаблона. Если сайт большой, лишние attachment-страницы ещё и создают нагрузку на обход: бот тратит время на пустые URL вместо полезных страниц.
Если у вас много старых медиа, имеет смысл дополнительно проверить sitemap и внутренние ссылки. Иногда attachment-страницы продолжают попадать в карту сайта из-за настроек темы, кастомного плагина или старого SEO-модуля. В таких случаях закрыть страницу от индексации недостаточно — нужно убрать её из источников, которые продолжают её рекламировать поисковику.
Для сайтов, где важна техническая чистота, удобно держать под рукой набор инструментов для удаления дублей и настройки индексации. Но даже с плагином логика остаётся той же: сначала понять, какие URL реально нужны, потом закрыть лишнее и проверить ответ сервера, а не только галочку в админке.