Skip to content
← Все статьи

Миграция с HTTP на HTTPS: редиректы, mixed content, HSTS

Миграция с HTTP на HTTPS: редиректы, mixed content, HSTS

SSL/TLS проверку перестал быть опциональным ещё в 2018, когда Chrome начал помечать HTTP-сайты как «Not Secure», а Google сделал HTTPS фактором ранжирования. Миграция кажется простой (поставил сертификат → редирект), но 30% проектов теряют трафик из-за mixed content, неправильных canonical или забытых поддоменов. Разбираем пошаговый план миграции без потерь SEO и с максимальной безопасностью.

Шаг 1. Сертификат

Бесплатный вариант — Let's Encrypt через certbot или acme.sh. Платный (EV, wildcard без ограничений) — DigiCert, Sectigo. Команда certbot:

certbot --nginx -d example.com -d www.example.com --redirect --hsts --staple-ocsp

Флаг --redirect сразу настраивает 301 HTTP→HTTPS, --hsts добавляет заголовок, --staple-ocsp — OCSP stapling для скорости.

Шаг 2. 301 редирект HTTP → HTTPS

nginx:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://example.com$request_uri;
}

Apache (.htaccess):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Используйте именно 301 (permanent) — 302 не передаёт весь «вес» ссылок. Проверка: curl -I http://example.com.

Шаг 3. Mixed content

Mixed content — когда HTTPS-страница подгружает HTTP-ресурсы (скрипты, CSS, картинки). Chrome блокирует активный контент (JS, CSS) и предупреждает о пассивном (img). Найти и починить:

<!-- Плохо -->
<img src="http://cdn.example.com/logo.png">
<script src="http://widgets.example.com/w.js"></script>

<!-- Хорошо -->
<img src="https://cdn.example.com/logo.png">
<!-- или относительно схемы -->
<img src="//cdn.example.com/logo.png">

Автоматический fix — заголовок Content-Security-Policy: upgrade-insecure-requests или block-all-mixed-content.

Шаг 4. HSTS

Через неделю после стабильной работы HTTPS включите HSTS:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

Не включайте preload пока все поддомены не работают по HTTPS — откат долгий. Подробнее — в HTTP Security Headers.

Шаг 5. Canonical и Open Graph

Обновите canonical-ссылки с http на https во всех <link rel="canonical">, в OG-тегах, в sitemap.xml, в robots.txt и в 301-редиректах внутри CMS.

Шаг 6. Google Search Console

HTTPS-сайт в GSC — это новый property. Зарегистрируйте https://example.com отдельно, добавьте sitemap, сверьте покрытие через 1–2 недели.

Шаг 7. Базы данных и внутренние ссылки

SQL-апдейт ссылок в статьях:

UPDATE posts SET content = REPLACE(content, 'http://example.com', 'https://example.com');
UPDATE postmeta SET meta_value = REPLACE(meta_value, 'http://example.com', 'https://example.com');

В WordPress используйте Better Search Replace, в Drupal — `drush search-replace`.

Проверка

FAQ

Потеряю ли я SEO-ранжирование? При правильных 301, HSTS и обновлённой sitemap — нет. Google передаёт весь вес через 301. Обычно ранжирование даже растёт за счёт HTTPS-фактора.

Как быть со сторонним скриптом без HTTPS? Либо проксировать через свой nginx с SSL, либо отказаться от этого скрипта. Mixed content блокирует современные браузеры.

Нужен ли HTTPS для блога без форм? Да. ISP инъектируют рекламу в HTTP, отсутствует гарантия подлинности контента, Chrome метит как Not Secure.

Что с поддоменами? Каждый поддомен — отдельный сертификат (или wildcard *.example.com). При HSTS с includeSubDomains — обязательны все.

Вывод

План: certbot → 301 редирект → fix mixed content → HSTS → обновить canonical → зарегистрировать HTTPS в GSC. Добавьте мониторинг SSL-сертификата на автопродление и проверяйте сайт через Security Scanner. Связанное: HTTP Security Headers, Cookie Security.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: SEC
SEC
API Rate Limiting: token bucket, 429, Retry-After
15.04.2026 · 3 просм.
SEC
Защита от Clickjacking: X-Frame-Options vs frame-ancestors
15.04.2026 · 5 просм.
SEC
Защита от XSS атак: типы, эскейпинг, CSP, Trusted Types
15.04.2026 · 2 просм.
SEC
Subresource Integrity (SRI): защита CDN-скриптов
15.04.2026 · 5 просм.