#Что означает ошибка
Mixed Content
Mixed Content — страница по HTTPS загружает ресурсы (картинки, скрипты, стили) по HTTP, и браузер блокирует их или убирает значок замка. После перехода сайта на HTTPS это самая частая проблема.
Консоль браузера (F12) перечисляет все небезопасные ресурсы.
Исправление — заменить адреса на HTTPS.
Браузер блокирует HTTP-ресурсы на HTTPS-страницах. Замените адреса на https:// или относительные пути, исправьте настройки CMS.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Ссылки http://Контент. | Блок. | Замените. |
| Настройки CMSURL сайта. | Смешанный. | Исправьте. |
| Внешние скриптыБез HTTPS. | Блок. | Замените. |
| ПроксиЗаголовок. | Ошибка. | Передайте. |
#Пошаговое решение
- Откройте консольАдминистратору сайта: откройте проблемную HTTPS-страницу в Chrome или Edge, нажмите
F12→ вкладка «Console/Консоль» и перезагрузите страницу. Найдите сообщениеMixed Contentс точным адресом HTTP-ресурса; скопируйте его в рабочие заметки. Во вкладке «Network/Сеть» можно включить сохранение журнала и повторить запрос. Если сообщение относится к внешнему виджету, сначала установите, есть ли у поставщика HTTPS-версия. - Найдите ссылки http:// в коде и базеТолько владельцу сайта: сохраните резервную копию файлов и базы. Откройте исходный код шаблона/страницы и найдите URL из ошибки
Mixed Contentлибо выполните поиск строкhttp://только в собственных шаблонах. Для CMS проверьте адреса в настройках и полях контента через штатный инструмент с поддержкой сериализованных данных, а не массовой заменой SQL. Сопоставьте каждую найденную ссылку с реальным ресурсом: не все внешние сервисы поддерживают HTTPS. - Замените на https://После проверки, что внешний ресурс действительно доступен по HTTPS и отдаёт правильный файл, исправьте конкретный URL в шаблоне, параметрах CMS или записи контента. Сохраните резервную копию, опубликуйте изменение и обновите страницу с открытой консолью браузера. Если браузер больше не выводит
Mixed Content, эта зависимость исправлена; если ресурс не поддерживает HTTPS, удалите/замените интеграцию, а не выполняйте безусловную замену всехhttp://. - Включите
upgrade-insecure-requestsДиректива CSPupgrade-insecure-requestsможет быть дополнительной страховкой, но не заменяет исправления HTTP-ссылок и не помогает ресурсу без HTTPS. Администратор сначала исправляет конкретные адреса, затем, если политика сайта позволяет, добавляет директиву в заголовокContent-Security-Policyпо документации веб-сервера. Проверьте синтаксис конфигурации и ещё раз откройте консоль браузера; при сбоях внешних интеграций отмените изменение. - Очистите кэшЭтот шаг выполняйте после исправления конкретных HTTP-ссылок владельцем сайта, а не вместо него. В Chrome или Edge откройте страницу с HTTPS, нажмите
F12→ «Консоль» и перезагрузите страницу сочетаниемCtrl+Shift+R. Если сообщенияMixed Contentисчезли, проблема устранена; дополнительные удаления данных не нужны. Если браузер продолжает показывать устаревший CSS или JavaScript, нажмитеCtrl+Shift+Delete, отметьте только кешированные изображения и файлы и очистите их, не удаляя пароли и cookie. Если в консоли по-прежнему указан URL, начинающийся сhttp://, исправление не опубликовано или осталась ещё одна небезопасная ссылка: вернитесь к коду страницы/настройкам CMS.
#Поиск
Откройте F12 → Console: сообщения «Mixed Content: The page ... was loaded over HTTPS, but requested an insecure ...». Для поиска в коде: grep -rn "http://" --include=*.php --include=*.html --include=*.css .. В WordPress выполните wp search-replace "http://example.com" "https://example.com" --all-tables.
#Исправление
Замените http:// на https:// или на протокол-независимые пути (// не рекомендуется, лучше https://), относительные пути /img/a.png. Проверьте, что внешний ресурс доступен по HTTPS. Добавьте заголовок CSP upgrade-insecure-requests: add_header Content-Security-Policy "upgrade-insecure-requests"; в nginx.
#CMS и CDN
В WordPress обновите «Адрес WordPress» и «Адрес сайта» на https, очистите кэш плагинов, пересохраните постоянные ссылки. Проверьте шаблон и настройки темы, встроенные шрифты и iframe. Для Cloudflare включите «Automatic HTTPS Rewrites».
grep -rn "http://" --include=*.php --include=*.html --include=*.css .wp search-replace "http://example.com" "https://example.com" --all-tables --dry-run#Как проверить результат
Обновите страницу с очисткой кэша (Ctrl+Shift+R) и откройте F12 → Console: предупреждений Mixed Content быть не должно, а в адресной строке должен остаться замок без восклицательного знака. Для всего сайта используйте краулер: показывает оставшиеся http-ресурсы, а команда curl -s https://example.com/ | grep -o "http://[^\"]*" быстро находит их в HTML главной страницы. Проверьте также CSS: адреса в url(http://...) и подключённые шрифты часто остаются незамеченными, а ссылки в сохранённых виджетах и меню лежат в базе данных, а не в файлах шаблона.