Что такое HTTP-заголовки и зачем они нужны для SEO
HTTP-заголовки — это метаданные, которые сервер отправляет браузеру и поисковым ботам вместе с каждым ответом. В отличие от мета-тегов в HTML, заголовки видны боту ещё до обработки тела страницы и могут полностью изменить её статус в индексе.
Пять заголовков напрямую влияют на индексацию и ранжирование: X-Robots-Tag, Link (canonical), Cache-Control, Strict-Transport-Security и Content-Type.
X-Robots-Tag: управление индексацией через заголовок
X-Robots-Tag — серверный аналог <meta name="robots">. Его преимущество: работает для любых файлов (PDF, изображения, ZIP), а не только для HTML-страниц.
noindex
Исключить страницу/файл из индекса. Эквивалент meta noindex.
nofollow
Не переходить по ссылкам на странице. PageRank не распределяется.
nosnippet
Запретить показ сниппета в выдаче и сохранение в кэше.
none
Аналог noindex + nofollow одновременно.
all
Разрешить всё (поведение по умолчанию). Указывать не нужно.
unavailable_after: дата
Автоматически убрать из индекса после указанной даты.
Примеры конфигурации nginx:
# Закрыть PDF-файлы от индексации
location ~* \.pdf$ {
add_header X-Robots-Tag "noindex, nofollow";
}
# Закрыть весь /admin/
location /admin/ {
add_header X-Robots-Tag "none";
}
Если заголовок и мета-тег дают разные директивы, Google применяет наиболее ограничительную. Но конфликты лучше устранять: они затрудняют аудит и могут менять поведение при обновлении сервера.
Link: canonical через HTTP-заголовок
Canonical можно указать не только в HTML (<link rel="canonical">), но и в HTTP-заголовке Link. Это единственный способ задать canonical для не-HTML ресурсов (PDF, CSV).
Link: <https://example.com/page/>; rel="canonical"
Google поддерживает оба метода. Яндекс — только HTML-тег. Для HTML-страниц предпочтителен HTML-тег: он видён в исходнике без HTTP-клиента.
Cache-Control и ETag: кэширование для скорости и обхода
Правильное кэширование ускоряет загрузку (Core Web Vitals) и снижает нагрузку на crawl budget: если ресурс не изменился, бот получает ответ 304 Not Modified без повторной передачи тела.
Cache-ControlETagLast-ModifiedVaryРекомендуемые значения:
# HTML-страницы: короткий TTL + revalidation
Cache-Control: public, max-age=3600, must-revalidate
# Статика с версионированием (/app.v2.css)
Cache-Control: public, max-age=31536000, immutable
# Без кэширования (admin, API)
Cache-Control: no-store
Content-Type и Content-Encoding
Неверный Content-Type вызывает ошибки парсинга: если HTML-страница отдаётся с application/octet-stream, браузер предложит скачать файл, а не рендерить его. Google при этом может не проиндексировать контент.
text/html; charset=UTF-8
HTML-страницы. charset=UTF-8 обязателен для кириллицы.
application/xml; charset=UTF-8
Sitemap.xml и XML-фиды.
application/json
JSON-ответы API.
text/plain; charset=UTF-8
robots.txt и llms.txt.
Content-Encoding: gzip или br (brotli) — сжатие ответа. Уменьшает объём HTML на 60–80%, ускоряет FCP и LCP. Проверьте, что сжатие включено хотя бы для HTML, CSS, JS.
Заголовки безопасности с SEO-значением
Strict-Transport-Security (HSTS)Strict-Transport-Security (HSTS): max-age=31536000; includeSubDomains; preload
Content-Security-Policy (CSP)Content-Security-Policy (CSP): default-src 'self'; script-src 'self'
X-Content-Type-OptionsX-Content-Type-Options: nosniff
Что проверять: краткий чеклист
X-Robots-Tag
Отсутствует для HTML-страниц, которые должны индексироваться. Если есть — директивы не конфликтуют с meta robots.
Cache-Control
HTML: max-age 1–24 часа + must-revalidate. Статика: max-age=31536000 + immutable.
Content-Type
charset=UTF-8 для HTML. Нет application/octet-stream для веб-страниц.
Content-Encoding
gzip или br включены для HTML/CSS/JS.
HSTS
Присутствует на HTTPS-сайте, max-age ≥ 31536000.
ETag / Last-Modified
Хотя бы один из двух для поддержки 304 Not Modified.
Last-Modified
Не устарел на несколько лет (признак заброшенного контента).