HTTP Headers 大全
100+ HTTP 头字段速查 · 请求 / 响应 / 通用 / CORS / 安全
SEO 视角:X-Robots-Tag/canonical/Cache-Control
100+ HTTP 头字段速查 · 请求 / 响应 / 通用 / CORS / 安全
了解工具定位 · 使用场景 · 对比优势
检查网页 HTTP 响应头中的 X-Robots-Tag、canonical 和 Cache-Control 是否配置正确。SEO 人员排查抓取与索引问题、开发者调试缓存策略时,粘贴请求头或输入 URL 即可解析。所有解析在浏览器内完成,数据不上传服务器。
SEO 工程师在网站改版后,发现部分页面未被索引。使用本工具检查页面返回的 X-Robots-Tag 头,确认是否误设了 noindex 或 nofollow;同时验证 canonical 标签是否指向正确版本,避免因重复内容导致权重分散。一次输入 URL 即可批量排查多个页面的索引控制头。
前端运维发现网站首屏加载缓慢,怀疑缓存策略不当。通过本工具查看 Cache-Control 头的 max-age、public/private 等指令,确认静态资源是否被允许缓存、缓存时长是否合理。根据返回的指令调整 CDN 和浏览器缓存配置,减少重复请求,提升页面加载速度。
网站从旧域名迁移到新域名,需要确保搜索引擎正确识别新地址。使用本工具检查旧域名页面的响应头,确认是否返回了 301 重定向,以及 rel=canonical 是否已更新为新域名。同时验证新域名是否设置了正确的 X-Robots-Tag,避免新站被误判为不可索引。
移动端页面与桌面端共用同一套资源,但需要确保搜索引擎只索引移动版。通过本工具检查移动端 URL 的 Vary: User-Agent 头和 X-Robots-Tag,确认是否针对移动端返回了不同的索引指令。同时验证 canonical 标签是否指向移动版 URL,避免桌面版被误索引。
| 维度 | 本工具 | 竞品 A (Screaming Frog SEO Spider) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,HTTP 响应头仅在本地解析,无数据上传 | 需将网页 URL 列表导入桌面软件,数据存储在本地电脑 | 手动检查每个 URL,依赖个人对响应头知识的掌握 |
| 处理速度 | 单次查询即时返回(<1秒) | 爬取整个网站后批量分析,速度取决于网站规模和网络带宽 | 逐个 URL 手动查看浏览器开发者工具,耗时数分钟至数小时 |
| 离线可用 | 完全离线,无需网络连接(页面加载后) | 需要网络连接以爬取网站 | 完全离线,但依赖浏览器缓存或已保存的请求 |
| 使用门槛 | 无需安装,打开网页即用 | 需要下载安装桌面软件,学习配置爬取规则 | 需要熟悉浏览器开发者工具(Network 面板)和 HTTP 协议基础 |
| 批量处理 | 单次仅处理一个 URL | 支持批量爬取整个网站(数千个 URL),生成结构化报告 | 无法批量,只能逐一手动检查 |
| 分析深度 | 仅展示当前 URL 的原始响应头 | 可提取并过滤所有 URL 的响应头,支持高级搜索和导出 | 依赖个人对响应头字段的理解,容易遗漏或误判关键字段(如 X-Robots-Tag 拼写错误) |
| 适用场景 | 快速验证单个页面的响应头配置(如检查 canonical 是否正确) | 大规模 SEO 审计,批量检查全站 HTTP 头配置一致性 | 学习或调试单个请求,不适合生产环境下的批量检查 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| X-Robots-Tag: noindex, nofollow | 指令: noindex, nofollow 生效范围: 所有爬虫 说明: 禁止索引且禁止跟踪链接 | 典型场景:SEO 最常用组合,禁止页面被收录 |
| Link: <https://example.com/canonical-url>; rel="canonical" | 类型: Link 头 关系: canonical 目标 URL: https://example.com/canonical-url 说明: 声明此页面的规范版本地址 | 典型场景:通过 HTTP 头指定 canonical URL |
| Cache-Control: public, max-age=3600 | 指令: public, max-age=3600 缓存策略: 允许公共缓存 有效期: 3600 秒(1 小时) | 典型场景:静态资源缓存控制,平衡性能与新鲜度 |
| Cache-Control: no-store | 指令: no-store 缓存策略: 禁止任何缓存 说明: 响应不得存储于任何缓存 | 边界 case:敏感数据(如支付页面)强制禁用缓存 |
| X-Robots-Tag: unavailable_after: 2025-12-31 | 指令: unavailable_after 日期: 2025-12-31 说明: 在此日期后爬虫应停止索引此页面 | 边界 case:限时内容过期后自动移除索引 |
| Cache-Control: no-cache, no-store, must-revalidate | 指令: no-cache, no-store, must-revalidate 缓存策略: 完全禁止缓存 说明: 每次请求都必须向源服务器验证 | 易错 case:no-cache 并非不缓存,需配合 no-store 才完全禁用 |
| X-Robots-Tag: none | 指令: none 等效于: noindex, nofollow 说明: 禁止索引且禁止跟踪链接 | 易错 case:none 是 noindex + nofollow 的简写,非无限制 |
X-Robots-Tag: noidex, nofolowX-Robots-Tag: noindex, nofollowGoogle 只识别 noindex / nofollow / none / noarchive / nosnippet 等标准值;拼写错误会被忽略,相当于没设置。
X-Robots-Tag: noindex; nofollowX-Robots-Tag: noindex, nofollowHTTP 头字段值用逗号分隔多个指令,分号不是标准分隔符;浏览器和爬虫会解析失败。
<link rel="canonical" href="//example.com/page"><link rel="canonical" href="https://example.com/page">协议相对 URL(//开头)在某些旧爬虫或缓存层中会被当作相对路径拼接,导致指向错误页面。
页面内容是 /product?id=123,canonical 却指向 /category/shoescanonical 指向 /product?id=123 或 /product/shoes-123(与页面内容对应的规范版本)Google 会忽略 canonical 与实际内容严重不符的声明,甚至可能视为欺骗行为。
Cache-Control: max-age=3600, no-cache, no-storeCache-Control: no-cache, no-store(或只保留 max-age=3600)no-store 优先级最高,会覆盖 max-age;同时写多个冲突指令会让缓存策略混乱,实际效果取决于实现。
Cache-Control: public, max-age=600(CDN 缓存 10 分钟)Cache-Control: public, max-age=600, s-maxage=86400(CDN 缓存 1 天,浏览器缓存 10 分钟)s-maxage 专门控制共享缓存(CDN/代理),不设置时 CDN 会使用 max-age 值,可能导致不同用户看到过期版本。
<meta name="X-Robots-Tag" content="noindex">HTTP 响应头:X-Robots-Tag: noindexX-Robots-Tag 是 HTTP 头字段,不是 HTML meta 标签;写在 HTML 里不会被爬虫识别。
<link rel="canonical" href="https://example.com/page?utm_source=twitter"><link rel="canonical" href="https://example.com/page">canonical 应指向不带追踪参数或排序参数的干净 URL;否则爬虫会把带参数版本当作规范版本,浪费抓取配额。
公式推导 · 流程图解 · 依据出处
Cache-Control: max-age=3600, public
max-age — 资源缓存有效期(秒)public — 允许任何缓存(CDN/代理)静态 CSS 文件设置 max-age=86400(24 小时),public。浏览器和 CDN 在 24 小时内直接使用缓存副本,无需请求服务器。
适用于 HTTP 响应头中 Cache-Control 字段的配置,非公式计算,而是策略选择。不适用于动态 API 或需实时更新的内容。
3 种主流语言 · 复制即用
import requests
# 检查 URL 返回的 X-Robots-Tag 和 Cache-Control 头
url = "https://example.com"
resp = requests.head(url, timeout=5)
x_robots = resp.headers.get("X-Robots-Tag", "(not set)")
cache_ctrl = resp.headers.get("Cache-Control", "(not set)")
canonical = resp.links.get("canonical", {}).get("url", "(not set)")
print(f"URL: {url}")
print(f"X-Robots-Tag: {x_robots}")
print(f"Cache-Control: {cache_ctrl}")
print(f"Canonical: {canonical}")
# 输出示例:
# URL: https://example.com
# X-Robots-Tag: noindex, nofollow
# Cache-Control: public, max-age=3600
# Canonical: https://example.com/package main
import (
"fmt"
"net/http"
"time"
)
func main() {
url := "https://example.com"
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Head(url)
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer resp.Body.Close()
xRobots := resp.Header.Get("X-Robots-Tag")
if xRobots == "" {
xRobots = "(not set)"
}
cacheControl := resp.Header.Get("Cache-Control")
if cacheControl == "" {
cacheControl = "(not set)"
}
// Go 的 net/http 不直接解析 Link header,需手动提取
linkHeader := resp.Header.Get("Link")
canonical := "(not set)"
if linkHeader != "" {
// 简单提取 rel="canonical" 的 URL
// 生产环境建议用正则或专用解析库
canonical = "(see Link header: " + linkHeader + ")"
}
fmt.Printf("URL: %s\n", url)
fmt.Printf("X-Robots-Tag: %s\n", xRobots)
fmt.Printf("Cache-Control: %s\n", cacheControl)
fmt.Printf("Canonical: %s\n", canonical)
}
// 输出示例:
// URL: https://example.com
// X-Robots-Tag: noindex, nofollow
// Cache-Control: public, max-age=3600
// Canonical: (see Link header: <https://example.com/>; rel="canonical")// 使用 fetch 检查 HTTP 头(Node.js 18+ 或浏览器)
const url = 'https://example.com';
fetch(url, { method: 'HEAD' })
.then(resp => {
const xRobots = resp.headers.get('X-Robots-Tag') || '(not set)';
const cacheControl = resp.headers.get('Cache-Control') || '(not set)';
// 从 Link header 提取 canonical
const linkHeader = resp.headers.get('Link') || '';
let canonical = '(not set)';
const match = linkHeader.match(/<([^>]+)>;\s*rel="canonical"/i);
if (match) canonical = match[1];
console.log(`URL: ${url}`);
console.log(`X-Robots-Tag: ${xRobots}`);
console.log(`Cache-Control: ${cacheControl}`);
console.log(`Canonical: ${canonical}`);
})
.catch(err => console.error('请求失败:', err));
// 输出示例:
// URL: https://example.com
// X-Robots-Tag: noindex, nofollow
// Cache-Control: public, max-age=3600
// Canonical: https://example.com/7 个高频疑问
「HTTP / 网络」下的其他工具