HTTP Headers for SEO: The Ones That Matter and How to Check Them
Updated July 25, 2026
🛠️ This guide pairs with our free HTTP Header Checker — Trace redirect chains hop by hop, grade security headers, and fetch as Googlebot.
Most SEO audits stop at what’s visible in the HTML. But before a browser or crawler ever sees your markup, the server has already sent a set of HTTP headers — and several of them can override everything the HTML says. A noindex in an HTTP header silently beats your meta tags. A sloppy redirect chain leaks speed and link equity on every request. Here are the headers that actually move rankings, and the failure patterns to look for.
X-Robots-Tag: the invisible noindex
The X-Robots-Tag response header carries the same directives as the meta robots tag — noindex, nofollow, noarchive — but at the HTTP level, which means:
- It works on non-HTML files: PDFs, images, feeds. It’s the only way to noindex a PDF.
- It’s invisible in view-source, which is why a stray one can deindex a site section for months before anyone notices. The classic incident: a CDN rule or security plugin adds
X-Robots-Tag: noindexto a path pattern, organic traffic bleeds out, and nothing in the HTML explains why.
If pages are mysteriously missing from Google, check this header first — our HTTP Header Checker shows it (with a highlighted warning) on every hop of the response.
Redirect status codes: 301, 302, 307, 308
Redirects live entirely in headers: the status code plus a Location header. What matters for SEO:
- 301 and 308 signal permanent — search engines transfer signals to the target and eventually replace the old URL in the index.
- 302 and 307 signal temporary — the old URL stays indexed. Google treats long-lived 302s as 301s eventually, but “eventually” can cost weeks during a migration.
- Chains compound. A → B → C wastes a round trip per hop and Google stops following after ~10. Chains accumulate silently as sites migrate (http→https, non-www→www, old paths→new paths). Collapse them so hop one lands on the final URL.
We wrote a full breakdown in 301 vs 302 redirects, including the migration checklist.
Cache-Control: speed you don’t have to earn
Core Web Vitals are a ranking input, and caching headers are the cheapest speed win that exists:
Cache-Control: public, max-age=31536000, immutable # hashed static assets
Cache-Control: public, max-age=3600 # HTML that can be briefly cached
Cache-Control: no-store # personalised pages only
The two common mistakes are opposites: no-store on static assets (forcing every visitor to re-download your CSS), and long max-age on un-hashed filenames (making deploys invisible until caches expire). If you use hashed filenames (app.8f3ab2.js), immutable with a one-year age is correct and safe.
The Age and cf-cache-status/x-cache headers tell you whether a CDN actually cached the response — DYNAMIC or MISS on content you expected to be cached means your Cache-Control isn’t doing what you think.
Link headers: canonical and hreflang without HTML
Lesser known: rel=canonical and hreflang can be sent as HTTP Link headers:
Link: <https://example.com/page>; rel="canonical"
Link: <https://example.com/fr/page>; rel="alternate"; hreflang="fr"
Like X-Robots-Tag, this is mainly useful for non-HTML resources — but it also means an audit that only reads the HTML can miss canonical signals entirely. Check both.
Security headers: indirect but real
Strict-Transport-Security, Content-Security-Policy, X-Content-Type-Options, X-Frame-Options and Referrer-Policy don’t directly change rankings, but they’re part of the trust picture (Chrome flags, browser warnings, and iframe-based content theft all touch traffic), and they’re free to add. The header checker grades all five out of the box.
The Googlebot comparison trick
Servers can — accidentally or deliberately — respond differently to Googlebot than to users: different redirects from a misconfigured bot rule, different caching, or outright cloaking from a hacked plugin. The fastest way to catch it: fetch the same URL twice, once as Chrome and once as Googlebot, and diff the header sets. Our checker has both as one-click presets, along with Bingbot and curl.
A five-minute header audit
- Fetch your homepage and a deep page with the HTTP Header Checker.
- Confirm the redirect chain is ≤1 hop and uses 301/308.
- Search the final response for
X-Robots-Tag— should be absent or deliberate. - Verify
Cache-Controlmatches the content type (long+immutable for hashed assets, short for HTML). - Re-run as Googlebot and confirm the responses match.
Twenty requests with this loop covers most sites — and finds the kind of issue that no amount of on-page optimization can compensate for.