Mixed Content: The page was loaded over HTTPS, but requested an insecure image 'http://...'
#В чём проблема
После установки сертификата и перехода на HTTPS в базе данных WordPress остаются старые адреса http://... в записях, меню, настройках темы и виджетах. Браузер блокирует небезопасные скрипты и стили, а картинки загружает с предупреждением: в адресной строке пропадает замок и появляется «Не защищено». Это не петля редиректов (она разбирается отдельно): здесь страница открывается по HTTPS, но подтягивает ресурсы по HTTP. Проблему нужно исправить в базе, теме и плагинах.
#Причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Старые адреса в записяхКонтент. | Картинки по http. | search-replace. |
| Адреса в настройках темыOptions. | Логотип, фон. | Исправьте через настройки темы. |
| Скрипты плагинов по httpЖёстко прописано. | Блокировка скрипта. | Обновите плагин. |
| Внешние ресурсыШрифты, виджеты. | Нет замка. | Подключите по https. |
| КэшСтарые страницы. | После исправления тот же результат. | Очистите кэш. |
| Неверные адреса WordPresshttp в настройках. | Новые ссылки с http. | Измените на https. |
#Порядок
- Откройте страницу, нажмите F12Откройте страницу WordPress по HTTPS, нажмите F12 → вкладка «Консоль» в Chrome/Edge/Firefox и найдите предупреждения
Mixed Content. Скопируйте конкретные URL, начинающиеся сhttp://, и проверьте их во вкладке «Сеть». Это позволит отличить ресурсы вашего домена от внешних виджетов; не заменяйте все адреса в базе до уточнения источника. - Убедитесь, что в НастройкиЕсли доступна админка WordPress, зайдите «Настройки → Общие» и убедитесь, что «Адрес WordPress (URL)» и «Адрес сайта (URL)» соответствуют реальному домену
https://. Если поля недоступны, ищите определенияWP_HOME/WP_SITEURLвwp-config.php; не меняйте их без резервной копии, иначе можно потерять вход в панель. - Сделайте резервную копию базыПеред массовой заменой ссылок экспортируйте базу через штатную систему резервного копирования или командой
wp db export /безопасный/путь/backup.sqlпри наличии WP-CLI. Убедитесь, что дамп существует, скачайте его вне публичного каталога и проверьте возможность восстановления на тестовом окружении. Не храните копию БД в открытом каталоге сайта. - Замените адреса в базе командой WP-CLI search-replaceВ корне WordPress по SSH при наличии WP-CLI выполните сначала
wp search-replace "http://example.ru" "https://example.ru" --all-tables-with-prefix --skip-columns=guid --dry-run, указав свой домен. Посмотрите количество совпадений и список затронутых таблиц; только после проверки на стенде запустите ту же команду без--dry-run. WP-CLI корректно обрабатывает сериализованные данные, в отличие от простого SQL REPLACE. - Проверьте, что тема и плагины не прописывают http:// в кодеЕсли проблемный URL создаётся темой или расширением, откройте соответствующий шаблон/настройку и найдите жёстко записанный
http://адрес. Заменяйте его на HTTPS лишь если сервер ресурса действительно поддерживает шифрование; для внешнего скрипта без HTTPS лучше удалить виджет или заменить поставщика. - Очистите кэш плагина и CDNОчистите кэш через меню установленного плагина WordPress и отдельную панель CDN, если она используется. Сначала выясните, на каком уровне оставался старый HTML: кэш браузера, страницы, объектный кэш или CDN. Очищайте только зону сайта, чтобы не нарушить работу соседних проектов.
- Проверьте шрифты, iframe, скрипты внешних сервисовВо вкладке «Консоль» проверьте каждый внешний шрифт, изображение, iframe и сценарий, который грузится через HTTP. Для внешних встраиваний используйте официальные HTTPS-адреса; если сервис не предоставляет HTTPS, не обходите предупреждение браузера отключением его защиты.
- Рассмотрите CSP только как дополнительную защитуДиректива Content-Security-Policy
upgrade-insecure-requestsможет быть дополнительной страховкой, но не исправляет неправильные ресурсы без HTTPS и способна сломать часть встроенных сервисов. Перед её добавлением проверьте действующую CSP, настройте тестовый режим и оцените последствия. Не добавляйте новый заголовок поверх существующей политики без объединения правил. - Повторно проверьте страницу в консоли и на https://www.whynopadlock.com/После исправления откройте главную, запись, страницу с формой и корзину (если есть) в приватном окне, обновите вкладки «Консоль» и «Сеть». Ни один ресурс не должен блокироваться из-за Mixed Content, а HTTPS должен оставаться действительным. При остаточной ошибке запишите точный URL из консоли и вернитесь к его источнику.
- Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Проверка результата
Откройте сайт в режиме инкогнито, нажмите F12 → «Консоль» и обновите страницу: сообщений Mixed Content быть не должно. В Chrome в «Безопасности» панели разработчика все ресурсы должны быть защищёнными. Проверьте также карту сайта и динамические элементы (всплывающие окна, формы), которые могут подгружаться позже.