Mixed content: на сайте с HTTPS часть ресурсов грузится по HTTP

Смешанное содержимое (mixed content) возникает, когда страница открыта по HTTPS, а картинки, скрипты, стили или шрифты на ней запрашиваются по HTTP. Скрипты и стили браузер блокирует, поэтому сайт может выглядеть сломанным, хотя сертификат в порядке. Причина обычно в ссылках http:// в шаблонах, настройках и базе после перехода на HTTPS.

Обновлено 28 октября 2026

Что значит mixed content

Справка MDN делит ресурсы на два вида:

  • Улучшаемые (картинки, аудио, видео). Современные браузеры сами меняют http:// на https://. Исключение: если адрес указан как IP-адрес, ресурс блокируется.
  • Блокируемые (скрипты, стили, iframe, шрифты, запросы fetch и XMLHttpRequest). Браузер не загружает их совсем.

Поэтому симптом бывает разный: пропали стили и страница «рассыпалась», не работает меню или форма, не показывается карта или виджет.

Шаг 1. Найдите проблемные адреса

  1. Откройте страницу, нажмите F12 и перейдите на вкладку «Консоль».
  2. Обновите страницу. Ищите записи со словами «Mixed Content»: в них указан тип ресурса и адрес http://....
  3. Повторите для главной, страницы записи, каталога и страницы с формой: ссылки в шаблонах и в содержимом разные.

Второй способ: «Просмотр кода страницы» и поиск по http://. Ссылки на другие сайты (<a href>) проблемой не являются, смотрите только src, href у <link>, url() в стилях и iframe.

Не хотите разбираться сами? Пришлём оценку в часах до начала работы, первая задача до 2 часов бесплатно.

Отправить задачу

Шаг 2. Определите, где хранится адрес

Адрес в консолиГде искать
Ваш домен, путь /wp-content/uploads/...Содержимое записей в базе, настройки темы, виджеты
Ваш домен, путь /wp-content/themes/... или /local/templates/...Файлы шаблона: жёстко прописанный http://
Чужой домен (шрифты, счётчики, виджеты, карта)Код подключения: заменить на https://, а если сервис не поддерживает HTTPS, заменить сервис
Тот же ресурс, но с IP-адресомЗамените IP на имя домена

Шаг 3. Исправьте адреса

Сделайте копию файлов и базы до замены.

WordPress

  1. В «Настройки → Общие» поля «Адрес WordPress (URL)» и «Адрес сайта (URL)» должны начинаться с https:// (документация WordPress). После смены проверьте, что нет петли редиректов.
  2. Замените адреса в базе. WP-CLI понимает сериализованные данные, которые простая замена в SQL ломает (WP-CLI search-replace). Сначала пробный запуск без записи:
wp search-replace 'http://example.ru' 'https://example.ru' --skip-columns=guid --dry-run

Результат совпал с ожидаемым, повторите без --dry-run. Столбец guid не меняют: по документации WordPress его содержимое трогать нельзя ни при каких обстоятельствах.

  1. Проверьте файлы темы и плагинов: grep -rn "http://example.ru" wp-content/themes wp-content/plugins.
  2. Конструкторы страниц и плагины кеша хранят стили и копии страниц отдельно. После замены очистите их кеш и пересоздайте файлы стилей.

1С-Битрикс

Ссылки хранятся в трёх местах: в файлах шаблона сайта (local/templates/ или bitrix/templates/), в файлах страниц публичной части и в содержимом инфоблоков. Найдите файлы: grep -rn "http://example.ru" local/ bitrix/templates/ --include=*.php. Содержимое инфоблоков меняйте в админке или запросом после копии базы. Не заменяйте http:// по всей базе вслепую: часть данных хранится в сериализованном виде.

Внешние сервисы

Откройте адрес сервиса по https:// вручную. Если ответа нет или предупреждение о сертификате, сервис не поддерживает HTTPS: выберите другой или уберите блок.

Шаг 4. Временная мера: заголовок upgrade-insecure-requests

Директива заставляет браузер подменять http:// на https:// у всех подзапросов страницы до отправки (MDN). Пример для nginx:

add_header Content-Security-Policy "upgrade-insecure-requests" always;

Ограничения: если ресурс по HTTPS недоступен, запрос просто упадёт, без возврата на HTTP. Заголовок не меняет переходы по ссылкам на чужие сайты. Он прикрывает проблему, но не исправляет её: адреса в базе и шаблонах всё равно нужно заменить.

Шаг 5. Проверка

  1. Консоль на ключевых страницах без записей «Mixed Content».
  2. Страница выглядит как раньше: стили, шрифты, формы, карта.
  3. Поиск по коду страницы не находит http:// у src и в стилях.
  4. В файле robots.txt, карте сайта и разметке canonical адреса начинаются с https://, и https-версия сайта добавлена в Яндекс Вебмастер и Search Console.

Когда нужен специалист

  • Адреса зашиты в тему или плагин, который вы не разрабатывали.
  • Сайт на Битриксе с большим числом инфоблоков.
  • Замена в базе затронула сериализованные данные, и что-то сломалось.
  • Нет резервной копии и нет уверенности в замене.
  • После перехода на HTTPS пропали позиции и нужно проверить редиректы и индексацию.

Сколько стоит решение у нас

ЗадачаВремяСтоимость
Исправление ошибки1–2 ч3 800–7 600 ₽
Настройка защиты1–2 ч3 800–7 600 ₽
Перенос сайта2–4 ч7 600–15 200 ₽

Диапазоны ориентировочные, ставка 3 800 ₽ в час. Точную оценку присылаем до начала работ. Все цены.

Не хотите разбираться сами?

Опишите проблему в форме. Пришлём оценку в часах до начала работы, первая задача до 2 часов бесплатно для новых клиентов.

Отправить задачу

Частые вопросы

Почему сертификат есть, а замок не показывается?

Сертификат проверяет соединение, но не содержимое. Если часть ресурсов идёт по HTTP, браузер сообщает о небезопасном содержимом. Закройте проблему по шагам 1 и 3, и сообщение исчезнет.

Достаточно ли поставить плагин, который «чинит HTTPS»?

Плагины подменяют адреса на лету при выводе страницы. Это удобно как временная мера, но замена в базе надёжнее: нет лишней нагрузки на каждый запрос, и результат не зависит от плагина.

Нужен ли HSTS?

Заголовок Strict-Transport-Security заставляет браузер заходить на сайт только по HTTPS. Включайте его, когда HTTPS стабильно работает на основном домене и поддоменах, иначе браузеры будут отказывать в доступе к частям, где HTTPS ещё не настроен.

Это влияет на поиск?

Если страница открывается по HTTPS, но выглядит поломанной, пользователи уходят. Для поисковых систем важно, чтобы https-версия страницы была основной: редирект с HTTP, canonical, карта сайта на https.