wp3.ru wordpress wp3.ru

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

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

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

Когда attachment-страницы становятся проблемой

Сама по себе страница вложения не всегда вредна. Но на практике она мешает, если:

  • в индексе уже есть сотни или тысячи URL вида /image-name/;
  • на attachment-страницах нет уникального текста, только картинка и заголовок;
  • в поиске всплывают страницы вложений вместо нормальных записей;
  • плагин SEO или тема создают canonical не туда, куда нужно;
  • после миграции сайта остались старые attachment-URL со статусом 200.

Диагностика простая: откройте несколько URL вложений вручную и посмотрите, что отдаёт сервер. Если это отдельная страница с изображением и минимальной обвязкой, а не редирект, значит проблема есть. Дополнительно проверьте отчёты в Search Console по страницам с низкой ценностью и поисковый оператор site:example.com inurl:attachment — он быстро показывает масштаб.

Что лучше: редирект, noindex или удаление шаблона

Для attachment-страниц есть три основных подхода. У каждого свой компромисс.

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

На практике чаще всего выбирают редирект. Он понятнее для поисковиков и не оставляет в индексе пустую страницу. Если у вас есть старые ссылки на attachment-URL, редирект ещё и спасает пользователей от 404.

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

1. Перенаправить attachment-страницы на файл или родительскую запись

Самый безопасный вариант — отправлять attachment-страницу либо на сам файл изображения, либо на родительский пост, если он есть. Для этого можно использовать хук template_redirect.

<?php
add_action( 'template_redirect', function () {
    if ( ! is_attachment() ) {
        return;
    }

    global $post;

    if ( ! $post ) {
        wp_safe_redirect( home_url( '/' ), 301 );
        exit;
    }

    $parent_id = $post->post_parent;

    if ( $parent_id ) {
        $parent_url = get_permalink( $parent_id );
        if ( $parent_url ) {
            wp_safe_redirect( $parent_url, 301 );
            exit;
        }
    }

    $file_url = wp_get_attachment_url( $post->ID );
    if ( $file_url ) {
        wp_safe_redirect( $file_url, 301 );
        exit;
    }

    wp_safe_redirect( home_url( '/' ), 301 );
    exit;
} );

Логика здесь простая: сначала пробуем родительскую запись, потом сам файл, потом главную страницу как запасной вариант. Это лучше, чем отправлять все attachment-URL в одну точку без разбора.

2. Отключить индексирование через wp_robots

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

<?php
add_filter( 'wp_robots', function( array $robots ) {
    if ( is_attachment() ) {
        $robots['noindex'] = true;
        $robots['nofollow'] = true;
    }

    return $robots;
} );

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

3. Убрать ссылку на attachment-страницу из медиа-вставок

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

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

    return $file_url ? $file_url : $link;
}, 10, 2 );

Так вы снижаете шанс, что тема или старый контент продолжат вести пользователей на отдельные страницы вложений.

Если нужен плагин, а не код

Если вы не хотите держать это в теме или mu-plugin, можно использовать SEO-плагин с настройками редиректов и индексации. Но важно смотреть не на название функции в интерфейсе, а на фактическое поведение: создаёт ли плагин 301-редирект, ставит ли noindex и не оставляет ли цепочку через промежуточный URL.

Из практики удобнее всего сначала проверить, умеет ли плагин:

  • редиректить attachment-страницы на родительскую запись;
  • не трогать сами файлы в /uploads/;
  • не создавать 302 вместо 301;
  • не ломать Open Graph и превью изображений.

Если плагин делает только noindex, это не всегда достаточно. Для уже проиндексированных страниц лучше именно редирект.

Как проверить, что решение сработало

Проверка должна быть не визуальной, а технической. Смотрите три вещи: код ответа, целевой URL и наличие индексации.

  1. Откройте старый attachment-URL в браузере или через curl -I.
  2. Убедитесь, что сервер отдаёт 301 Moved Permanently, а не 200 OK или 302 Found.
  3. Проверьте, что редирект ведёт на нужную запись или файл, а не на главную без причины.
  4. Посмотрите исходный код целевой страницы: не должно быть лишнего noindex на нормальных записях.
  5. Через несколько дней проверьте Search Console: старые attachment-URL должны уходить из отчётов по страницам с проблемами.

Пример быстрой проверки из консоли:

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

Если вместо редиректа вы видите 200, значит код не сработал или его перебивает другой плагин/тема.

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

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

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

Используется 302 вместо 301

Временный редирект не подходит для постоянной чистки индекса. Если URL больше не должен жить как отдельная страница, нужен 301.

Путают attachment-страницу и файл в /uploads/

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

Редирект конфликтует с SEO-плагином

Если SEO-плагин уже ставит canonical или noindex на attachment-страницы, ваш код может работать частично. В таком случае оставьте один источник логики: либо плагин, либо собственный код. Два механизма одновременно часто создают путаницу.

Ставят noindex и ждут, что URL исчезнет сразу

noindex не удаляет страницу из индекса мгновенно. Если URL уже в поиске, быстрее помогает 301-редирект и последующая переобходка.

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

Если вы вносите код, не правьте functions.php на живой теме без бэкапа. Для таких задач удобнее использовать небольшой mu-plugin или собственный мини-плагин: код не потеряется при обновлении темы и проще отключается при конфликте.

Ещё два момента, которые часто забывают:

  • не делайте редирект через PHP без проверки is_attachment(), иначе можно случайно затронуть другие типы страниц;
  • не используйте внешние URL для редиректа, если это не осознанная миграция: так проще получить открытый редирект и проблемы с безопасностью.

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

Что делать после внедрения

Когда редирект уже работает, не останавливайтесь на одном URL. Возьмите 10–20 старых attachment-страниц из логов, Search Console или карты сайта и проверьте их вручную. Если часть из них отдаёт 404, значит в базе есть старые ссылки, которые не покрываются текущей логикой. Если часть ведёт на неправильные записи, значит у вложений сломан post_parent или тема подменяет ссылку.

В нормальной схеме после внедрения у вас остаётся только файл изображения в /uploads/, а отдельная attachment-страница либо редиректит, либо закрыта от индексации. Это и есть тот случай, когда техническая чистка реально упрощает жизнь и вам, и поисковику.

×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »