X-Robots-Tag
X-Robots-Tag 是一种通过 HTTP 响应头部来控制搜索引擎 抓取 和 收录 的方式。它不是把 <meta name="robots"> 放在 HTML 内部,而是由服务器在响应头部中发送相同的指令,例如 X-Robots-Tag: noindex。
X-Robots-Tag 是一种通过 HTTP 响应头部来控制搜索引擎 抓取 和 收录 的方式。它不是把 <meta name="robots"> 放在 HTML 内部,而是由服务器在响应头部中发送相同的指令,例如 X-Robots-Tag: noindex。
为何重要
HTML meta 标签只在 HTML 文件内部起作用。非 HTML 资源,例如 PDF、图片、视频、JSON API 响应,无法使用 <meta> 标签,从而在收录控制上留下空白。X-Robots-Tag 适用于任何 HTTP 响应,填补了这一空白。Search Engine Land 记录过一些电商案例,其中数以万计的 PDF 目录被收录,并作为 重复内容 损害了排名,而用 X-Robots-Tag 一次性就解决了问题。
X-Robots-Tag、Meta Robots 与 robots.txt 对比
| 方法 | 位置 | 作用范围 | 是否阻止抓取? |
|---|---|---|---|
| robots.txt | /robots.txt | URL 模式 | 是,阻止抓取本身 |
| Meta Robots | HTML <head> | 该 HTML 页面 | 否,仅控制收录 |
| X-Robots-Tag | HTTP 响应头部 | 任意资源类型 | 否,仅控制收录 |
关键区别:robots.txt 说的是"不要抓取",而 Meta Robots 和 X-Robots-Tag 说的是"不要收录"。要阻止收录,Googlebot 必须实际访问到该页面才能读取指令。在 robots.txt 中阻止会完全停止抓取,因此 Google 永远看不到收录指令。
主要指令
| 指令 | 含义 |
|---|---|
noindex | 不在搜索结果中显示 |
nofollow | 不跟踪页面上的链接 |
none | 等同于 noindex, nofollow |
noarchive | 不在 SERP 中显示缓存副本 |
nosnippet | 不显示摘要或缩略图 |
unavailable_after: [date] | 在该日期后从索引中移除 |
max-snippet: [n] | 限制摘要长度 |
max-image-preview: [setting] | 限制图片预览尺寸 |
max-video-preview: [n] | 限制视频预览长度 |
若要在 HTML 页面内部进行摘要级别的控制,可在你想要从搜索摘要中排除的具体元素上使用 data-nosnippet。这与 X-Robots-Tag 不同,因为它只隐藏所选文本,而不会改变整个资源的收录状态。
配置示例
阻止 PDF 收录(Apache .htaccess):
<FilesMatch "\.pdf$">
Header set X-Robots-Tag "noindex, nofollow"
</FilesMatch>
阻止某个图片目录(Nginx):
location /private-images/ {
add_header X-Robots-Tag "noindex";
}
针对特定爬虫(仅限 Googlebot):
X-Robots-Tag: googlebot: noindex
限时收录:
X-Robots-Tag: unavailable_after: 31 Dec 2026 23:59:59 GMT
元素级别的摘要排除(HTML):
<p data-nosnippet>Do not show this sentence in Google snippets.</p>
实践中的陷阱
不要与 robots.txt disallow 组合使用:如果 robots.txt 阻止了该 URL,Google 根本无法读取头部。要阻止收录,请在 robots.txt 中允许抓取,并使用 X-Robots-Tag noindex。
需要服务器配置:与 meta 标签不同,X-Robots-Tag 在 Web 服务器层面配置(Apache、Nginx、Cloudflare Workers)。CMS 平台并不总能自动处理它。
用 Search Console 或 curl 验证:用 Google Search Console 的网址检查工具或 curl -I https://example.com/file.pdf 检查头部是否确实出现。
摘要控制不是隐私控制:nosnippet 和 data-nosnippet 改变的是 Google 显示结果的方式,但底层内容仍然可被公开访问。对于私密内容,请使用身份验证或服务器端访问控制。
Sources: