HTTPS и безопасность в SEO
Поисковики давно используют HTTPS
как сигнал доверия. Если сайт
работает по HTTP, браузер помечает
его как "Не защищено". Это
отпугивает пользователей и снижает
поведенческие метрики. А плохие
метрики - это минус к позициям.
Сейчас мы разберем, как правильно перейти на HTTPS, чтобы не потерять трафик.
Почему HTTPS важен для SEO
Причин несколько. Первая - Google
и Яндекс официально подтвердили,
что HTTPS учитывается в ранжировании.
Вторая - без HTTPS браузер пишет
"Не защищено" рядом с адресом
сайта. Это снижает доверие и клики.
Третья - без HTTPS нельзя использовать
многие современные технологии:
геолокацию, push-уведомления,
service workers.
Проверить текущий протокол можно командой:
curl -I http://example.com/
В ответе будет строка вида
"HTTP/1.1 200 OK" или
"HTTP/1.1 301 Moved Permanently",
если сайт уже перенаправляет на
HTTPS.
Как перейти на HTTPS
Переход состоит из нескольких шагов. Сначала нужно получить SSL-сертификат. Сейчас есть бесплатные сертификаты от Let's Encrypt. Установить его можно через панель хостинга или командой:
certbot --nginx -d example.com -d www.example.com
После установки сертификата нужно
настроить редирект с HTTP на HTTPS.
Для этого в файле .htaccess
прописываем правило:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Важно использовать именно 301
редирект, а не 302. Постоянный
редирект передает вес страницы
на новый адрес. Временный - нет.
Затем нужно заменить все внутренние ссылки на HTTPS. Если в коде остались ссылки на HTTP, поисковик может подумать, что на сайте две версии. Проверить можно так:
grep -r "http://example.com" /var/www/
Все найденные ссылки нужно заменить
на "https://example.com".
Mixed content
Mixed content - это когда страница загружается по HTTPS, но внутри есть ресурсы по HTTP: картинки, скрипты, стили. Браузер блокирует такие ресурсы и пишет ошибку в консоль. Это ломает верстку и вредит SEO.
Пример плохого кода:
<img src="http://example.com/image.jpg" alt="image">
<script src="http://example.com/script.js"></script>
Пример правильного кода:
<img src="https://example.com/image.jpg" alt="image">
<script src="https://example.com/script.js"></script>
Проверить страницу на mixed content
можно в консоли браузера. Откройте
DevTools и посмотрите вкладку
"Console". Все ошибки будут
с пометкой "Mixed Content".
HSTS
HSTS (HTTP Strict Transport
Security) - это заголовок, который
заставляет браузер всегда использовать
HTTPS для вашего домена. Даже если
пользователь введет "http://example.com",
браузер сам заменит протокол на
HTTPS.
Включается через заголовок в ответе сервера:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Здесь max-age - время в
секундах, на которое браузер
запоминает правило. 31536000
- это один год. includeSubDomains
распространяет правило на все
поддомены. preload позволяет
добавить домен в список HSTS
в браузерах.
Для настройки HSTS в .htaccess
добавляем:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Включать HSTS нужно только после того, как вы убедились, что весь сайт работает по HTTPS. Иначе пользователи не смогут зайти на HTTP-версию.
Практические задачи
Расскажите, почему HTTPS важен для SEO.
Дан фрагмент верстки:
<img src="http://example.com/photo.jpg" alt="photo">
<link rel="stylesheet" href="http://example.com/style.css">
<script src="http://example.com/app.js"></script>
Найдите ошибку и исправьте ее.
Дан файл .htaccess:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
Что не так с этим правилом? Как это исправить?
Расскажите, что такое mixed content и как его найти на странице.
Дан заголовок ответа сервера:
Strict-Transport-Security: max-age=31536000; includeSubDomains
Что делает этот заголовок?
Что произойдет, если пользователь
введет "http://example.com"?