На сайте вместо фото — серые рамки с иконкой «битое изображение», в админке загрузка в Медиатеку падает с ошибкой, а вчера всё работало. В практике это реже «вирус», чем права на папку uploads, mixed content после перехода на HTTPS, плагин WebP или защита от хотлинка. Ниже — семь причин и порядок проверки за 30–60 минут без переустановки WordPress.
Как понять: картинки «сломались» или не загружаются новые

Два разных симптома:
- Старые картинки не отображаются — на фронте пустые блоки, в коде страницы URL ведёт на
/wp-content/uploads/…, но файл отдаёт 404 или 403. - Новые не загружаются — в Медиатеке «ошибка при загрузке», в редакторе крутится и обрывается. Часто лимит PHP (
upload_max_filesize,post_max_size) или права на папку.
Если «пропало всё» после обновления или миграции — сначала алгоритм по симптомам. Если только медиа — идите по чек-листу ниже.
Причина 1. Права на wp-content/uploads

После ручной распаковки архива, переноса по FTP или «лечения» вируса chmod часто сбивается. Веб-сервер не может читать JPG — на сайте битые картинки, загрузка новых падает.
Через FTP или файловый менеджер хостинга:
wp-content/uploadsи все вложенные папки — 755- файлы внутри uploads — 644
- владелец — пользователь веб-сервера (на shared обычно выставляет панель «Восстановить права»)
На VPS не ставьте 777 «чтобы заработало» — это дыра для загрузки шеллов. После смены прав обновите страницу с Ctrl+F5.
Причина 2. Mixed content — HTTP-картинки на HTTPS-сайте

Сайт открывается по https://, а в контенте и в БД ссылки на медиа остались http://. Браузер блокирует «небезопасный» контент — картинки не рисуются, в DevTools → Console видно Mixed Content.
Что сделать:
- В
wp-config.phpперед «That's all» добавьтеdefine('FORCE_SSL_ADMIN', true);если ещё нет. - Плагин Really Simple SSL или SSL Insecure Content Fixer — массовая замена URL в БД (с бэкапом).
- Вручную через phpMyAdmin: поиск-замена в
wp_postsиwp_postmeta—http://ваш-домен→https://ваш-домен. Только после бэкапа БД.
После переезда на SSL проверьте «Настройки → Общие»: адреса WordPress и сайта должны быть с https://.
Причина 3. Ошибка загрузки в Медиатеке (лимиты PHP)

Файл 8 МБ, а на хостинге upload_max_filesize = 2M — загрузка обрывается без понятного текста. Проверьте в панели Beget/Timeweb раздел PHP или установите плагин WP Server Info / посмотрите «Инструменты → Здоровье сайта → Информация».
Ориентиры:
upload_max_filesizeиpost_max_size— не меньше размера ваших фото (часто 64M для магазинов)max_execution_time— 120–300 для тяжёлых импортов- место на диске аккаунта — если диск забит, uploads молча не пишутся
На shared лимиты меняют в панели хостинга, не в .htaccess с php_value — на части тарифов это даёт 500.
Причина 4. Плагины WebP / AVIF / оптимизации

ShortPixel, Imagify, EWWW, WebP Express, LiteSpeed Cache с конвертацией — подменяют URL на .webp или отдают другой MIME. Отключили плагин — в контенте остались ссылки на несуществующие webp-файлы.
Диагностика: откройте «Просмотр кода» на битой картинке — какой точный URL? 404 на image.webp при наличии image.jpg — признак «хвоста» оптимизатора.
Решение: включить плагин обратно, прогнать «восстановить оригиналы», или плагин замены URL в БД после бэкапа. На время теста отключите «Picture WebP replacement» в кэш-плагине.
Причина 5. Hotlink protection и жёсткий .htaccess

В .htaccess или в настройках CDN иногда блокируют «чужие» Referer — и случайно режут легитимные запросы с главной страницы (особенно при www ↔ без www или поддомене).
Проверьте блоки RewriteCond %{HTTP_REFERER} — домен в белом списке должен совпадать с тем, как открываете сайт. Временно закомментируйте hotlink-правила и обновите страницу. Если картинки ожили — поправьте условие, не удаляйте защиту полностью без нужды.
Причина 6. Неверный URL сайта после переноса
После переноса на другой домен или в подпапку в БД остаются старые пути https://старый-домен.ru/wp-content/uploads/…. Плагины миграции (Duplicator, All-in-One WP Migration) обычно делают replace — но вложенные сериализованные поля ACF/Elementor иногда пропускают.
Инструмент Better Search Replace (на staging или с бэкапом) — поиск старого домена. Для Elementor — «Инструменты → Замена URL». Подробнее про хостинг и перенос — выбор хостинга и якорь переноса на поддержке.
Причина 7. CDN и кэш отдают старый 404
Cloudflare, KeyCDN или кэш хостинга могут «запомнить» 404 на файл uploads после временного сбоя. Очистите кэш CDN и кэш плагина (WP Rocket, LiteSpeed). Проверьте файл напрямую: https://домен/wp-content/uploads/2024/05/foto.jpg — если в браузере открывается, а на странице нет — виноват кэш HTML или lazy-load скрипт.
Чего не делать
- Не ставить chmod 777 на uploads — риск загрузки PHP-шелла.
- Не массово удалять папки
uploads/2023«для экономии места» без бэкапа — сломаете вечные ссылки в статьях. - Не включать одновременно три плагина конвертации WebP — конфликт URL и двойная обработка.
- Не править сериализованные строки в БД вручную в блокноте — сломаете виджеты и настройки темы.
Когда звать специалиста
Если после проверки прав, SSL и лимитов файлы на диске есть, прямой URL открывается, а на сайте всё равно пусто — возможен баг темы, output buffering или кастомный lazy-load. Если в uploads появились чужие .php — это уже взлом, не «настройка медиа».
Нужна помощь с диагностикой на вашем хостинге — ускорение и техразбор или срочная починка, если сайт не принимает заказы из-за битых фото товаров.



