做蜘蛛池入口页的人,通常会把注意力放在链接放在哪、robots.txt 怎么写、meta 标签有没有加 nofollow 上,却容易忽略一个更隐蔽的位置:HTTP 响应头里的 X-Robots-Tag。它不写在 HTML 源码里,用浏览器查看源代码根本看不到,一旦被服务器或 CDN 默认加上,搜索蜘蛛可能连页面上的目标链接都不会去跟踪。
X-Robots-Tag 和另外两种指令的区别
控制搜索蜘蛛的常见手段有三种,作用位置和生效时机都不一样:
- robots.txt:放在站点根目录,告诉蜘蛛哪些路径可以抓、哪些不可以。它在抓取之前生效,被禁止的页面蜘蛛通常不会请求。
- meta robots:写在 HTML 的 head 区域,页面被抓取之后才被读到,用来控制是否索引、是否跟踪页面上的链接。
- X-Robots-Tag:写在 HTTP 响应头里,由 Web 服务器、CDN、反向代理下发。它的作用范围比 meta 更广,能作用于图片、PDF 等非 HTML 文件,也能按目录批量下发。
正因为 X-Robots-Tag 在头部而不在页面里,很多入口页配置出问题时,站长在页面上翻半天也找不到原因。
不同取值对目标链接发现的影响
X-Robots-Tag 可以带多个值,用逗号分隔。对蜘蛛池入口页来说,下面几个值要特别注意。
noindex 和 none
noindex 的含义是不要把这个页面放进索引。它主要影响页面本身的收录状态,并不等于禁止跟踪页面上的链接。搜索引擎需要先抓到页面、读到指令,才知道它不该被索引,所以页面上的链接通常仍有被跟踪的可能。不过这属于各家的实现细节,长期把入口页放在 noindex 状态下,链接被发现和被赋予的重视程度可能下降,不适合当成一种稳定做法。
none 相当于同时包含 noindex 和 nofollow,影响面更大。
nofollow
nofollow 是直接和链接跟踪相关的值。放在响应头里时,等于告诉蜘蛛「不要跟踪这个页面上出现的链接」。对入口页来说,这一条几乎是致命的:页面能被抓取,但里面的目标 URL 不会顺着链接被走到。需要注意的是,主流搜索引擎对 nofollow 的处理属于提示性信号,不保证百分百不跟踪,实际表现要看蜘蛛日志,不要凭猜测下结论。
noarchive、nosnippet 等
noarchive 影响是否提供网页快照,nosnippet 影响摘要展示,notranslate 影响翻译功能。这几个对链接发现基本没有直接作用,但配置含义容易和 noindex 混淆,改配置时不要一起批量加上。
入口页常见的误配置场景
- 整套站点为了「保护内容」,在 Nginx 或 Apache 全局加了一行 X-Robots-Tag: noindex,结果所有入口页都被覆盖。
- CDN 或 WAF 的默认安全策略里带了 nofollow,站长只看了 HTML,没查响应头。
- 反向代理把测试环境的头部原样带到线上。
- 程序框架在输出非 HTML 文件时统一加了一段头部规则,而入口页正好走了同一条规则。
只检查页面源码,不检查响应头,等于漏掉了一半的抓取指令。
怎么确认入口页有没有被响应头限制
- 用命令行请求一次入口页,例如把请求头打印出来,只看响应头部分,重点找有没有 X-Robots-Tag 这一行。
- 用浏览器开发者工具的网络面板刷新入口页,在响应头列表里核对同样的一行。
- 把返回结果和目标 URL 的蜘蛛日志对照:如果入口页访问日志里有蜘蛛、目标 URL 的日志里长期没有来自该入口的抓取,就要怀疑链接是否被指令挡住。
- 检查同目录下的其他页面,确认是单页问题还是整个目录或整站的问题。
一些实际处理建议
- 如果本意是让蜘蛛发现链接,就不要给入口页加 nofollow,也不建议长期挂 noindex 再指望链接被顺走。
- 确实需要屏蔽抓取时,优先在 robots.txt 里写清楚路径,职责更明确,也更方便以后排查。
- 修改服务器或 CDN 配置后,务必重新请求一次页面确认头部已经变化,再去看日志。
- 把响应头检查纳入入口页上线的固定流程,和检查链接位置、状态码同级对待。
搜索蜘蛛会不会跟踪入口页上的目标链接,取决于抓取、索引、链接跟踪等多个环节的共同作用,X-Robots-Tag 只是其中一环。它不能保证链接一定被发现,但配置错误时确实会让前面的工作白做,值得花几分钟确认一下。