X-Robots-Tag通过HTTP响应头控制特定搜索引擎抓取,需服务器配置(如Nginx/Apache),格式为全小写、冒号紧贴、无空格,例如“X-Robots-Tag: googlebot:noindex”;支持PDF等非HTML资源,但须确保响应头未被CDN或代理覆盖。

怎么用 X-Robots-Tag 控制特定搜索引擎抓取
X-Robots-Tag 是 HTTP 响应头,比 meta name="robots" 更早生效、更可靠,且能作用于非 HTML 资源(比如 PDF、图片)。它不写在 HTML 里,而由服务器返回——所以改错地方就完全无效。
- 必须由 Web 服务器(如 Nginx、Apache)或后端程序(如 Node.js、Django)在响应头中设置,
<meta>标签对它没影响 - 值区分大小写,
noindex和NoIndex效果不同(后者多数引擎忽略) - 多个指令用英文逗号+空格分隔:
X-Robots-Tag: noindex, noarchive, googlebot:noindex - Google 支持
googlebot、googlebot-news等专用爬虫名;Bing 支持msnbot;其他主流引擎基本只认通用指令
Googlebot 单独禁用 index 的写法和常见错误
想只让 Google 不索引某页,但 Bing、Yandex 照常抓取,就得用带爬虫前缀的语法。但很多人写成 googlebot: noindex(带空格)或 GoogleBot:noindex(大小写错),结果 Google 完全无视。
- 正确格式是:
X-Robots-Tag: googlebot:noindex(冒号紧贴,全小写,无空格) - 如果同时想禁用 Google 新闻和图像搜索:
X-Robots-Tag: googlebot:noindex, googlebot-news:noindex, googlebot-image:noindex - Nginx 示例(location 块内):
add_header X-Robots-Tag "googlebot:noindex";
- Apache 示例:
Header set X-Robots-Tag "googlebot:noindex"
(需启用mod_headers)
为什么加了 X-Robots-Tag 还被收录了
最常见原因是:页面已被收录,而你刚加 header,但搜索引擎还没重新抓取。另一个高发问题是响应头被覆盖或未生效。
- 检查实际响应头:用
curl -I https://example.com/page或浏览器 DevTools 的 Network → Headers → Response Headers,确认X-Robots-Tag确实存在且值正确 - CDN 或反向代理(如 Cloudflare)可能剥离或覆盖自定义 header,需在 CDN 后台显式放行
X-Robots-Tag - 如果页面返回 301/302 重定向,header 只作用于重定向响应本身,不传递到目标页——得在最终落地页上设
-
noindex不等于删除:已收录页面会逐步消失,但过程可能持续数天到数周
PDF 和 API 返回 JSON 也能用 X-Robots-Tag 吗
能,而且这是它比 meta 唯一的优势场景——非 HTML 内容根本没法写 <meta>。
立即学习“前端免费学习笔记(深入)”;
- PDF 文件默认可能被 Google 文档搜索索引,加
X-Robots-Tag: noindex就能阻止 - JSON API 接口若含敏感数据,又不想暴露在搜索结果里,同样适用(注意:这不影响接口可用性,只影响是否进搜索索引)
- 静态文件(如 /assets/report.pdf)需通过服务器配置匹配路径并注入 header,Nginx 可用
location ~ \.pdf$块处理 - 注意:部分老旧 CMS 或托管平台(如 GitHub Pages)不支持自定义响应头,此时只能靠 robots.txt 屏蔽目录,但不如 X-Robots-Tag 精确
真正难的不是写对那行 header,而是确认它从源站出发、穿过所有中间层、最终完整抵达爬虫。多一层代理,就多一个可能吃掉或改写它的环节。











