排查頁面不收錄时,大多數人的第一反應是打開 HTML 源碼,確認有没有 noindex。但索引指令不止存在于頁面里,它還可以寫在 HTTP 响應头中。当两處指令不一致时,只看其中一處很容易得出错誤结论。
两處指令,同一個字段
搜尋引擎讀取的 robots 指令有两個入口:
- 頁面内:HTML 中的 meta robots 标簽,只作用于 HTML 頁面。
- 响應头里:X-Robots-Tag,作用于任何通過 HTTP 返回的资源,包括 PDF、图片、视频、接口文档等無法插入 meta 的文件。
两者内容格式基本一致,都支持 noindex、nofollow、noarchive、nosnippet 等指令,也可以限定只對某個搜尋引擎 UA 生效。
冲突时以谁為准
關键结论是:指令是叠加的,不是互相覆盖的。同一個頁面上,meta 里寫 index、响應头里寫 noindex,结果按 noindex 處理;反過来也一样。限制越嚴格的指令優先級越高。
同理,多個 X-Robots-Tag 响應头會逐條累加;同一行里用逗号分隔的多條指令也會一起生效。如果分隔符寫错,某條指令可能被直接丢弃,這類细节最好實测確認,而不是凭记忆判断。
排查时不要問“哪一條指令生效”,而要問“所有指令加起来包含了什么限制”。
最容易漏掉的三類来源
1. 全站统一加的响應头
CDN、WAF、反向代理或某些缓存插件會預設给所有响應追加 X-Robots-Tag。配置一次,全站资源都可能带上 noindex。這類問题的特征是:頁面内容正常、内鏈也是通的,但所有 URL 的收錄狀態異常一致。
2. 按目錄或扩展名定向加的头
例如只對某個目錄或 .pdf 结尾的請求加 noindex。此时首頁、栏目頁收錄正常,某一批资源集体不進索引,很容易被誤判成“内容质量不行”。
3. 不同 UA、不同节点看到的不一样
部分防護策略會對非浏览器 UA 返回不同的响應头,或者不同 CDN 节点缓存了不同版本的头。你本地拿到的是 A 版本,蜘蛛拿到的是 B 版本,两邊结论自然對不上。
四步核對顺序
- 看原始响應头:用不缓存的方式請求目标 URL,確認返回头里有没有 X-Robots-Tag。命令行工具拿到的第一手响應,比“頁面源碼里没看到 noindex”更可靠。
- 對比 UA:分別用普通 UA 和搜尋引擎 UA 請求同一個 URL,看响應头是否一致。不一致就說明中間有设备在做條件判断。
- 覆盖非 HTML 资源:把站内的 PDF、图片、文档按類型抽样,單獨检查它們的响應头。這些文件没有 meta 可以兜底,只能靠头来控制。
- 看蜘蛛實际拿到的版本:在搜尋後台的網址检查里查看已抓取的内容與抓取詳情,確認蜘蛛当时收到的是哪個版本,而不是你現在能看到的版本。
两個邊界提醒
一,响應头里的 noindex 需要蜘蛛真正抓取到才能被讀到。如果同时用 robots.txt 拦住了抓取,指令就没有机會生效,這两件事要分開處理。二,把 noindex 去掉之後,恢复通常不是即时的,需要等下一次抓取與重新處理,不要因為当天没變化就反复改動配置。
把“頁面里没有 noindex”扩展成“整條响應鏈路上都没有 noindex”,很多看起来莫名其妙的收錄問题,往往能当场定位到源头。