Как найти и убрать дубли attachment page в WordPress без потери SEO

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

Ниже разберём, как проверить, что именно создаёт дубли, и как безопасно убрать attachment page без поломки медиафайлов и ссылок в контенте.

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

Не каждый URL вложения нужно удалять. Иногда медиа-страница используется осознанно: например, если на ней есть уникальное описание изображения, подпись, навигация по галерее или отдельный трафик из поиска по картинкам. Но в типичном корпоративном блоге или на контентном сайте attachment page почти всегда пустая или дублирует сам файл.

Признаки, которые стоит проверить

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

Диагностика: где WordPress создаёт дубли

Сначала нужно понять, какой именно тип URL индексируется. В WordPress это может быть:

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

Проверка простая: откройте несколько URL вложений вручную и посмотрите, что отдаёт сервер — 200 OK, редирект или пустую страницу. Если страница вложения открывается как полноценная HTML-страница, её нужно либо закрыть от индексации, либо перенаправить на файл или родительскую запись.

Быстрая проверка через шаблонные URL

https://example.com/?attachment_id=123

Если сайт использует ЧПУ, URL может выглядеть так:

https://example.com/photo-name/

На практике важно не название URL, а поведение: есть ли у страницы уникальный контент и нужна ли она пользователю. Если нет — это кандидат на редирект или noindex.

Что лучше: редирект, noindex или отключение attachment page

Есть три рабочих подхода, и у каждого свой компромисс. Универсального решения без проверки структуры сайта нет.

ПодходКогда подходитПлюсМинус
Редирект на файл или записьСтраницы вложений не нужны вообщеУбирает дубли из индексаНужно аккуратно выбрать цель редиректа
noindexНужно сохранить URL, но не индексироватьМеньше риска сломать старые ссылкиURL остаётся доступным для обхода
Отключение attachment page кодомНужно системно убрать медиа-страницыЧистое решение на уровне сайтаТребует проверки темы и плагинов

Пошаговое решение через редирект attachment page

Если медиа-страницы не используются, самый практичный вариант — перенаправить их на родительскую запись, а если родителя нет, то на сам файл или на главную страницу медиа-библиотеки не вести вовсе. Для большинства сайтов безопаснее редиректить attachment page на родительский пост.

Добавьте код в functions.php дочерней темы или в небольшой mu-plugin:

<?php
add_action( 'template_redirect', function () {
    if ( is_attachment() ) {
        $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;
    }
} );

Этот вариант не трогает сами файлы в /uploads/. Он только убирает отдельную HTML-страницу вложения из пользовательского и поискового сценария.

Когда редирект на файл не стоит делать

Редирект на сам файл кажется логичным, но он не всегда удобен. Пользователь попадает на изображение без контекста, а поисковик может продолжать считать URL файла отдельным документом. Если ваша задача — именно убрать HTML-дубли, лучше вести на родительскую запись.

Если нужен noindex вместо редиректа

Иногда attachment page нельзя отключать сразу: например, на старом сайте есть внешние ссылки на такие URL, и вы хотите сначала мягко вывести их из индекса. Тогда добавьте noindex, follow только для страниц вложений.

Пример для wp_head:

<?php
add_action( 'wp_head', function () {
    if ( is_attachment() ) {
        echo '<meta name="robots" content="noindex, follow" />' . "\n";
    }
} );

Но здесь есть важный нюанс: если тема или SEO-плагин уже выводит robots meta, не дублируйте тег. Сначала проверьте исходный код страницы. Два одинаковых robots-тега — частая ошибка, из-за которой поведение становится непредсказуемым.

Как убрать attachment page через фильтр пермалинков

Если задача — не только закрыть индексирование, но и не давать WordPress строить отдельные ссылки на вложения, можно перехватывать URL медиафайлов на уровне генерации ссылок. Это полезно, когда тема массово выводит ссылки на attachment page в галереях.

<?php
add_filter( 'attachment_link', function( $link, $post_id ) {
    $parent_id = wp_get_post_parent_id( $post_id );

    if ( $parent_id ) {
        return get_permalink( $parent_id );
    }

    return home_url( '/' );
}, 10, 2 );

Такой подход меняет ссылки, которые WordPress генерирует для вложений. Он не удаляет сами записи attachment из базы, а только убирает нежелательные URL из пользовательского интерфейса.

Проверка результата после внедрения

После правки не ограничивайтесь открытием одной страницы в браузере. Проверьте несколько уровней:

  • старый URL attachment page отдаёт 301, а не 200;
  • в исходном коде нет лишнего meta robots;
  • внутренние ссылки на изображения ведут туда, куда вы ожидаете;
  • страницы вложений больше не появляются в sitemap;
  • в Search Console новые URL вложений не накапливаются как отдельные страницы.

Для быстрой проверки ответа сервера удобно использовать curl:

curl -I https://example.com/sample-attachment/

В ответе должен быть статус 301 и заголовок Location с целевым URL. Если остаётся 200, значит редирект не сработал или его перебивает другой плагин.

Частые ошибки и как их исправить

Редирект поставили, но URL всё ещё индексируется

Это нормально в краткосрочной перспективе: поисковику нужно время переобойти старые адреса. Убедитесь, что старый URL действительно отдаёт 301, а не 302. Затем проверьте, нет ли на него внутренних ссылок из меню, хлебных крошек, блоков галереи или XML-карты сайта.

Сломались галереи и lightbox

Обычно это происходит, если тема или плагин ожидали именно attachment page, а вы заменили ссылки на родительскую запись. В таком случае не переписывайте всё сразу: сначала отключите только индексацию, затем посмотрите, какие шаблоны реально используют эти URL.

Появились дубли robots meta

Это конфликт между кодом темы и SEO-плагином. Оставьте один источник генерации мета-тегов. Если используете Yoast SEO, Rank Math или похожий плагин, не добавляйте второй robots-тег вручную без необходимости.

Редирект ведёт на главную и теряется контекст

Так бывает, если у вложения нет родителя. Лучше заранее решить, куда вести такие URL: на архив медиа не стоит, а на главную — только как запасной вариант. Если таких вложений много, имеет смысл сначала проставить родителя там, где это возможно.

Чек-лист перед публикацией правок

  • Проверил, используются ли attachment page в теме или плагинах.
  • Сделал список URL, которые должны редиректиться.
  • Выбрал один способ: редирект или noindex, без смешивания лишних правил.
  • Проверил статус-коды через браузер или curl.
  • Убедился, что sitemap не содержит ненужных медиа-страниц.
  • Посмотрел Search Console на предмет новых ошибок обхода.

Практические советы по безопасности и производительности

Не вносите такие правки прямо в родительскую тему: обновление её затрёт изменения. Для кода используйте дочернюю тему или mu-plugin. Если сайт большой, лучше вынести логику редиректов в отдельный мини-плагин, чтобы потом не искать её среди шаблонов.

Если у вас уже есть SEO-плагин, сначала проверьте его настройки: некоторые из них умеют отключать attachment page без кода. Но даже тогда полезно убедиться, что плагин не оставил старые URL в индексе и не генерирует лишние ссылки в шаблонах.

На сайтах с большим количеством изображений имеет смысл отдельно проверить медиа-библиотеку на дубли файлов и лишние вложения. Но это уже другая задача: здесь речь именно о HTML-страницах вложений, которые создают мусорный индекс и не дают пользы пользователю.

Как отключить отложенную загрузку скриптов в WordPress для ускорения сайта
01.09.2026
Как создать автоматическую резервную копию WordPress с помощью WPRemark
02.10.2026
Как автоматизировать создание бэкапов в WordPress
23.09.2026
Как добавить динамические параметры в шорткод WordPress
23.09.2026
Как найти и удалить дубли изображений в WordPress без потери данных
04.09.2026