Архивы attachment в WordPress часто остаются незаметной причиной дублей: у медиафайла есть отдельная страница вложения, которая может индексироваться поисковиками, хотя полезного контента на ней нет. На небольших сайтах это выглядит как мелочь, но на проектах с большим количеством изображений такие страницы быстро разрастаются и засоряют индекс.
Ниже разберём рабочую схему: как диагностировать проблему, что именно отключать, как сделать редирект на сам файл или родительскую запись, и как проверить, что всё сработало без побочных эффектов.
Когда архивы attachment становятся проблемой
У каждого загруженного изображения WordPress может быть отдельная attachment page. Если тема или SEO-плагин не закрывают их, поисковик видит десятки и сотни страниц с тонким контентом: заголовок, картинка и почти ничего больше. Для сайта это лишние URL, лишние переходы ботов и риск появления дублей в выдаче.
Проблема особенно заметна, если:
- в медиатеке много изображений, а записи и страницы регулярно обновляются;
- в поиске уже есть URL вида
/sample-image/или/photo-2/; - в отчётах Search Console растёт число страниц без полезного контента;
- на сайте используются шаблоны, где attachment page выглядит почти пустой.
Диагностика: как понять, что именно индексируется
Сначала проверьте, существуют ли attachment URL и как они отвечают. Откройте несколько страниц вложений вручную или через поиск по сайту. Если страница открывается как обычная запись, значит она доступна для индексации.
Полезно проверить и серверный ответ:
curl -I https://example.com/sample-image/Если видите 200 OK, страница доступна. Если уже настроен редирект, должен быть 301 или 302 на нужный адрес. Ещё один практичный способ — посмотреть отчёт по индексированию в Google Search Console и найти URL с типичными медиа-именами.
Что лучше: закрыть от индексации или сделать редирект
Есть два подхода. Первый — оставить attachment page, но закрыть её от индексации через SEO-плагин или мета-тег robots. Второй — полностью убрать страницу вложения из пользовательского сценария и перенаправлять на сам файл или родительскую запись.
| Подход | Когда подходит | Минус |
|---|---|---|
| noindex | Если attachment page нужна для редких сценариев | URL остаётся доступным, но не должен попадать в индекс |
| 301 редирект | Если attachment page не нужна вообще | Нужно аккуратно выбрать цель редиректа |
| Отключение через код | Если нужен контролируемый технический вариант без лишних плагинов | Надо тестировать после обновлений темы и плагинов |
На практике для большинства сайтов лучше редиректить attachment URL, а не просто прятать их. Тогда пользователь и робот сразу попадают на полезную страницу.
Пошаговое решение через код
Если нужен предсказуемый вариант без лишней логики в теме, добавьте код в functions.php дочерней темы или в небольшой mu-plugin. Он перенаправляет attachment page на родительскую запись, а если родителя нет — на сам файл.
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_url = wp_get_attachment_url($attachment_id);
if ($file_url) {
wp_safe_redirect($file_url, 301);
exit;
}
wp_safe_redirect(home_url('/'), 301);
exit;
});Логика здесь простая: если у вложения есть родительская запись, пользователь попадает на неё. Если родителя нет, редирект идёт на сам файл изображения. Это лучше, чем оставлять пустую attachment page, но всё равно требует проверки на вашем шаблоне.
Если нужно именно отключить attachment pages
Иногда задача не в редиректе, а в том, чтобы WordPress вообще не отдавал attachment templates. Тогда можно принудительно пометить такие запросы как 404, но этот вариант обычно хуже для SEO и UX, если URL уже где-то опубликованы. Используйте его только если понимаете последствия и готовы чистить старые ссылки.
add_action('template_redirect', function () {
if (is_attachment()) {
global $wp_query;
$wp_query->set_404();
status_header(404);
nocache_headers();
include get_query_template('404');
exit;
}
});Для большинства проектов 301-редирект предпочтительнее, потому что он сохраняет переходы и не ломает старые ссылки из поиска или внешних источников.
Как сделать это через SEO-плагин
Если на сайте уже используется SEO-плагин, иногда проще закрыть attachment pages в его настройках. Но здесь важно не путать noindex и редирект: noindex уменьшает риск попадания в индекс, но не убирает сам URL из обхода. Если цель — чистая структура сайта, редирект всё равно надёжнее.
Проверяйте, есть ли в плагине отдельная настройка для медиа-страниц или вложений. Названия пунктов отличаются, но смысл один: отключить индексирование attachment URL или перенаправить их на вложенный файл/родителя.
Проверка результата после внедрения
После изменения не ограничивайтесь открытием одной страницы в браузере. Проверьте несколько уровней:
- открывается ли старый attachment URL и получает ли он
301; - не возникает ли цепочка редиректов;
- не ведёт ли редирект на несуществующую страницу;
- не ломаются ли ссылки на изображения в контенте;
- не появились ли ошибки в логах сервера или в Search Console.
Для быстрой проверки можно использовать:
curl -I https://example.com/sample-image/
curl -I https://example.com/wp-content/uploads/2024/08/sample-image.jpgПервый запрос должен показать редирект на нужный адрес. Второй — отдавать сам файл без лишних перенаправлений. Если вместо этого вы видите 404 или бесконечную цепочку, значит логика редиректа выбрана неверно.
Частые ошибки и как их исправить
Редирект сделан на главную страницу
Это распространённая ошибка. Она кажется безопасной, но на деле ухудшает поведение сайта: пользователь теряет контекст, а поисковик получает не самый точный сигнал. Лучше отправлять на родительскую запись или на сам файл.
Attachment URL закрыли, но не убрали из карты сайта
Если медиа-страницы всё ещё попадают в sitemap, поисковик будет продолжать их обходить. Проверьте настройки SEO-плагина и исключите attachment URL из генерации карты сайта, если она их включает.
Используется 302 вместо 301
Временный редирект не подходит для постоянной чистки дублей. Если решение окончательное, нужен именно 301. Иначе поисковик может дольше переобходить старые адреса.
Редирект ломает вложения в старом контенте
Если в записях есть ссылки не на attachment page, а на сам файл, всё должно работать нормально. Проблемы обычно возникают, когда тема или плагин рассчитывают на отдельную страницу вложения. В таком случае проверьте шаблоны и виджеты, где используется ссылка на медиа-страницу.
Практические советы по безопасности и производительности
Если на сайте много медиафайлов, лучше не добавлять тяжёлую логику в каждый запрос. Код выше использует стандартные функции WordPress и срабатывает только на attachment запросах, поэтому нагрузка минимальна. Но всё равно держите его в дочерней теме или mu-plugin, а не в случайном сниппете без контроля версий.
Перед внедрением сделайте резервную копию и проверьте решение на staging-копии. Это особенно важно, если сайт уже давно в индексе и на attachment URL есть внешние ссылки. После редиректа старые адреса могут ещё какое-то время встречаться в поиске, и это нормально.
Если задача шире, чем только attachment pages, имеет смысл посмотреть и на общую чистку дублей: архивы авторов, тегов, пустые таксономии, служебные страницы. Для таких задач удобно использовать комплексные инструменты вроде Clearfy Pro, но даже с плагином полезно понимать, что именно он меняет в структуре URL.
Главный критерий успеха здесь простой: старые attachment URL больше не ведут на пустые страницы, поисковик получает понятный сигнал, а пользователь попадает туда, где есть контент или сам файл.