SSL-сертификат и SEO: как HTTPS влияет на ранжирование
HTTPS как фактор ранжирования: что известно точно
С 2014 года Google использует наличие HTTPS как один из сигналов ранжирования. Важно понимать масштаб: это не «главный» фактор, а слабый сигнал-тайбрейкер. Уступить конкуренту одну позицию только из-за отсутствия сертификата маловероятно — но HTTPS редко влияет на позиции напрямую. Чаще он бьёт косвенно, и бьёт сильно.
Связка «SSL и SEO» работает через четыре механизма:
- Браузерное предупреждение. Chrome с 2018 года помечает все страницы по HTTP как «Не защищено». Пользователь видит это до того, как прочитает заголовок, и уходит. Рост отказов и падение CTR в выдаче поисковик считывает как ухудшение качества страницы.
- Смешанный контент. Если часть ресурсов на HTTPS-странице грузится по HTTP, браузер их блокирует. Страница визуально ломается, а поисковый робот видит не тот документ, который индексировал раньше.
- Скорость. HTTP/2 и HTTP/3 на практике работают только поверх TLS. То есть без HTTPS вы остаётесь на HTTP/1.1 с ограничением параллельных соединений и без сжатия заголовков. Это уже прямой технический сигнал по Core Web Vitals.
- Дубли и каннибализация.
http://example.com,https://example.com,https://www.example.com— для поисковика три разных адреса. Без корректного 301-редиректа иcanonicalвес размазывается между копиями, и ни одна из них не выходит в топ.
Разберём каждый пункт по порядку — с командами, которые вы можете выполнить на своём сервере прямо сейчас.
| Механизм влияния | Прямой сигнал ранжирования | Типовая сила влияния |
|---|---|---|
| Наличие HTTPS | Да, слабый | 1 страница/1 позиция в спорных случаях |
| Браузерное предупреждение «Не защищено» | Нет, через поведенческие | Высокая |
| Смешанный контент | Нет, через техническое качество | Высокая |
| Скорость TLS/HTTP2+ | Да, через Core Web Vitals | Средняя |
| Дубли http/https/www | Нет, через каннибализацию | Высокая |
Что именно проверяет робот поисковой системы
Поисковый робот не «понимает» сертификат как пользователь — он фиксирует факты:
- Отвечает ли URL по HTTPS с валидным сертификатом, доверенным цепочкой удостоверяющих центров.
- Совпадает ли имя в сертификате (CN или SAN) с запрошенным хостом. Сертификат на
example.comбезwwwв SAN не подойдёт дляwww.example.com. - Не истёк ли срок действия на момент обхода.
- Есть ли 301-редирект с HTTP-версии на HTTPS-версию, и работает ли он за один шаг.
- Нет ли смешанного контента в отрендеренном DOM.
- Какой адрес указан в
canonical,sitemap.xml,hreflang— https-версия или http.
Если по любому из пунктов расхождение, страницы начинают конкурировать между собой, а робот тратит краулинговый бюджет на редиректы вместо обхода контента.

Смешанный контент: причина, по которой HTTPS «не до конца»
Смешанный контент (mixed content) — ситуация, когда страница отдана по HTTPS, но подгружает часть ресурсов по HTTP. Формально сайт защищён, фактически — нет: HTTP-ресурс можно перехватить и подменить, поэтому браузеры его ограничивают.
Различают два вида:
- Активный — скрипты, iframe, CSS, шрифты, XHR-запросы. Блокируется браузером безусловно ещё с 2019 года. Следствие: пропадает аналитика, ломается вёрстка, не работают формы.
- Пассивный — изображения, аудио, видео. Браузер пытается автоматически апгрейдить URL до HTTPS, а если ресурс по HTTPS недоступен — блокирует его.
Сообщение в консоли выглядит так:
Mixed Content: The page at 'https://example.com/' was loaded over HTTPS, but requested an insecure script 'http://example.com/js/app.js'. This request has been blocked.
Здесь важно всё: адрес страницы (она по HTTPS), адрес ресурса (он по HTTP) и вердикт — has been blocked. Именно последняя часть объясняет, почему «картинки пропали, а в коде всё есть».
Как найти смешанный контент без браузера
Самый быстрый способ — выгрузить HTML и поискать в нём абсолютные http-ссылки:
curl -sSL https://example.com/ \
| grep -oE 'http://[^"'"'"' )]+' \
| sort | uniq -c | sort -rn | head -20
Построчно:
curl -sSL— тихий режим, вывод в stdout,-Lследует редиректам, чтобы анализировать финальную страницу, а не промежуточный ответ.grep -oE 'http://[^"'"'"' )]+'— извлекает только совпадения (-o) по расширенному регулярному выражению (-E): URL, начинающийся сhttp://, до первой кавычки, пробела или скобки.sort | uniq -c— группирует одинаковые находки и считает повторы.sort -rn | head -20— показывает самые частые ресурсы сверху.
Если вывод пуст — смешанного контента в сыром HTML нет. Если строки есть, вы получите точный список ресурсов с частотой: например, 12 http://fonts.googleapis.com/... означает, что шрифт подключён по HTTP на двенадцати местах шаблона.
Дальше два варианта решения:
- Заменить
http://наhttps://в шаблоне — работает, если ресурс отдаётся по HTTPS. - Использовать протокол-относительные URL (
//example.com/img.png) или относительные пути — тогда схема наследуется от страницы. - Добавить заголовок
Content-Security-Policy: upgrade-insecure-requests— он заставляет браузер сам апгрейдить все HTTP-запросы страницы. Это костыль, но полезный как временная мера на большом legacy-сайте.
Проверить, отдаётся ли сам ресурс по HTTPS, можно обычным запросом:
curl -sSI https://fonts.googleapis.com/css?family=Roboto | head -n 3
Первая строка HTTP/2 200 означает, что ресурс доступен по HTTPS и можно смело менять протокол в шаблоне. HTTP/1.1 404 или ошибка соединения — ресурс по HTTPS недоступен, его нужно либо зеркалировать, либо заменить.
Как проверить сертификат и цепочку вручную
Разовая проверка через браузер показывает только «замок есть» или «замка нет». Для аудита нужен openssl.
Даты, имена и издатель
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates -ext subjectAltName
Разбор:
-connect example.com:443— адрес и порт для TLS-соединения.-servername example.com— включает SNI. Без него виртуальные хосты отдадут дефолтный сертификат, и вы получите ложную картину.</dev/null— сразу закрывает stdin, иначе команда будет ждать ввода.2>/dev/null— прячет диагностику TLS-хендшейка, оставляя только сертификат.openssl x509 -noout ...— парсит X.509 и печатает нужные поля без самого тела сертификата.
Что смотреть в выводе:
subject=CN = example.com
issuer=C = US, O = Let's Encrypt, CN = R11
notBefore=Apr 1 12:00:00 2026 GMT
notAfter=Jun 30 11:59:59 2026 GMT
X509v3 Subject Alternative Name:
DNS:example.com, DNS:www.example.com
subject— основное имя. Если тутCN = example.com, а сайт открывается какwww.example.com, спасает только запись в SAN.issuer— кто выдал.Let's Encryptв порядке, неизвестный издатель означает, что мобильные браузеры могут не иметь его корневого сертификата.notAfter— дата окончания. Если до неё меньше 21 дня, автоматическое продление уже должно было сработать.subjectAltName— полный список доменов, покрытых сертификатом. Проверьте, что в нём есть и apex-домен, иwww, если оба должны работать.
Если дата истечения уже прошла или близка, действуйте по чек-листу в статье «SSL-сертификат истёк: что делать».
Полнота цепочки
Отдельная типичная проблема — сервер отдаёт листовой сертификат без промежуточного. Десктопные браузеры часто «дотягивают» цепочку сами, а мобильные и API-клиенты — нет: пользователь видит предупреждение, а робот фиксирует ошибку.
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null \
| grep -E '^ *[0-9]+ s:|^ *[0-9]+ i:|Verify return code'
-showcerts— печатает все сертификаты, которые отдал сервер, а не только листовой.grepвытаскивает строкиs:(subject, чей сертификат) иi:(issuer, кем выдан) — так видна вся цепочка звеньями: issuer одного звена должен совпадать с subject следующего.Verify return codeпоказывает итоговую валидацию.
Норма — Verify return code: 0 (ok) и два-три звена цепочки. Если звено одно и код 21 (unable to verify the first certificate), в конфиге веб-сервера указан только cert.pem; нужно переключить на fullchain.pem — это частая причина ошибки, которую мы разбирали в материале про ERR_SSL_PROTOCOL_ERROR.

Заголовки ответа
curl -sSI https://example.com | head -n 20
Обратите внимание на:
HTTP/2 200— протокол прикладного уровня.HTTP/1.1поверх HTTPS означает, что HTTP/2 у вас выключен: настраивается одной директивой в nginx или Apache.strict-transport-security: max-age=31536000— HSTS. Заголовок говорит браузеру обращаться к домену только по HTTPS и в течение года не пытаться открыть HTTP-версию. Это убирает лишний редирект для повторных посетителей.alt-svc: h3=":443"— сайт доступен по HTTP/3 (QUIC). Приятный бонус к скорости на плохих мобильных сетях.
Таблица: симптом → причина → решение
| Симптом | Причина | Решение |
|---|---|---|
| В браузере «Не защищено», сайт открывается | Нет сертификата, привязанного к домену | Выпустить сертификат и настроить 443 |
NET::ERR_CERT_DATE_INVALID |
Истёк срок действия | Продлить или перевыпустить, проверить таймер автопродления |
Предупреждение только на www, на apex всё в порядке |
www отсутствует в SAN |
Перевыпустить с обоими именами в SAN |
| Мобильный браузер ругается, десктопный нет | Неполная цепочка сертификатов | Указать fullchain.pem в конфиге веб-сервера |
Часть элементов не грузится, в консоли has been blocked |
Смешанный контент | Заменить http-URL ресурсов, добавить upgrade-insecure-requests |
| Обе версии, http и https, в индексе поисковика | Нет 301 и canonical |
Настроить 301 в один шаг, проставить canonical на https |
| HTTPS есть, но сайт тормозит | TLS 1.0/1.1, нет HTTP/2, нет сессионного кеша | Включить TLS 1.2+, HTTP/2, ssl_session_cache |
| Скрытая ошибка в логах при обходе роботом | Сертификат не поддерживает SNI-совместимый клиент или оборван хендшейк | Проверять внешним мониторингом, а не только изнутри |
Редиректы и канонизация: чтобы HTTPS не создал дубли
Самая дорогая ошибка при переходе на HTTPS — оставить обе версии живыми. Классическая цепочка на плохо настроенном сайте:
http://www.example.com → 301 → https://www.example.com → 301 → https://example.com
Три адреса, два лишних редиректа. Каждый переход — дополнительный раундтрип и потерянный краулинговый бюджет. Правило простое: один хоп до финального URL.
curl -sS -o /dev/null -w '%{num_redirects} %{url_effective}\n' -L http://www.example.com/
-o /dev/null— выбрасывает тело ответа, нам нужны только метаданные.-w '%{num_redirects} %{url_effective}'— печатает количество переходов и финальный адрес.-L— включает следование редиректам.
Норма: 1 https://example.com/. Значение 2 и больше — цепочка, которую нужно свернуть на стороне веб-сервера. Подробный разбор, как это сделать без потерь, — в статье «301-редиректы и SEO: как не потерять вес».
Отдельно проверьте, что canonical на страницах указывает на https-версию, а не остался с прошлой жизни:
curl -sSL https://example.com/ | grep -i '<link rel="canonical"'
Если тут окажется http://example.com/, вы сами сообщаете поисковику, что предпочитаете незащищённую версию. Проверьте sitemap.xml — там должны быть только https-адреса.
Скорость: HTTPS не обязан замедлять сайт
Расхожий миф — «SSL замедляет загрузку». На современном стеке всё наоборот.
| Что | HTTP | HTTPS с TLS 1.2 | HTTPS с TLS 1.3 |
|---|---|---|---|
| Раундтрипов на рукопожатие | 0 | 2 | 1 (0-RTT при возобновлении сессии) |
| Мультиплексирование запросов | HTTP/1.1 — 6 соединений | HTTP/2 — один поток, много запросов | HTTP/3 — без head-of-line blocking |
| Сжатие заголовков | Нет | HPACK | QPACK |
| Обязательность TLS | — | Да | Да |
Практический вывод: HTTPS даёт доступ к HTTP/2 и HTTP/3, которые ускоряют загрузку больше, чем TLS-хендшейк её замедляет. Убедиться, что у вас включён современный протокол, можно через curl (см. выше) или внешней проверкой TTFB — она покажет, как быстро страница отвечает с точки зрения внешнего наблюдателя, а не localhost.
Что реально стоит включить на сервере:
- TLS 1.2 и 1.3, выключить TLS 1.0/1.1 и SSLv3;
ssl_session_cache shared:SSL:10m— переиспользование параметров сессии для повторных посетителей;- OCSP stapling — сервер сам прикладывает подтверждение статуса сертификата, избавляя браузер от отдельного запроса к удостоверяющему центру;
- HTTP/2 или HTTP/3.
HSTS и security-заголовки: что дополняет HTTPS
Сам по себе редирект http → https уязвим: первый запрос пользователя всё ещё идёт по открытому HTTP, и его можно перехватить до того, как сработает 301. HSTS закрывает эту дыру.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age— сколько секунд браузер обязан использовать только HTTPS для этого домена.includeSubDomains— правило распространяется на поддомены.preload— заявка на включение в предзагрузочный список браузеров. Включайте осознанно: попадание в список означает, что домен обязан работать по HTTPS всегда, откат занимает месяцы.
Смежные заголовки, которые влияют на безопасность и на то, как поисковик и браузер оценивают качество страницы: Content-Security-Policy, X-Content-Type-Options: nosniff, Referrer-Policy, Permissions-Policy. Их состояние удобно проверять на https://uptimechecker.ru/security-headers-check — сервис покажет, что отдаёт ваш сервер, и укажет на отсутствующие заголовки.
Чек-лист аудита: SSL и SEO на вашем сайте
Пройдите по пунктам — это займёт не больше получаса:
- Откройте сайт по
http://— должен произойти мгновенный переход наhttps://за один редирект. - Проверьте обе формы: apex и
www. Обе должны вести на один финальный адрес. - Посмотрите консоль браузера на главной и на трёх внутренних страницах — ищите
Mixed Content. - Проверьте дату истечения сертификата и убедитесь, что автопродление настроено и работает.
- Проверьте
Verify return codeи количество звеньев цепочки черезopenssl. - Убедитесь, что
canonicalна страницах указывает на https-адрес. - Проверьте
sitemap.xmlиrobots.txt: никаких http-адресов. - Проверьте в поисковой консоли, что HTTP-версии исключены из индекса, а HTTPS отображается как канонический.
- Проверьте HSTS и остальные security-заголовки.
- Поставьте внешний мониторинг на сертификат: не полагайтесь на то, что «certbot как-нибудь сам».
Пункты 4 и 10 — самые частые источники аварий. Продление сертификата ломается тихо, за 1–2 месяца до истечения, и обнаруживается в момент, когда сайт уже показывает предупреждение. Внешняя проверка на https://uptimechecker.ru/ssl-check покажет издателя, срок действия, покрытие доменов и валидность цепочки извне; сервис https://uptimechecker.ru/ssl-expiry отслеживает именно дату окончания.

Как перенести сайт на HTTPS без потери позиций
Если вы только собираетесь переезжать, порядок действий важен:
- Выпустите сертификат на все имена, которые будут обслуживаться: apex,
www, при необходимости поддомены. - Настройте HTTPS-виртуальные хосты и убедитесь, что все внутренние ссылки и ресурсы не содержат жёстко прописанных http-адресов.
- Сразу настройте 301 со всех http-вариантов на единый https-URL — за один шаг, без промежуточных хостов.
- Включите HSTS после того, как убедитесь, что HTTPS работает на всех страницах.
- Обновите
canonical,sitemap.xml,robots.txtи внутреннюю перелинковку. - Обновите внешние ссылки, которые вы контролируете: профили, каталоги, партнёрские сайты.
- Наблюдайте: резкий рост ошибок 4xx/5xx или падение трафика из поиска в первые дни — сигнал, что где-то осталась http-версия или цепочка редиректов.
Переход на HTTPS — не разовое действие, а состояние, которое нужно поддерживать: сертификат истекает, конфигурация меняется при обновлениях, CDN приносит свои настройки. Внешняя проверка доступности и валидности сертификата раз в несколько минут закрывает этот риск вместе с остальными — сбой сервера, ошибку DNS, обрыв цепочки редиректов.
Проверьте свой сайт за минуту
Начните с аудита сертификата на https://uptimechecker.ru/ssl-check: это покажет срок действия, издателя, покрытие доменов и целостность цепочки. Рядом стоит проверить цепочку редиректов на https://uptimechecker.ru/redirect-check и скорость ответа на https://uptimechecker.ru/speed-check — эти три проверки вместе дают полную картину того, как ваш HTTPS выглядит со стороны поискового робота и обычного посетителя.