Mixed content на HTTPS-сайте
Страница HTTPS, но картинки/скрипты грузятся по HTTP. Как найти и переключить.
Симптом
- В браузере появляется предупреждение «Несовместимый контент» (mixed content).
- В консоли разработчика видны ошибки вида
Mixed Content: The page at 'https://example.com' was loaded over HTTPS, but requested an insecure image 'http://example.com/img.png'. This request has been blocked. - Картинки, скрипты, стили, шрифты загружаются по
http://вместоhttps://. - В Google Search Console отображается сообщение «Mixed content detected on your site».
- Пользователи видят «не безопасно» в адресной строке, даже если сайт полностью защищён.
Причина
- Внутренние ссылки в HTML, CSS, JavaScript, шаблонах, CMS‑плагинах и сторонних виджетах прописаны абсолютные URL с протоколом
http://. - При переходе на HTTPS браузер блокирует запросы к ресурсам, которые не используют защищённый протокол, чтобы предотвратить перехват данных.
- Иногда сервер автоматически перенаправляет
http://наhttps://, но если редирект не настроен, контент остаётся небезопасным. - Неправильная настройка
Content-Security-PolicyилиX-Content-Type-Optionsможет усиливать блокировку.
Как проверить
-
Проверка в браузере
- Откройте страницу в Chrome/Edge.
- НажмитеF12→ вкладка Console.
- Ищите сообщения «Mixed Content». -
Проверка URL-ов
bash curl -I https://example.com | grep -i location
- Если редирект отсутствует, добавьте его в конфигурацию сервера. -
Проверка файлов шаблонов
bash grep -R "http://" /var/www/html | head
- Вывод покажет все строки сhttp://. -
Проверка внешних ресурсов
- Откройте исходный код страницы (Ctrl+U).
- Поискhttp://в исходнике. -
Проверка CSP
bash curl -I https://example.com | grep -i content-security-policy
- Убедитесь, что директиваdefault-src 'self' https:присутствует.
Решение
- Обновить все внутренние ссылки
- Заменитеhttp://наhttps://в шаблонах, CSS, JS и конфигурационных файлах.
- В большинстве CMS можно включить «автоматический HTTPS» в настройках.
```html
```
-
Использовать относительные пути
- Если ресурс находится на том же домене, используйте//example.com/...или/assets/....
- Пример:
html <script src="//example.com/js/app.js"></script> -
Настроить редирект с HTTP на HTTPS
- Nginx
nginx server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }- Apache (mod_rewrite)
apache RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] -
Обновить сторонние виджеты
- Замените URL в виджетах наhttps://.
- Если виджет не поддерживает HTTPS, свяжитесь с поставщиком. -
Проверить CSP
- Добавьтеhttps:в директивуdefault-srcи в конкретные источники.
- Пример:
nginx add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' https://cdn.example.com; object-src 'none';"; -
Проверка после исправлений
- Очистите кэш браузера.
- Перезапустите страницу и убедитесь, что в консоли больше нет ошибок mixed content.
- Используйте инструмент Google Search Console → Безопасность → Mixed Content, чтобы убедиться, что проблемы устранены.
Связанные
Не хотите разбираться сами?
Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.