Как отключить индексацию attachment-страниц в WordPress и оставить медиа на сайте

Attachment-страницы в WordPress часто создают лишние URL: у изображения появляется отдельная страница вложения, которая не несёт пользы пользователю и нередко дублирует контент записи. Если сайт уже собрал такие страницы в индексе, проще не удалять медиафайлы, а аккуратно отключить именно индексацию attachment-архивов и при необходимости настроить редирект на сам файл или на родительскую запись.

Когда проблема действительно есть

Сначала проверьте, что именно попало в поиск. Не путайте attachment-страницы с самими файлами изображений. Файл по адресу вроде /wp-content/uploads/2026/01/photo.jpg должен оставаться доступным, а вот страница вида /photo-name/ или /?attachment_id=123 обычно и создаёт мусор в индексе.

Признаки, что attachment-страницы мешают SEO

  • в поиске видны отдельные страницы изображений без полезного текста;
  • в отчётах по индексации растёт число тонких страниц;
  • в выдаче открывается не статья, а пустая страница вложения;
  • внутренние ссылки ведут на attachment, хотя пользователю нужен пост или сам файл.

Если сайт небольшой, это может быть незаметно. На контентных проектах и в медиа такие страницы быстро разрастаются, особенно если изображения активно вставляются в записи и страницы.

Диагностика: что именно нужно отключать

У WordPress есть два разных сценария:

  1. страница attachment открывается как отдельный HTML-URL;
  2. поисковик индексирует её как полноценную страницу, хотя там почти нет контента.

Вам нужно решить обе задачи: убрать индексацию и, по возможности, не оставлять пользователя на пустой странице вложения. Но сначала проверьте, не используется ли 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 без смысла и что поисковик видит корректный сигнал.

  1. Откройте attachment-URL в браузере.
  2. Проверьте, что происходит редирект на запись или на файл.
  3. Посмотрите исходный код, если редирект не используется: должен быть noindex,follow.
  4. Проверьте ответ через curl -I https://example.com/attachment-url/ и убедитесь, что код ответа 301, а не 200.
  5. В 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 в индексе. Если после настройки в поиске остаются только полезные страницы, задача решена правильно.

Решение ошибки AJAX 403 Forbidden в WordPress
18.09.2026
Как исправить проблему с неработающим WooCommerce Cart AJAX на сайте WordPress
13.09.2026
Как исправить, если XML Sitemap в WordPress не обновляется
25.09.2026
Решение ошибки 500 Internal Server Error в WordPress: подробный разбор и примеры
23.09.2026
Как исправить ошибку Allowed memory size exhausted в WordPress
29.09.2026