Проверка HTTP-заголовков

Анализ заголовков HTTP-ответа: безопасность, кеширование, сжатие, CORS.

Проверка HTTP-заголовков — безопасность и кеширование

Проверьте HTTP-заголовки ответа сервера: заголовки безопасности (CSP, HSTS, X-Frame-Options), кеширование и сжатие. Оценка наличия заголовков безопасности в процентах и полный список заголовков, включая X-Robots-Tag.

Анализ заголовков безопасности сервера
Проверка CSP, HSTS, X-Frame-Options
Оценка безопасности в процентах
Проверка кеширования и сжатия
Полный список заголовков ответа

Как пользоваться

  1. Введите URL для проверки заголовков
  2. Нажмите «Проверить» для анализа
  3. Изучите оценку безопасности и список заголовков

Use Cases

  • Быстрый security-check заголовков для dev/staging/prod.
  • Проверка кэш-политики и CORS для публичных API и страниц.

Limitations

  • Показывает состояние для выбранного URL, не всей структуры сайта.
  • Некоторые заголовки добавляются только на edge/CDN и зависят от пути.

Example Input / Output

Пример ввода
https://example.com
Пример вывода
Security score B: missing Content-Security-Policy and X-Frame-Options.

FAQ

HSTS обеспечивает HTTPS, X-Content-Type-Options предотвращает MIME-снифинг, CSP защищает от XSS-атак. Google учитывает безопасность при ранжировании, а Chrome помечает небезопасные сайты.

Cache-Control и Expires позволяют браузеру сохранять статику локально. Это ускоряет повторную загрузку страницы, улучшает Core Web Vitals и положительно влияет на SEO.

Проверка HTTP-заголовков сайта: что показывает отчёт

Инструмент отправляет на указанный адрес обычный GET-запрос (а не HEAD), проходит по редиректам — до 10 переходов — и показывает заголовки финального ответа. Сама цепочка редиректов в отчёт не выводится: если нужно увидеть каждый переход и его код, используйте проверку редиректов.

Отчёт состоит из четырёх частей: обзор (HTTP-статус, время ответа, HTTPS или HTTP, число заголовков и значение Server), блок «Заголовки безопасности», полный список «Все заголовки ответа» и блок «Кеширование и производительность».

Запрос уходит с User-Agent PromoPilot SEO Tools. Если сайт закрыт WAF или антибот-защитой, вы можете увидеть статус 403 или 503 и заголовки страницы-заглушки, а не настоящего ответа. В таком случае сравните результат с проверкой через curl (команды ниже).

Как считается оценка безопасности

Оценка — это сумма весов найденных заголовков, всего 100 баллов:

ПроверкаБаллы
Итоговый адрес открывается по HTTPS20
Strict-Transport-Security15
Content-Security-Policy15
X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policyпо 10
X-XSS-Protection, X-Permitted-Cross-Domain-Policiesпо 5

Важно: учитывается только наличие заголовка, а не его значение. Strict-Transport-Security: max-age=0 или CSP с 'unsafe-inline' получат полные баллы, хотя почти ничего не защищают. А политика, отправленная как Content-Security-Policy-Report-Only, не засчитывается вовсе — инструмент ищет точное имя заголовка. Поэтому после проверки прочитайте значения: они выводятся под каждым найденным заголовком.

Какие значения заголовков безопасности ставить

ЗаголовокРабочее значениеКомментарий
Strict-Transport-Securitymax-age=31536000; includeSubDomainsВключайте, только когда все поддомены работают по HTTPS. Начните с короткого max-age
X-Content-Type-OptionsnosniffДругих значений нет
X-Frame-OptionsSAMEORIGIN или DENYСовременная замена — директива CSP frame-ancestors; можно отправлять оба
Referrer-Policystrict-origin-when-cross-originСохраняет домен-источник в аналитике других сайтов, но скрывает путь и параметры
Permissions-Policycamera=(), microphone=(), geolocation=()Отключите API, которые сайт не использует
Content-Security-PolicyЗависит от сайтаСначала выкатите как Report-Only, соберите нарушения, затем включайте
X-XSS-Protection0Фильтр удалён из современных браузеров; инструмент даёт баллы за любое значение, рекомендуемое — 0

nginx

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

Ловушка nginx: если внутри location есть хоть один свой add_header, заголовки уровня server в этом location не наследуются. Типичный результат — заголовки есть на главной, но пропадают на статике или в отдельном разделе. Проверьте несколько разных адресов.

Apache и .htaccess

<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

WordPress, 1С-Битрикс, Tilda

В WordPress заголовки проще всего задать в .htaccess или конфиге сервера; из кода темы — через хук send_headers с вызовом header(), но так они появятся только на страницах, которые обрабатывает PHP. На «1С-Битрикс: Веб-окружении» статику отдаёт nginx, поэтому правила из .htaccess до картинок и скриптов не доходят — настраивайте nginx. На Tilda доступа к серверу нет: свои заголовки можно добавить только через прокси перед сайтом, например правилами изменения заголовков ответа в Cloudflare.

Типичные проблемы, которые видно в отчёте

  • Один заголовок дважды. Если в списке два X-Frame-Options или два Cache-Control с разными значениями, их добавляют и CMS, и сервер (или сервер и CDN). Браузеры в таком случае ведут себя непредсказуемо — оставьте один источник.
  • Версия ПО в открытую. Server: nginx/1.18.0 или X-Powered-By: PHP/7.4 подсказывают атакующему, какие уязвимости пробовать. В nginx версию скрывает server_tokens off;, в PHP — expose_php = Off.
  • HSTS на HTTP-адресе. Браузеры принимают Strict-Transport-Security только по HTTPS; на ответе по HTTP он бесполезен.
  • Заголовки пропадают на ошибках. Без параметра always nginx не добавляет заголовки к ответам 4xx и 5xx. Проверьте заодно несуществующий адрес: он должен отдавать 404, а не 200.
  • Кеш CDN. Заголовки вроде cf-cache-status, X-Cache и Age показывают, отдана ли страница из кеша CDN или с вашего сервера.

Заголовки кеширования и сжатия

Блок «Кеширование и производительность» показывает, есть ли Cache-Control, ETag, Last-Modified, Content-Encoding, Vary и Content-Type. Как их оценить:

  • HTML-страницы обычно отдают с Cache-Control: no-cache или коротким max-age, чтобы правки были видны сразу.
  • Статика с хешем в имени файла — Cache-Control: public, max-age=31536000, immutable.
  • ETag и Last-Modified позволяют отвечать 304 Not Modified. Google сообщал, что его краулеры поддерживают такие условные запросы, — это экономит краулинговый бюджет на больших сайтах.
  • Content-Encoding: инструмент сообщает серверу, что принимает сжатые ответы, поэтому отсутствие заголовка обычно значит, что HTML отдаётся без gzip и Brotli. Подробнее покажет проверка сжатия.
  • Vary: Accept-Encoding нужен, если ответ сжимается, чтобы CDN не отдал сжатую версию клиенту без поддержки.

X-Robots-Tag и другие заголовки, важные для SEO

Отдельно их инструмент не оценивает, но они видны в списке «Все заголовки ответа»:

  • X-Robots-Tag: noindex закрывает страницу от индекса так же, как meta robots, — даже если в HTML всё в порядке. Частая причина — правило для тестового окружения, случайно перенесённое на рабочий сервер. Подробнее о директивах — в статье о noindex и nofollow.
  • Link: <…>; rel="canonical" — канонический адрес для PDF и других файлов, где нет HTML.
  • Content-Type с charset=utf-8 — без кодировки возможны «кракозябры» в сниппете.
  • Set-Cookie на каждом ответе мешает кешированию в CDN.

Пример закрытия PDF от индексации в nginx:

location ~* \.pdf$ {
    add_header X-Robots-Tag "noindex, nofollow";
}

Какие адреса сайта проверять

Заголовки задаются правилами сервера, CMS и CDN, и на разных адресах они часто отличаются. Для полной картины прогоните через проверку пять-шесть URL: главную, страницу категории, карточку товара или статью, любой CSS-файл или картинку, PDF (если есть) и заведомо несуществующую страницу. Расхождения между ними и есть список правок.

Проверка заголовков через curl и DevTools

# Только заголовки (HEAD-запрос)
curl -I https://example.com/

# Заголовки при обычном GET, с проходом по всем редиректам
curl -sSL -D - -o /dev/null https://example.com/

# Отдаёт ли сервер Brotli или gzip
curl -sI -H "Accept-Encoding: br, gzip" https://example.com/ | grep -i content-encoding

curl -I отправляет HEAD, а часть серверов и CDN отвечает на HEAD иначе, чем на GET, поэтому при расхождениях доверяйте второй команде. В браузере те же данные видны в DevTools: вкладка Network → запрос документа → Headers.

Если вы искали проверку заголовков H1–H6 на странице, это другая задача: структуру заголовков текста покажет on-page проверка страницы, а общее описание HTTP-ответа — статья о заголовках ответа сервера.

Улучшите позиции в поиске

SEO-проблемы могут стоить вам трафика. Каскадный линкбилдинг улучшит видимость сайта в поиске.

Каскадное продвижение сайта ссылками Бонус $30Беклинки 5→50→5000 на 100+ площадках. Старт от $30, бонус $30 новичкам.