{"id":14271,"url":"\/distributions\/14271\/click?bit=1&hash=51917511656265921c5b13ff3eb9d4e048e0aaeb67fc3977400bb43652cdbd32","title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430\u0442\u0438\u0432\u043e\u043a \u0438 \u0441\u043f\u0435\u0446\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 vc.ru \u2014 \u043d\u0430\u0439\u0434\u0438\u0441\u044c!","buttonText":"","imageUuid":""}

Как HTTP-заголовки веб-сервера могут влиять на SEO и как автоматически это проверить

При продвижении сайта как-то незаслуженно мало уделяют внимания HTTP-заголовкам. А ведь от них напрямую зависит:

  1. Скорость загрузки страницы.
  2. Количество обращений браузера к сайту для загрузки страницы.
  3. Безопасность сайта и уровень доверия поисковика.
  4. Доверие к дате последней модификации контента, частоте изменения контента и важности контента.
  5. Корректность кодировки и языка.

Разберём далее каждую особенность подробнее.

Скорость загрузки страницы и количество обращений к серверу

Годы идут а за последние 25 лет с момента появления Всемирной паутины сайтов World Wide Web принципиально проблема быстрой загрузки не изменилась. В 90-е годы мы с трудом скачивали страницы на модемах. Сейчас, конечно, в среднем контент стал грузиться существенно быстрее. Но скорость загрузки во-первых важна для поисковиков и влияет на оценку того же Google Page Speed, а во-вторых мы по-прежнему сталкиваемся с перегруженными каналами, серверами, плохой сотовой связью или удалением от вышек. И для таких случаев имеет принципиальное отличие грузить 1Мб или 0.5Мб. Загрузить страницу за 20 или за 5 обращений к серверу.

На скорость загрузки страницы влияют:

  1. Версия протокола HTTP/1.1 или HTTP/2.
  2. Заголовок сжатия текстового контента Content-Encoding.
  3. ETag в сочетании с Cache-Control: max-age.

Отлично, если сервер поддерживает HTTP/2, тогда всё передаётся в рамках одного соединения. А в HTTP/1.1 для загрузки каждого файла браузер устанавливает новое соединение с сервером. На странице может подключаться ещё 20 картинок, JS-файлов, CSS-файлов, шрифтов, что в сумме притормозит загрузку и отображение контента.

Весь текстовый контент должен сжиматься сервером, то есть архивироваться. При этом алгоритм сжатия должен использоваться тот, который поддерживает клиент.

Весь статический контент сайта, который не меняется должен выдаваться с заголовками ETag, Cache-Control: max-age. Потому что когда посетитель перейдёт на вторую страницу сайта, то браузер не должен заново грузить картинки, JS, CSS, шрифты. Браузер должен взять это из кэша. А чтобы браузер взял эти файлы из кэша, ему нужно сообщить уникальный ETag этих файлов и сколько браузер может брать их из кэша. Как правило, это год или месяц. Через месяц или год браузер переспросит сервер If-None-Match, а не изменились ли эти файлы. Если не изменились, то сервер должен ответить 304 Not Modified. А если изменились, то выдать новые.

От корректности данных заголовков зависит скорость загрузки. Представьте, что сервер не выдаёт ETag, но выдаёт Cache-Control. Или выдаёт ETag, но не говорит сколько можно хранить кэш. А иногда веб-сервера выдают полную муть, что кешировать нельзя ничего и никогда. Или на запрос If-None-Match выдаёт всегда контент.

Безопасность сайта и уровень доверия поисковика

Безопасности уделяется всё больше и больше внимания. За последние несколько лет почти исчезли сайты без SSL-сертификатов. Поисковики ниже ранжируют http чем защищённые сайты с https. Браузеры ранжируют даже сертификаты и подсвечивают самые надёжные зеленым цветом.

Но даже имея самый крутой SSL-сертификат. Вы рискуете нарваться на смешанный контент, который приведёт к тому, что тот же Яндекс не присвоит вашему сайту значок SSL (защищённое соединение) и будет думать про него, что он небезопасный. Происходит это потому что на странице вашего сайта подключаются какие-то файлы по протоколу http, а не https.

Тут нам на помощь придут заголовки:

  • Strict-Transport-Security
  • Content-Security-Policy или Content-Security-Policy-Report-Only

Strict-Transport-Security принудительно заставит браузер запрашивать файлы по протоколу https, а даже если в коде будет что-то типа img src=http://…

Content-Security-Policy просто запретит браузеру подгружать данные по незащищённому http.

Content-Security-Policy имеет массу других полезных опций, он ограничивает список внешних ресурсов с которых страница сайта может подгружать данные. Одним из самых прекрасных свойств этого заголовка является запрет встроенных стилей и встроенных javascript. Хорошая разработка должна разделять отдельно HTML, CS и JS по разным файлам и не устраивать помойку в коде и страницах.

Когда я столкнулся с настройкой этого заголовка оказалось, что Яндекс.Метрика и чат Usedesk нарушают этот заголовок и используют inline стили. Usedesk морозились и в результате они отказались от нас, а мы от них. А Яндекс.Метрика молодцы! Приняли мои замечания и поправили код Яндекс.Метрики. Благо я даже подсказал им и конкретные строки на которые браузер ругается и как именно поправить. Саня, я тебе говорил, что РИФ говно, статьи надо писать. Там за день 500 человек мимо стенда пройдут, а тут 5000 прочтут. Давно уже никто не бухает. И бухая ничего не продашь. Давай вноси правки.

Last-Modified

Часто сервер не выдаёт данный заголовок вообще или выдаёт неправильно. Возможно поисковый робот и не обращает на это внимания. Заходит он раз в день на сайт, получает абсолютно тот же контент, что и днём ранее и годом ранее, и при этом север утверждает, что контент был модифицирован только что. Ну и кому такое должно понравиться?

Vary

Данный заголовок сообщает от каких других заголовков зависит отдаваемый контент. Например, он зависит от Content-Encoding.

Корректность кодировки и языка

Поисковики Яндекс и Google ранжируют контент в зависимости от языка пользователя. Если сайт использует устаревшую кодировку на каких-то страницах, например, windows-1251 или KOI8-R или ещё какую-то кодировку, которая однозначно говорит о языке, но при этом сам сервер в заголовке всем страницам выдаёт принудительно UTF8, то это вызовет проблемы. Причём браузер может в некоторых нестыковках и автоматически отобразить страницу корректно. Раньше в браузерах было переключение кодировки для этих целей, но с переходом на UTF8 проблема исчезла. Однако, её остаются сайты со старыми кодировками и нужно для них проверять, чтобы кодировки в заголовках ответа веб-сервера совпадали с кодировками страниц.

Заключение

Там ещё много параметров. Наверное вы уже утомились читать, а проверять это всё руками вообще сложная задача. Поэтому есть сервис для автоматической проверки HTTP-заголовков онлайн, который проанализирует заголовки, проверит как сервер реагирует на заголовки HTTP-запроса и выдаст рекомендации, что стоит поправить.

0
14 комментариев
Написать комментарий...
Евгений Идельбаев

Внёс ли Саня правки в итоге?

Ответить
Развернуть ветку
Alexander Nedzelsky
Ответить
Развернуть ветку
Sergey Nim

Бухает, наверное

Ответить
Развернуть ветку
Igor Tarasov

:)) 

Ответить
Развернуть ветку
Алексей из LOADING.express

Мы поколдовали по вашим правкам на https://loading.express и получили 45/50:

https://http.itsoft.ru/?url=https%3A%2F%2Floading.express&accept=text%2Fhtml%2Capplication%2Fxhtml%2Bxml%2Capplication%2Fxml%3Bq%3D0.9%2Cimage%2Fwebp%2Cimage%2Fapng%2C*%2F*%3Bq%3D0.8%2Capplication%2Fsigned-exchange%3Bv%3Db3%3Bq%3D0.9&accept_en=gzip%2C+deflate%2C+br&accept_lang=en&if_modified_since=&if_none_match=&user_agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F81.0.4044.129+Safari%2F537.36&h1=&v1=&h2=&v2=&h3=&v3=&h4=&v4=&h5=&v5=&http_version=2&method=GET&timeout=2&postdata=#h2_http_request

1️⃣ content-security-policy не содержит 'report-sample'. -1 балл.
2️⃣ content-security-policy содержит 'unsafe-inline'. -4 балла.

Если первое исправить, то в Safari и файрфокс в консоли сыпет ошибками.
Если исправить второе, то стили не будут работать, потому что у нас они inline и в нашем случае это безопасно, потому что у нас нет UGC.

Спасибо вам еще раз за сервис. Вы Молодцы!

Ответить
Развернуть ветку
Igor Tarasov
Автор

Так включите content-security-policy-report-only:

Ну инлайн стили как и инлайн скрипты просто говорят о том, что это нехорошо. Понятно, что кто не без греха. 

Ответить
Развернуть ветку
Алексей из LOADING.express

Странные ошибки. Как они могут влиять на скорость загрузки?
У нас сайт и там есть "ошибки", но если их исправить, то работа сервиса будет остановлена, а еще страница станет тяжелее. Причем тут скорость работы  —  не ясно.
https://http.itsoft.ru/?url=https%3A%2F%2Floading.express&accept=text%2Fhtml%2Capplication%2Fxhtml%2Bxml%2Capplication%2Fxml%3Bq%3D0.9%2Cimage%2Fwebp%2Cimage%2Fapng%2C*%2F*%3Bq%3D0.8%2Capplication%2Fsigned-exchange%3Bv%3Db3%3Bq%3D0.9&accept_en=gzip%2C+deflate%2C+br&accept_lang=en&if_modified_since=&if_none_match=&user_agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F81.0.4044.129+Safari%2F537.36&h1=&v1=&h2=&v2=&h3=&v3=&h4=&v4=&h5=&v5=&http_version=2&method=GET&timeout=2&postdata=#h2_http_request

и ссылки у вас конечно, коротенькие..))

Ответить
Развернуть ветку
Igor Tarasov
Автор

Выше в статье описано как. У вас противоречия в логике заголовков. Админа напрягите разобраться.

Зато у нас наглядно видно какие параметры переданы. Для коротких ссылок полно других сервисов.

Ответить
Развернуть ветку
Махметхажиев Алексей

На скорость загрузки это влияет в десятой очереди. Прежде всего надо работать над фронт и бек сайта. HTTP-заголовки тоже надо держать в тонусе и в правильном состоянии. Это факт. Спасибо вам за статью и сервис! Многие даже не знают, что есть какие-то HTTP-заголовки, которыми надо тоже управлять.

P.S. Админа напряжем. Тоже спасибо!

Ответить
Развернуть ветку
Антон Халатов

Замечательная статья на сайте который сам еле набрал  21 бал .. в сервисе которой продает статья)) проверил десяток топ сайтов у всех не выше 22 баллов.. наверное все тупые)

Ответить
Развернуть ветку
Igor Tarasov
Автор

Это повод обратить внимание. 

Теперь по сути проверки заголовков vc.ru:
отчёт не отслеживают.

Допускают в HTML-коде CSS и JS.
content-security-policy содержит 'unsafe-eval'. -4 балла.
content-security-policy содержит 'unsafe-inline'. -4 балла.

Теперь проверим картинку с vc.ru https://vc.ru/life/133018-kak-my-byli-robinzonami-na-neobitaemom-ostrove-mozhno-li-vyzhit-na-neobitaemom-ostrove-v-tihom-okeane 

Не используйте no-cache в параметре Cache-Control.
Last-Modified отсутствует. Страница должна знать про себя когда она изменялась в последний раз. Как минимум это случилось только что. -5 баллов.
Отсутствует Etag, а он должен быть даже если страница выдаёт динамический контент. -5 балла.

То есть картинки браузер все должен заново грузить каждый раз. Это бред. 

Это из бесспорного на мой взгляд. С остальным можно поспорить. Но если реализовать хуже не станет.

Недостатки есть везде. Кто-то их устраняет, кто-то нет. Яндекс.Метрика устранили недостатки на которые я им указал в ходе создания данного сервиса. 

Ответить
Развернуть ветку
ГЕОМЕР ГРУПП
> Весь статический контент сайта, который не меняется должен выдаваться с заголовками ETag, Cache-Control: max-age. Потому что когда посетитель перейдёт на вторую страницу сайта, то браузер не должен заново грузить картинки, JS, CSS, шрифты. 

———
А разве для картинок, JS, CSS, шрифтов не в .htaccess прописывается например так: 
#кеш браузеров
ExpiresActive On
#по умолчанию кеш в 5 секунд
ExpiresDefault "access plus 5 seconds"
# Включаем кэширование изображений и флэш на одну неделю
ExpiresByType image/x-icon "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType application/x-shockwave-flash "access plus 1 week"
# Включаем кэширование css, javascript и текстовых файлоф на одну неделю
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 week"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType application/x-javascript "access plus 1 week"
# Включаем кэширование html и htm файлов на один день
ExpiresByType text/html "access plus 1 day"
# Включаем кэширование xml файлов на десять минут
ExpiresByType application/xhtml+xml "access plus 10 minutes"

Ответить
Развернуть ветку
Igor Tarasov
Автор

Заголовки и там прописываться могут и в httpd.conf и вообще там может быть совсем не Apache, тогда htaccess просто нет.

Ответить
Развернуть ветку
ГЕОМЕР ГРУПП

А как все эти настройки влияют на СЕО? 
304 - понятно, как. как другие настройки влияют на сео?
Какие были проведены эксперименты и полученные результаты?

Ответить
Развернуть ветку
11 комментариев
Раскрывать всегда