Проверка HTTP-заголовков
Анализ заголовков HTTP-ответа: безопасность, кеширование, сжатие, CORS.
Проверка HTTP-заголовков — безопасность и кеширование
Проверьте HTTP-заголовки ответа сервера: заголовки безопасности (CSP, HSTS, X-Frame-Options), кеширование и сжатие. Оценка наличия заголовков безопасности в процентах и полный список заголовков, включая X-Robots-Tag.
Как пользоваться
- Введите URL для проверки заголовков
- Нажмите «Проверить» для анализа
- Изучите оценку безопасности и список заголовков
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
Проверка HTTP-заголовков сайта: что показывает отчёт
Инструмент отправляет на указанный адрес обычный GET-запрос (а не HEAD), проходит по редиректам — до 10 переходов — и показывает заголовки финального ответа. Сама цепочка редиректов в отчёт не выводится: если нужно увидеть каждый переход и его код, используйте проверку редиректов.
Отчёт состоит из четырёх частей: обзор (HTTP-статус, время ответа, HTTPS или HTTP, число заголовков и значение Server), блок «Заголовки безопасности», полный список «Все заголовки ответа» и блок «Кеширование и производительность».
Запрос уходит с User-Agent PromoPilot SEO Tools. Если сайт закрыт WAF или антибот-защитой, вы можете увидеть статус 403 или 503 и заголовки страницы-заглушки, а не настоящего ответа. В таком случае сравните результат с проверкой через curl (команды ниже).
Как считается оценка безопасности
Оценка — это сумма весов найденных заголовков, всего 100 баллов:
| Проверка | Баллы |
|---|---|
| Итоговый адрес открывается по HTTPS | 20 |
| Strict-Transport-Security | 15 |
| Content-Security-Policy | 15 |
| 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-Security | max-age=31536000; includeSubDomains | Включайте, только когда все поддомены работают по HTTPS. Начните с короткого max-age |
| X-Content-Type-Options | nosniff | Других значений нет |
| X-Frame-Options | SAMEORIGIN или DENY | Современная замена — директива CSP frame-ancestors; можно отправлять оба |
| Referrer-Policy | strict-origin-when-cross-origin | Сохраняет домен-источник в аналитике других сайтов, но скрывает путь и параметры |
| Permissions-Policy | camera=(), microphone=(), geolocation=() | Отключите API, которые сайт не использует |
| Content-Security-Policy | Зависит от сайта | Сначала выкатите как Report-Only, соберите нарушения, затем включайте |
| X-XSS-Protection | 0 | Фильтр удалён из современных браузеров; инструмент даёт баллы за любое значение, рекомендуемое — 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 он бесполезен.
- Заголовки пропадают на ошибках. Без параметра
alwaysnginx не добавляет заголовки к ответам 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-проблемы могут стоить вам трафика. Каскадный линкбилдинг улучшит видимость сайта в поиске.