排查頁面不收錄时,多數人會打開 HTML 源碼,確認 meta robots 里没有 noindex 就放心了。但頁面級收錄指令其實有两個投放位置:一個是 HTML 的 head,另一個是 HTTP 响應头里的 X-Robots-Tag。两者只要有一處寫了禁止,结果就可能完全不同。
两條指令的關系:位置不同,作用對象相同
meta robots 寫在 HTML 的 head 中,只有抓取並解析到 HTML 才會被讀到。X-Robots-Tag 寫在 HTTP 响應头里,服務器返回响應时就能被看到,不依赖正文解析,因此對非 HTML 文件同样有效。
两者都只作用于目前這個網址,不會自動传递给別的頁面。需要区分的是指令性质:noindex、nofollow 這類属于禁止性指令,寫了就生效;而 index、follow 只是表示不阻止,属于允许性指令,寫了並不等于搜尋引擎必须收錄。
冲突时通常怎么處理
- 只要能讀到 noindex,頁面就不會進入索引,無论另一處寫的是不是 index。
- 同一處出現多個 robots 标簽时,指令會合並處理,禁止性指令優先。
- 拼寫或语法错誤會让整條指令失效,比如把 noindex 寫成 no-index,或把值寫在 content 属性之外。
- robots.txt 屏蔽會阻止抓取,此时頁面上的 noindex 反而讀不到,這是另一類問题,需要分開處理。
常见的冲突来源
- CDN 或反向代理上配置了全局响應头,上线时忘记把測試期的 noindex 去掉。
- 測試环境、预發布环境的配置被同步到了生产环境。
- 模板或组件里寫死了 meta robots,單獨調整某個頁面时没有注意到。
- 安全插件、缓存插件或框架中間件自動注入了 X-Robots-Tag。
- 响應被缓存,源站已经改好但邊缘节点還在返回舊值。
核對顺序
- 先用命令行查看响應头,確認 X-Robots-Tag 是否存在以及具体值。
- 再看渲染完成後的 DOM,而不是只看原始 HTML,避免前端脚本動態插入的 meta 被漏掉。
- 在搜尋控制台的網址检查里查看已抓取的頁面,對照它记錄的响應头和 HTML,確認抓取时看到的是哪一版。
- 检查 robots.txt 是否屏蔽了该路径。若已被屏蔽,頁面上的指令不會被讀取,需要先解除屏蔽再判断。
- 確認冲突来源後修正配置,清理缓存,再提交重新抓取。
解除 noindex 只是把门打開,頁面還需要被重新抓取一次,新的响應头才會被记錄,索引狀態才可能随之更新。這一步通常不會立刻完成。
几個容易踩的誤区
第一,以為删掉 noindex 後頁面會马上回到索引,實际上要先重新抓取,再经過一轮索引處理。第二,以為加上 index 能加快收錄,它只是一個不阻止的信号。第三,只看 HTML 不看响應头,導致真正的屏蔽来源一直没被發現。
把响應头、HTML 指令、robots.txt 和實际抓取记錄放在一起對照,冲突通常很快就能定位。