HTTP Headers 大全

SEO 视角:X-Robots-Tag/canonical/Cache-Control

413 次访问
HTTP HEADERS REFERENCE

HTTP Headers 大全

100+ HTTP 头字段速查 · 请求 / 响应 / 通用 / CORS / 安全

Header 列表

关于本工具

了解工具定位 · 使用场景 · 对比优势

检查网页 HTTP 响应头中的 X-Robots-Tag、canonical 和 Cache-Control 是否配置正确。SEO 人员排查抓取与索引问题、开发者调试缓存策略时,粘贴请求头或输入 URL 即可解析。所有解析在浏览器内完成,数据不上传服务器。

使用场景

🔍

SEO 审计排查

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,避免桌面版被误索引。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A (Screaming Frog SEO Spider)传统方法
数据隐私纯浏览器处理,HTTP 响应头仅在本地解析,无数据上传需将网页 URL 列表导入桌面软件,数据存储在本地电脑手动检查每个 URL,依赖个人对响应头知识的掌握
处理速度单次查询即时返回(<1秒)爬取整个网站后批量分析,速度取决于网站规模和网络带宽逐个 URL 手动查看浏览器开发者工具,耗时数分钟至数小时
离线可用完全离线,无需网络连接(页面加载后)需要网络连接以爬取网站完全离线,但依赖浏览器缓存或已保存的请求
使用门槛无需安装,打开网页即用需要下载安装桌面软件,学习配置爬取规则需要熟悉浏览器开发者工具(Network 面板)和 HTTP 协议基础
批量处理单次仅处理一个 URL支持批量爬取整个网站(数千个 URL),生成结构化报告无法批量,只能逐一手动检查
分析深度仅展示当前 URL 的原始响应头可提取并过滤所有 URL 的响应头,支持高级搜索和导出依赖个人对响应头字段的理解,容易遗漏或误判关键字段(如 X-Robots-Tag 拼写错误)
适用场景快速验证单个页面的响应头配置(如检查 canonical 是否正确)大规模 SEO 审计,批量检查全站 HTTP 头配置一致性学习或调试单个请求,不适合生产环境下的批量检查

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在「URL」输入框粘贴目标网页的完整地址(含 https://)
  2. 在「Directive」下拉菜单选择 X-Robots-Tag、canonical 或 Cache-Control
  3. 点击「Fetch Headers」按钮,工具自动发送 HTTP 请求并解析响应头
  4. 在结果区查看提取的标头值:如 noindex、nofollow、规范链接或缓存指令
  5. 点击结果旁的「复制」图标,将标头值粘贴到网页 <head> 或服务器配置中

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
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 的简写,非无限制

常见错误对照8 个常踩的坑 · 错误 → 修复

1. X-Robots-Tag 值拼写错误

错误
X-Robots-Tag: noidex, nofolow
修复
X-Robots-Tag: noindex, nofollow

Google 只识别 noindex / nofollow / none / noarchive / nosnippet 等标准值;拼写错误会被忽略,相当于没设置。

2. X-Robots-Tag 同时给多个值但用分号分隔

错误
X-Robots-Tag: noindex; nofollow
修复
X-Robots-Tag: noindex, nofollow

HTTP 头字段值用逗号分隔多个指令,分号不是标准分隔符;浏览器和爬虫会解析失败。

3. canonical 写成了绝对路径但漏了协议

错误
<link rel="canonical" href="//example.com/page">
修复
<link rel="canonical" href="https://example.com/page">

协议相对 URL(//开头)在某些旧爬虫或缓存层中会被当作相对路径拼接,导致指向错误页面。

4. canonical 与页面实际内容不一致

错误
页面内容是 /product?id=123,canonical 却指向 /category/shoes
修复
canonical 指向 /product?id=123 或 /product/shoes-123(与页面内容对应的规范版本)

Google 会忽略 canonical 与实际内容严重不符的声明,甚至可能视为欺骗行为。

5. Cache-Control 同时出现冲突指令

错误
Cache-Control: max-age=3600, no-cache, no-store
修复
Cache-Control: no-cache, no-store(或只保留 max-age=3600)

no-store 优先级最高,会覆盖 max-age;同时写多个冲突指令会让缓存策略混乱,实际效果取决于实现。

6. Cache-Control 用 max-age 但忘了设置 s-maxage

错误
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 值,可能导致不同用户看到过期版本。

7. 把 X-Robots-Tag 写成了 HTML meta 标签格式

错误
<meta name="X-Robots-Tag" content="noindex">
修复
HTTP 响应头:X-Robots-Tag: noindex

X-Robots-Tag 是 HTTP 头字段,不是 HTML meta 标签;写在 HTML 里不会被爬虫识别。

8. canonical 引用了带查询参数的 URL 但参数无意义

错误
<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 或需实时更新的内容。

原理图

HTTP Headers 大全 — 浏览器端处理流程用户输入URL / 自定义 Header浏览器内解析X-Robots-TagCanonical / Cache-Control结果展示解析值 + SEO 建议数据不离开本机无后端请求即时反馈
用户输入 本地处理 输出结果

开发者集成

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 头部,数据来源是哪里的?我实时抓的包和这里显示的不一样怎么办?
这个工具是纯浏览器端(FE)实现的,数据来源就是当前浏览器实际发起的请求和收到的响应头。如果你用工具检查自己的网站,结果等于你的浏览器访问该网站时接收到的头部。与服务器端抓包(如 curl -I)或第三方监测工具不一致是正常的——因为 CDN 节点、浏览器、用户代理、Cookie 等因素都会影响响应头。例如,同一个 URL,用 Chrome 访问可能返回 Cache-Control: public,用 curl 可能没有。建议以服务器端日志或 curl 的输出为准,浏览器端的头部仅代表当前用户的真实体验。
工具能检测 X-Robots-Tag 设置得对不对吗?比如我设了 noindex,但 Google 还是收录了。
工具只展示当前请求返回的 X-Robots-Tag 原始值,不判断“对不对”。如果设了 noindex 仍然被收录,常见原因包括:1) 该指令只影响索引,不影响抓取,Google 仍可能先抓取再在索引中移除,有延迟;2) 其他来源(如 sitemap、外链)触发了抓取,但头部指令生效需要 Googlebot 重新访问;3) 指令拼写错误(如 noindex 写成 noindexx)或大小写问题(X-Robots-Tag 值不区分大小写,但建议用小写)。可以用本工具检查当前响应头是否真的返回了 X-Robots-Tag: noindex。
为什么我输入同一个网址,每次查到的 Cache-Control 都不一样?
这是正常现象,原因主要有三个:1) 网站可能对同一 URL 设置了基于用户身份的差异化缓存策略(登录态 vs 未登录);2) 浏览器请求头中的 Cache-Control(如 max-age=0)会覆盖服务器响应逻辑,某些服务器会据此返回不同的 max-age;3) 如果网站使用了动态内容缓存(如 Varnish、Cloudflare),首次访问可能返回 MISS(无缓存),后续返回 HIT(命中缓存),两者的 Cache-Control 可能不同。本工具展示的是你当前浏览器真实收到的值,多次查询结果不同说明缓存策略是动态的。
这个工具能帮我检查 canonical 标签是不是写错了?比如我写了 A 页面的 canonical 是 B,但 B 页面又 canonical 到 C。
工具会展示响应头中的 Link: rel=canonical 值(如果有的话),但只能看到当前页面的 canonical 声明,无法追踪“链式 canonical”或检查循环引用。要诊断这种问题,需要分别查询 A、B、C 三个页面的响应头。如果 A 的 canonical 指向 B,B 的 canonical 指向 C,C 的 canonical 指向 A,这就是一个循环 canonical,搜索引擎会忽略所有声明。本工具适合快速单页检查,循环检测需要手动多步查询。
工具显示某个头部是“自定义头部”,这正常吗?我网站没设置过这个东西。
“自定义头部”是指非标准 HTTP 头部(即不在 IANA 注册表中的头部名称)。很多中间件、CDN、安全插件、Web 服务器会自动添加自定义头部。例如:X-Cache(来自 CDN)、X-Content-Type-Options(来自安全配置)、X-Frame-Options(来自网站框架)、Server(来自 Web 服务器)。即使网站代码里没写,服务器软件或托管平台也可能默认加上。如果是 X- 开头的头部,通常是安全的扩展头部,不影响功能。如果看到奇怪的名称(如 X-MySecretFlag),建议检查服务器配置是否有意外注入。
为什么我查百度首页,结果里没有 X-Robots-Tag?是不是工具坏了?
不是工具问题。百度首页没有返回 X-Robots-Tag 头部,这是正常的——该头部是可选的,只在需要覆盖 robots.txt 规则时使用(例如对 PDF 文件设 noindex,对广告落地页设 nofollow)。大多数普通网页不会设置 X-Robots-Tag,搜索引擎会直接使用 <meta name=robots> 或默认规则。本工具如实显示响应头中实际存在的内容,没有就是没有,不代表工具异常。你可以用这个工具查一下自己的网站,如果也没有,说明不需要通过头部控制抓取/索引。
这个工具和浏览器开发者工具(F12 的 Network 面板)有什么区别?我直接用 F12 不就行了?
核心区别在于聚焦和速度。F12 的 Network 面板会列出所有请求(图片、CSS、JS、XHR),头部信息分散在几十个请求中,找单个 URL 的响应头需要筛选。本工具专门针对“查看一个 URL 的 HTTP 头部”这个场景优化:输入 URL → 一键查询 → 只展示该 URL 的响应头和请求头,按功能分组(缓存、SEO、安全、内容协商等),并自动高亮常见 SEO 相关头(X-Robots-Tag、canonical、Cache-Control)。适合快速检查,特别是做 SEO 审计时逐个页面查头部,比 F12 逐条翻效率高。但 F12 能查看请求时间线、Cookie 详情、WebSocket 等,本工具做不到。
选择 打开 +新窗口 esc关闭