Страницы вложений в WordPress часто ломаются после миграции, смены темы, установки SEO-плагина или очистки медиатеки. В результате URL вида /attachment/, /image-name/ или вложенные страницы медиа начинают отдавать 404, хотя сами файлы в /uploads/ на месте. Для пользователя это выглядит как битая ссылка, а для сайта — как лишний шум в логах, потеря внутренней перелинковки и иногда просадка в индексации.
Задача здесь не в том, чтобы «просто убрать 404», а в том, чтобы понять, что именно должно происходить с attachment-страницами: редирект на сам файл, на родительскую запись или на главную медиабиблиотеки. От этого зависит и код, и настройка SEO-плагина, и то, как проверять результат.
Что именно ломается и как это диагностировать
Сначала стоит отличить три разных сценария. Первый: сам файл доступен, а страница вложения нет — это типичная ситуация после отключения attachment pages. Второй: файл тоже не открывается, значит проблема уже в загрузках, правах на каталог или в переписанных правилах сервера. Третий: attachment-страница открывается, но ведёт на пустой шаблон или на несуществующий URL — здесь чаще виноваты тема или плагин, который меняет поведение вложений.
Проверка по шагам
- Откройте URL вложения в браузере и посмотрите, что возвращает сервер: 404, 301, 302 или 200.
- Проверьте, существует ли файл в
wp-content/uploads/.... - Сравните поведение на фронтенде и в админке: иногда медиафайл есть в библиотеке, но ссылка в контенте уже устарела.
- Посмотрите логи веб-сервера или
WP_DEBUG_LOG, если 404 появляется не только на медиа, но и на других типах URL.
Если 404 возникает только на страницах вложений, а сами изображения открываются, обычно проблема решается на уровне WordPress, без правки .htaccess или nginx-конфига.
Какой вариант решения выбрать
Есть три рабочих подхода: оставить attachment-страницы и настроить их шаблон, редиректить их на файл или на родительскую запись, либо полностью отключить такие страницы и отдавать 404/410. Универсального варианта нет: для фотоблога и для корпоративного сайта решение будет разным.
| Подход | Когда подходит | Минус |
|---|---|---|
| Редирект на файл | Нужно сохранить доступ к изображению по прямой ссылке | Страница вложения как отдельный URL исчезает |
| Редирект на родительскую запись | Вложение связано с конкретной статьёй | Не всегда есть корректный parent post |
| Отключить attachment pages | Страницы вложений не нужны вообще | Нужно аккуратно убрать старые ссылки и проверить SEO-след |
Если на сайте уже есть трафик на attachment-URL, резкое удаление без редиректа создаст лишние 404. В таком случае сначала лучше поставить 301, а потом уже решать, нужен ли отдельный шаблон или полное отключение.
Пошаговое решение через код
Самый предсказуемый способ — перехватить запросы к attachment-страницам и отправить пользователя туда, где действительно находится контент. Ниже пример для functions.php дочерней темы или небольшого mu-plugin.
<?php
add_action('template_redirect', function () {
if (!is_attachment()) {
return;
}
$attachment_id = get_queried_object_id();
if (!$attachment_id) {
return;
}
$file_url = wp_get_attachment_url($attachment_id);
if ($file_url) {
wp_redirect($file_url, 301);
exit;
}
$parent_id = wp_get_post_parent_id($attachment_id);
if ($parent_id) {
wp_redirect(get_permalink($parent_id), 301);
exit;
}
wp_safe_redirect(home_url('/'), 302);
exit;
});Логика здесь простая: если у вложения есть прямой URL файла, отправляем туда. Если файла нет, но есть родительская запись, ведём на неё. Если ничего не найдено, используем безопасный редирект на главную как запасной вариант. Для большинства сайтов этого достаточно, чтобы убрать 404 на attachment-страницах без вмешательства в серверные правила.
Если вам не нужен редирект, а нужно именно отключить страницы вложений, можно вернуть 404 или 410. Это полезно, когда attachment-страницы уже давно не используются и вы не хотите поддерживать лишние URL.
<?php
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;
}
});Этот вариант не маскирует проблему, а явно сообщает поисковым системам и браузеру, что страницы вложений больше не существуют. Но применять его стоит только после того, как вы убедились, что старые URL не нужны и на них нет внешних ссылок.
Если проблема появилась после SEO-плагина или чистки сайта
Часто 404 на вложениях всплывают после включения опции, которая отключает attachment pages. В некоторых SEO-плагинах это делается для уменьшения дублей и мусорных URL. Это нормальная практика, но важно понимать, что отключение страницы и удаление файла — не одно и то же. Если плагин просто меняет шаблон, а старые ссылки в контенте остались, 404 всё равно будут.
Если вы используете плагин для технической чистки сайта, проверьте, не удалил ли он метаданные вложений, которые нужны для корректного редиректа. Иногда после массовой оптимизации ломается связь между медиафайлом и родительской записью, и тогда редирект на parent уже не срабатывает.
В таких случаях удобнее сначала восстановить стабильное поведение на уровне WordPress, а потом уже чистить архивы, дубли и служебные URL. Если нужен инструмент для технической оптимизации и удаления дублей, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Как проверить, что решение сработало
После внедрения не ограничивайтесь открытием одной страницы в браузере. Проверьте несколько уровней: HTTP-статус, поведение редиректа, сохранность файла и отсутствие новых ошибок в логах.
- Откройте старый URL attachment-страницы и убедитесь, что он отдаёт 301 или 404/410 в зависимости от выбранной схемы.
- Проверьте конечный URL после редиректа: он должен быть валидным и не вести в цепочку перенаправлений.
- Откройте сам файл изображения по прямой ссылке из
/uploads/. - Просмотрите отчёт в Search Console или аналогичном инструменте на предмет новых 404.
- Проверьте, не появились ли циклы редиректов, если тема или плагин уже обрабатывают attachment-страницы.
Для быстрой проверки удобно использовать curl:
curl -I https://example.com/sample-image/
curl -I https://example.com/wp-content/uploads/2026/01/sample-image.jpgВ первом случае вы должны увидеть ожидаемый код ответа и, если настроен редирект, заголовок Location. Во втором — прямой доступ к файлу без лишних перенаправлений.
Частые ошибки и как их исправить
Редирект сделан, но 404 остаются
Обычно это значит, что редирект срабатывает не на все типы attachment-URL. Проверьте, не обрабатывает ли тема отдельный шаблон вложений, и убедитесь, что код подключён на фронтенде, а не только в админке.
Появилась цепочка 301 → 301 → 200
Так бывает, если вы редиректите attachment-страницу на URL файла, а потом сервер или плагин ещё раз переписывает этот адрес. Лучше проверить конечный URL напрямую и убрать лишний слой перенаправления.
Файл открывается, но картинка в контенте сломана
Значит, проблема не в attachment-странице, а в самом пути к файлу или в правах на каталог uploads. В этом случае редирект не поможет: нужно восстанавливать файл, проверять регенерацию миниатюр и корректность URL в базе.
После отключения attachment pages ухудшилась индексация
Если старые URL уже были в поиске, их нельзя просто убрать без плана миграции. Сначала настройте 301 на релевантную страницу или файл, затем дождитесь переобхода и только после этого меняйте стратегию.
Практические советы по безопасности и производительности
Не используйте бездумно редирект на главную для всех вложений. Это выглядит как быстрый способ убрать 404, но для поисковых систем и пользователей это слабый сигнал: URL не соответствует содержимому. Лучше вести на файл или на родительскую запись, если она действительно связана с вложением.
Если у вас большой сайт, не вешайте тяжёлую логику в template_redirect без проверки условий. Сначала отсекайте всё, что не является attachment, и не делайте лишних запросов к базе. В приведённых примерах это уже учтено.
Для сайтов с активной медиатекой полезно периодически проверять, не появились ли битые ссылки на изображения после миграций и массовых правок контента. Это дешевле, чем потом разбирать пачку 404 в логах и вручную искать источник каждой ссылки.
Если задача шире и вам нужно не только убрать 404, но и почистить технические дубли, служебные страницы и лишние URL, лучше решать это комплексно: сначала карта редиректов, потом проверка индексации, затем контроль логов и Search Console. Именно так attachment-страницы перестают быть источником постоянного шума, а не просто исчезают из вида.