Страницы вложений в WordPress часто всплывают неожиданно: в индексе появляются тонкие страницы с одной картинкой, в отчётах — дубли title, а в логах — переходы на URL вида /sample-image/. Если сайт активно публикует изображения, это быстро превращается в мусорный слой, который не нужен ни пользователю, ни поисковику.
Ниже — рабочая схема: сначала диагностируем, откуда берутся attachment pages, затем закрываем их от индексации и, если нужно, делаем редирект на родительскую запись или на главную. Без выдуманных хуков и без ломания медиа-библиотеки.
Когда attachment pages становятся проблемой
В WordPress у каждого загруженного файла может быть собственная страница вложения. Это не файл изображения, а отдельный URL записи типа attachment. На практике такие страницы часто бесполезны: на них мало контента, они плохо конвертируют и создают дубли по заголовкам и метаданным.
Типичный сценарий выглядит так:
- в поиске появляются URL с одиночными изображениями;
- в отчётах по индексации растёт число малоценных страниц;
- пользователь открывает вложение вместо статьи и уходит;
- при миграции или смене темы старые attachment URL продолжают отдавать 200 OK.
Как понять, что проблема именно в attachment pages
Проверьте несколько вещей вручную:
- откройте изображение в медиабиблиотеке и посмотрите ссылку на страницу вложения;
- введите в поиск сайта часть пути к картинке или заголовок файла;
- в Google Search Console посмотрите страницы с типом
attachmentили URL, похожими на медиа-страницы; - проверьте исходный код страницы вложения: часто там почти нет уникального текста.
Если у вас уже настроены robots.txt и noindex для других технических страниц, это не решает проблему полностью. URL может продолжать жить, попадать в внутренние ссылки и отдавать индексируемый ответ.
Что лучше: закрыть, удалить или редиректить
Универсального ответа нет. Для разных сайтов рабочий вариант отличается.
| Подход | Когда подходит | Минус |
|---|---|---|
| Только noindex | Если нужно быстро убрать из индекса, но не трогать URL | Страница остаётся доступной и может получать переходы |
| Редирект на родительскую запись | Если вложение прикреплено к статье и у него нет самостоятельной ценности | Нужно аккуратно обработать случаи без родителя |
| Редирект на главную | Если родитель отсутствует или логика сайта не предполагает отдельные медиа-страницы | Менее точный сценарий, но безопаснее, чем 404 |
Для большинства контентных сайтов лучший вариант — редирект attachment pages на родительскую запись, а если родителя нет, то на главную или на архив медиа, если он у вас реально используется.
Пошаговое решение через код
Если вам нужен предсказуемый результат без зависимости от плагина, добавьте код в functions.php дочерней темы или в свой мини-плагин. Важно: не вставляйте это в активную тему, если она регулярно обновляется и вы не контролируете изменения.
1. Редирект attachment pages на родительскую запись
<?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;
});Что делает этот код:
- проверяет, открыта ли именно attachment page;
- ищет родительскую запись через
wp_get_post_parent_id(); - если родитель есть, отправляет на его permalink;
- если родителя нет, отправляет на главную.
Это простой и проверяемый вариант. Он не ломает загрузку файлов и не влияет на саму медиабиблиотеку.
2. Убрать attachment pages из поиска и внутренних ссылок
Если у вас есть шаблоны или плагины, которые генерируют ссылки на страницы вложений, лучше не оставлять их в интерфейсе. Для этого можно принудительно перенаправлять не только прямой заход, но и любые попытки открыть attachment URL.
<?php
add_filter('wp_get_attachment_link', function ($html) {
return preg_replace('/href=["\']([^"\']+)["\']/', 'href="' . esc_url(wp_get_attachment_url(get_the_ID())) . '"', $html);
});Этот пример полезен не всегда и требует проверки в вашей теме. На практике чаще достаточно первого редиректа, а ссылки в контенте лучше исправить вручную или через поиск по базе данных, если они массово вставлены в старом контенте.
Если нужен вариант без кода
Когда на сайте нет разработчика под рукой, можно решить задачу через SEO-плагин или плагин для редиректов. Но здесь важно не путать отключение attachment pages с удалением файлов из медиабиблиотеки.
Проверьте, умеет ли ваш инструмент:
- ставить 301-редирект именно для attachment URL;
- не трогать реальные файлы в
/uploads/; - не создавать цепочки редиректов;
- не ломать открытие изображений в редакторе и в
<img>.
Если плагин просто ставит noindex, это лучше, чем ничего, но не решает проблему пользовательского перехода на пустую страницу. Для контентных сайтов редирект обычно полезнее.
Как проверить, что всё сработало
После внедрения не ограничивайтесь визуальной проверкой в браузере. Нужна короткая техническая валидация.
- Откройте несколько attachment URL вручную.
- Убедитесь, что сервер отдаёт
301 Moved Permanently, а не200 OK. - Проверьте, что конечный URL ведёт на родительскую запись или на главную.
- Посмотрите, не появились ли цепочки редиректов.
- Через несколько дней проверьте отчёт по индексированию в Google Search Console.
Если есть доступ к командной строке, можно быстро проверить ответ сервера через curl:
curl -I https://example.com/sample-image/В ответе должен быть статус редиректа и заголовок Location с целевым адресом.
Частые ошибки и как их исправить
Редирект сделан на уровне файла, а не страницы
Иногда пытаются закрыть сам файл в /uploads/. Это ошибка: изображения должны открываться в постах, редакторе и на фронтенде. Редирект нужен только для attachment page, а не для медиафайла.
Ставят 302 вместо 301
Временный редирект не передаёт сигнал о постоянном переносе. Если решение окончательное, используйте 301. Иначе поисковик может дольше держать старый URL в индексе.
Не учитывают вложения без родителя
После импорта, миграции или массовой загрузки часть файлов может не иметь parent post. Если в коде не предусмотрен fallback, пользователь получит ошибку или пустой экран. Безопаснее отправлять такие URL на главную или на релевантный архив.
Ставят noindex и считают задачу решённой
Noindex убирает страницу из индекса, но не убирает её из внутренней структуры сайта. Если на attachment pages продолжают вести ссылки, они всё равно будут расходовать краулинговый бюджет и путать пользователей.
Путают attachment pages с медиафайлами в теме
Некоторые темы используют ссылку на вложение как часть галереи или слайдера. Перед массовым редиректом проверьте, не завязана ли на эти URL логика интерфейса. Если завязана, лучше сначала заменить ссылки в шаблоне.
Практические советы по безопасности и производительности
Если вы добавляете редирект кодом, держите его в маленьком mu-plugin или в отдельном плагине сайта. Так он не пропадёт после обновления темы и не затронет другие настройки.
- не используйте прямые SQL-запросы для этой задачи, если можно обойтись штатными функциями WordPress;
- проверяйте редирект на staging-копии, особенно если сайт большой и старый;
- не создавайте отдельные правила в .htaccess для каждого файла — это быстро превращается в неуправляемую конфигурацию;
- если attachment pages уже в индексе, не удаляйте их резко без замены на 301.
Если на сайте много технических дублей, имеет смысл посмотреть в сторону комплексной чистки SEO-слоя. Например, в Clearfy Pro есть инструменты для отключения лишних страниц и очистки технического мусора, но использовать их стоит только после проверки, какие именно URL реально нужны вашему проекту.
Мини-чек-лист перед публикацией изменений
- проверены несколько attachment URL с разными сценариями: с родителем и без него;
- ответ сервера — 301, а не 200 или 302;
- целевой URL релевантен содержимому;
- внутренние ссылки на attachment pages не остались в старых статьях;
- в Search Console нет массового роста ошибок после внедрения;
- медиафайлы по-прежнему открываются в редакторе и на фронтенде.
Если вам нужно не просто убрать attachment pages, а системно сократить технические дубли в WordPress, начинайте с диагностики URL-структуры и только потом включайте редиректы. В таких задачах важнее предсказуемость, чем «быстро скрыть страницу».