Если в проекте есть медиафайлы, WordPress по умолчанию может вести attachment-страницы не так, как ожидает SEO-специалист или разработчик. В одном случае они отдают отдельный URL, в другом — редиректят на вложение или родительскую запись, а иногда это ломает логику индексации, мешает анализу в Search Console и создаёт лишние переходы в логах.
Проблема обычно всплывает после миграции, установки SEO-плагина или правки темы: attachment-страницы начинают вести себя непредсказуемо, а в индексе остаются URL, которые не несут пользы. Ниже — практический разбор, как понять, что именно происходит, и как отключить редирект без побочных эффектов.
Когда это действительно проблема
Attachment-страница — это отдельная запись типа attachment, которую WordPress создаёт для загруженного файла. На чистой установке она может открываться как обычная страница вложения. Но на многих сайтах её поведение меняют темы, SEO-плагины или кастомный код.
Типичные сценарии:
- attachment-URL отдаёт 301/302 на сам файл, а не на страницу;
- attachment-URL редиректит на родительскую запись;
- в индексе остаются старые attachment-страницы после смены темы;
- внутренние ссылки из медиатеки ведут на URL, который вам не нужен;
- поисковик видит много тонких страниц без контента.
Если attachment-страницы не нужны как отдельные посадочные, их обычно либо закрывают от индексации, либо переводят на более предсказуемый сценарий: на файл или на родительскую запись. Главное — не смешивать оба подхода в одном проекте.
Диагностика: что именно редиректится и кем
Сначала нужно понять, откуда идёт редирект: из ядра, темы, плагина или сервера. Самый быстрый способ — посмотреть заголовки ответа.
Проверка через curl
curl -I https://example.com/sample-attachment/Если видите 301 или 302, смотрите заголовок Location. Он покажет, куда именно уходит запрос. Если редирект идёт на файл, это одно поведение. Если на родительскую запись — другое.
Дальше проверьте, не вмешивается ли плагин. Временно отключать всё на боевом сайте не нужно: достаточно посмотреть, есть ли фильтры на template_redirect или redirect_canonical. В практике чаще всего редирект attachment-страниц делают через фильтр redirect_canonical или через SEO-плагин.
Что проверить в админке и коде
- Настройки SEO-плагина: есть ли опция для attachment-страниц;
- functions.php темы: нет ли кода с
wp_redirect()или фильтромredirect_canonical; - mu-plugins: часто именно там лежит «временный» код, который забыли удалить;
- robots.txt и meta robots: если attachment-страницы нужны, но закрыты случайно, это отдельная история;
- логи сервера: если редиректов много, полезно увидеть частоту запросов.
Как отключить редирект attachment-страниц кодом
Если задача — оставить attachment-страницы доступными и не отправлять их на другой URL, можно отключить канонический редирект для этого типа записей. Это аккуратнее, чем ставить глобальный запрет на все редиректы.
Добавьте код в mu-plugin или в плагин сайта, а не в тему, если поведение должно переживать смену шаблона.
<?php
/**
* Отключает canonical redirect для attachment-страниц.
*/
add_filter( 'redirect_canonical', function( $redirect_url, $requested_url ) {
if ( is_attachment() ) {
return false;
}
return $redirect_url;
}, 10, 2 );Что делает этот код: если запрос пришёл на attachment-страницу, WordPress не будет пытаться канонизировать URL и отправлять пользователя на другой адрес. Для остальных страниц поведение остаётся штатным.
Если у вас редирект делает не ядро, а кастомная логика темы, этот фильтр может не помочь. Тогда ищите прямой вызов wp_redirect() или template_redirect.
Если нужно редиректить attachment на файл, а не отключать редирект
Иногда цель обратная: attachment-страница не нужна, но пользователь должен попадать на сам файл. Тогда лучше задать явный редирект, чтобы поведение было предсказуемым.
<?php
add_action( 'template_redirect', function() {
if ( ! is_attachment() ) {
return;
}
$file_url = wp_get_attachment_url( get_queried_object_id() );
if ( $file_url ) {
wp_safe_redirect( $file_url, 301 );
exit;
}
} );Этот вариант подходит, если attachment-страницы не должны индексироваться и вы хотите сохранить доступ к файлу. Но не используйте его, если attachment-страницы уже участвуют во внутренней перелинковке и получают трафик: сначала проверьте статистику.
Сравнение подходов: код, плагин или ничего не делать
| Подход | Когда уместен | Плюсы | Минусы |
|---|---|---|---|
Код через redirect_canonical | Нужно точечно отключить редирект для attachment | Контроль, предсказуемость, без лишних настроек | Нужен доступ к коду и базовая дисциплина деплоя |
| SEO-плагин | Уже используется в проекте и есть настройка attachment | Быстро, без правки кода | Зависимость от интерфейса и версии плагина |
| Оставить как есть | Attachment-страницы не индексируются и не мешают | Нет изменений | Риск лишних редиректов, дублей и путаницы в аналитике |
Если в проекте уже стоит Clearfy Pro, имеет смысл сначала проверить его настройки по чистке сайта и SEO-элементам: иногда нужная опция уже есть, и тогда не нужно дублировать логику в коде. Но даже в этом случае полезно понимать, какой именно фильтр или настройка меняет поведение.
Пошаговое решение без лишнего риска
- Определите, нужен ли attachment-URL как отдельная страница.
- Проверьте текущий ответ через
curl -Iили DevTools. - Найдите источник редиректа: ядро, тема, SEO-плагин, mu-plugin.
- Выберите один сценарий: либо отключить редирект, либо явно редиректить на файл.
- Внесите изменение в код сайта или настройку плагина.
- Проверьте заголовки ответа и поведение в браузере.
- Обновите sitemap и внутренние ссылки, если attachment-страницы больше не нужны.
Как проверить, что всё сработало
Проверка должна быть не только визуальной. После внедрения откройте attachment-URL и убедитесь в трёх вещах:
- нет неожиданного 301/302 на другой адрес;
- ответ сервера соответствует выбранной логике;
- в HTML нет лишнего canonical на чужую страницу.
Для быстрой проверки используйте:
curl -I https://example.com/sample-attachment/
curl -s https://example.com/sample-attachment/ | grep -i canonicalЕсли вы отключали редирект, первый запрос должен вернуть обычный ответ страницы, а не переадресацию. Если делали редирект на файл, проверьте, что Location указывает именно на медиафайл и код ответа 301 или 302 соответствует вашей задаче.
Частые ошибки и как их исправить
Редирект отключили, но attachment всё равно уходит на другой URL
Значит, редирект делает не redirect_canonical. Ищите код в template_redirect, в SEO-плагине или в mu-plugins. Часто проблема не в ядре, а в кастомной логике, которую забыли задокументировать.
Отключили редирект, но в индексе остались старые URL
Это нормально: поисковику нужно время на переобход. Если attachment-страницы больше не нужны, не ограничивайтесь редиректом — проверьте canonical, meta robots и sitemap. Иначе поисковик будет продолжать видеть старую структуру.
Сделали 302 вместо 301 без причины
Временный редирект уместен только если вы тестируете поведение. Для постоянной схемы лучше использовать 301, иначе поисковые системы могут дольше переобходить старые URL.
Редирект на файл сломал вложенные ссылки в контенте
Такое бывает, если в записи были вставлены ссылки не на файл, а на attachment-страницу. Перед массовой сменой поведения проверьте контент через поиск по базе или через экспорт.
Безопасность и производительность
Любой редирект — это дополнительный запрос. На небольшом сайте это не критично, но на проекте с большим количеством медиа и старых ссылок лишние переадресации быстро превращаются в шум в логах и лишнюю нагрузку на обработку запросов.
Практически полезные правила:
- не вешайте редиректы на каждый запрос без проверки
is_attachment(); - не дублируйте одну и ту же логику в теме и в плагине;
- если код нужен надолго, храните его в отдельном плагине или mu-plugin;
- после изменений проверьте кэш страницы и объектный кэш, если они используются;
- не забывайте про резервную копию перед правкой редиректов на живом сайте.
Если задача шире и вы регулярно чистите сайт от дублей, лишних архивов и технического мусора, удобнее держать такие настройки в одном месте. Для этого часто используют Clearfy Pro: он закрывает часть типовых SEO и cleanup-сценариев, чтобы не распылять логику по теме и нескольким плагинам.
Когда лучше не отключать редирект
Если attachment-страницы уже получают органический трафик, имеют внешние ссылки или используются как отдельные страницы с контентом, отключение редиректа может ухудшить ситуацию. В таком случае сначала посмотрите, есть ли у этих URL ценность, и только потом меняйте поведение.
Если ценности нет, обычно безопаснее не оставлять их «как есть», а выбрать один из двух путей: либо редирект на файл, либо закрытие от индексации с последующей чисткой внутренних ссылок. Смешанный сценарий почти всегда создаёт больше проблем, чем решает.