WordPress Linux

WordPress: смешанный контент после перехода на HTTPS

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

После перехода WordPress на HTTPS браузер пишет «Не защищено» из-за mixed content: изображения и скрипты по http. Найдите их в консоли, замените адреса в базе через WP-CLI search-replace, исправьте тему и плагины, включите HTTPS в настройках.

В этой статье
  1. В чём проблема
  2. Причины
  3. Порядок
  4. Проверка результата
Это соединение не является полностью защищённым
Mixed Content: The page was loaded over HTTPS, but requested an insecure image 'http://...'
По-русскиСтраница загружена по HTTPS, но содержит ресурсы по HTTP.

#В чём проблема

После установки сертификата и перехода на HTTPS в базе данных WordPress остаются старые адреса http://... в записях, меню, настройках темы и виджетах. Браузер блокирует небезопасные скрипты и стили, а картинки загружает с предупреждением: в адресной строке пропадает замок и появляется «Не защищено». Это не петля редиректов (она разбирается отдельно): здесь страница открывается по HTTPS, но подтягивает ресурсы по HTTP. Проблему нужно исправить в базе, теме и плагинах.

#Причины

Возможная причинаКак узнатьЧто делать
Старые адреса в записяхКонтент.Картинки по http.search-replace.
Адреса в настройках темыOptions.Логотип, фон.Исправьте через настройки темы.
Скрипты плагинов по httpЖёстко прописано.Блокировка скрипта.Обновите плагин.
Внешние ресурсыШрифты, виджеты.Нет замка.Подключите по https.
КэшСтарые страницы.После исправления тот же результат.Очистите кэш.
Неверные адреса WordPresshttp в настройках.Новые ссылки с http.Измените на https.

#Порядок

  1. Откройте страницу, нажмите F12Откройте страницу WordPress по HTTPS, нажмите F12 → вкладка «Консоль» в Chrome/Edge/Firefox и найдите предупреждения Mixed Content. Скопируйте конкретные URL, начинающиеся с http://, и проверьте их во вкладке «Сеть». Это позволит отличить ресурсы вашего домена от внешних виджетов; не заменяйте все адреса в базе до уточнения источника.
  2. Убедитесь, что в НастройкиЕсли доступна админка WordPress, зайдите «Настройки → Общие» и убедитесь, что «Адрес WordPress (URL)» и «Адрес сайта (URL)» соответствуют реальному домену https://. Если поля недоступны, ищите определения WP_HOME/WP_SITEURL в wp-config.php; не меняйте их без резервной копии, иначе можно потерять вход в панель.
  3. Сделайте резервную копию базыПеред массовой заменой ссылок экспортируйте базу через штатную систему резервного копирования или командой wp db export /безопасный/путь/backup.sql при наличии WP-CLI. Убедитесь, что дамп существует, скачайте его вне публичного каталога и проверьте возможность восстановления на тестовом окружении. Не храните копию БД в открытом каталоге сайта.
  4. Замените адреса в базе командой 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.
  5. Проверьте, что тема и плагины не прописывают http:// в кодеЕсли проблемный URL создаётся темой или расширением, откройте соответствующий шаблон/настройку и найдите жёстко записанный http:// адрес. Заменяйте его на HTTPS лишь если сервер ресурса действительно поддерживает шифрование; для внешнего скрипта без HTTPS лучше удалить виджет или заменить поставщика.
  6. Очистите кэш плагина и CDNОчистите кэш через меню установленного плагина WordPress и отдельную панель CDN, если она используется. Сначала выясните, на каком уровне оставался старый HTML: кэш браузера, страницы, объектный кэш или CDN. Очищайте только зону сайта, чтобы не нарушить работу соседних проектов.
  7. Проверьте шрифты, iframe, скрипты внешних сервисовВо вкладке «Консоль» проверьте каждый внешний шрифт, изображение, iframe и сценарий, который грузится через HTTP. Для внешних встраиваний используйте официальные HTTPS-адреса; если сервис не предоставляет HTTPS, не обходите предупреждение браузера отключением его защиты.
  8. Рассмотрите CSP только как дополнительную защитуДиректива Content-Security-Policy upgrade-insecure-requests может быть дополнительной страховкой, но не исправляет неправильные ресурсы без HTTPS и способна сломать часть встроенных сервисов. Перед её добавлением проверьте действующую CSP, настройте тестовый режим и оцените последствия. Не добавляйте новый заголовок поверх существующей политики без объединения правил.
  9. Повторно проверьте страницу в консоли и на https://www.whynopadlock.com/После исправления откройте главную, запись, страницу с формой и корзину (если есть) в приватном окне, обновите вкладки «Консоль» и «Сеть». Ни один ресурс не должен блокироваться из-за Mixed Content, а HTTPS должен оставаться действительным. При остаточной ошибке запишите точный URL из консоли и вернитесь к его источнику.
  10. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Резервная копия базы
    Linux · Терминал (Bash)Команда
    Резервная копия базы
    wp db export backup-before-https.sql
    Вариант 2Пробный запуск замены адресов (изменений не вносит)
    Linux · Терминал (Bash)Команда
    Пробный запуск замены адресов (изменений не вносит)
    wp search-replace 'http://example.ru' 'https://example.ru' --all-tables --dry-run
    Вариант 3Выполнить замену (после проверки пробного запуска и резервной копии)
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Выполнить замену (после проверки пробного запуска и резервной копии)
    wp search-replace 'http://example.ru' 'https://example.ru' --all-tables-with-prefix --skip-columns=guid --dry-run
    # После проверки и создания дампа повторите без --dry-run.

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

    Вариант 4Проверка адресов сайта в настройках
    Linux · Терминал (Bash)Команда
    Проверка адресов сайта в настройках
    wp option get home
    wp option get siteurl
    Вариант 5Подстраховка: просить браузер обновлять http-запросы до https
    ТекстКоманда
    Подстраховка: просить браузер обновлять http-запросы до https
    <IfModule mod_headers.c>
    Header always set Content-Security-Policy "upgrade-insecure-requests"
    </IfModule>
    Вариант 6Найти оставшиеся http-ссылки в файлах темы и плагинов
    Linux · Терминал (Bash)Команда
    Найти оставшиеся http-ссылки в файлах темы и плагинов
    grep -rn "http://example.ru" wp-content/themes wp-content/plugins | head -20
    Вариант 7Без WP-CLI: пример замены в таблице записей (phpMyAdmin; замените префикс wp_)
    SQLКоманда
    Без WP-CLI: пример замены в таблице записей (phpMyAdmin; замените префикс wp_)
    -- НЕ используйте прямой SQL REPLACE по сериализованным данным WordPress.
    -- Для замены адресов применяйте WP-CLI search-replace с предварительным --dry-run и резервной копией.

#Проверка результата

Откройте сайт в режиме инкогнито, нажмите F12 → «Консоль» и обновите страницу: сообщений Mixed Content быть не должно. В Chrome в «Безопасности» панели разработчика все ресурсы должны быть защищёнными. Проверьте также карту сайта и динамические элементы (всплывающие окна, формы), которые могут подгружаться позже.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.