很多站点的抓取與索引問题,最後都能追到一條指令上。robots.txt 决定蜘蛛能不能来抓,meta robots 和 HTTP 响應头里的 X-Robots-Tag 决定抓到的内容能不能進索引、能不能出摘要。這两层经常被混為一谈,配置时也會互相打架。
三层控制各管什么
- robots.txt:控制抓取。被 Disallow 的地址,蜘蛛通常不會去請求。
- meta robots:寫在 HTML 的 head 里,控制索引與展示,前提是頁面已经被抓取到。
- X-Robots-Tag:寫在 HTTP 响應头里,作用與 meta robots 類似,但不依赖頁面是不是 HTML,因此對 PDF、图片、视频、JS 文件同样有效。
關键点在于:如果一個地址既被 robots.txt 禁止抓取,又希望用 noindex 让它登出索引,這两個目标會互相抵消——抓不到頁面,noindex 也就讀不到。比較稳妥的做法是先放開抓取,让蜘蛛讀到 noindex,等頁面登出索引後再考虑是否收紧抓取。
常见的誤配场景
1. 模板层面的預設指令
不少 CMS 的主题或插件會在模板里寫死一句 noindex,本意是给站内搜尋頁、标簽頁用,结果上线时被繼承到全部頁面。自查时直接看源碼,比在後台一层层找設定更快。
2. 測試环境與生产环境串了
预發布环境的防收錄配置,跟着代碼分支一起合並到线上,是很典型的一類事故。上线清單里加上一條“检查响應头”,能省掉不少回头工。
3. CDN、WAF 或反向代理注入的头
有些安全策略會统一给某些路径加 X-Robots-Tag: noindex,尤其在防護規則更新之後。這類問题從頁面源碼里看不出来,只能看响應头。
4. 分頁與篩選頁一刀切
把列表頁、分頁頁全部 noindex 之後,蜘蛛仍然需要顺着連結爬到詳情頁,只是不把列表頁放進索引。如果连抓取也一並收紧,詳情頁的發現速度可能變慢。
5. 指令拼寫與作用范围
none 通常等價于 noindex, nofollow;指令用逗号分隔才是規范寫法。X-Robots-Tag 可以寫成 X-Robots-Tag: noindex,也可以带 UA 前缀,只针對特定蜘蛛生效。
能影响索引的入口大致有三處:HTML 里的 meta、HTTP 头里的 X-Robots-Tag,以及搜尋引擎後台可能存在的移除工具。排查时按這個顺序走一遍。
一套可执行的定期检查
- 抽查 5 到 10 個典型頁面:首頁、栏目頁、詳情頁、标簽頁、站内搜尋頁,逐個看 head 中的 meta robots。
- 用 curl 或浏览器開發者工具看响應头,確認没有意料之外的 X-Robots-Tag,重点覆盖 HTML、PDF、图片几類资源。
- 在模板文件里全局搜尋 noindex、nofollow、X-Robots-Tag 等關鍵詞,看清每一處的作用條件。
- 检查 robots.txt 與頁面指令是否冲突:被禁止抓取的目錄里,是否存在需要 noindex 的頁面。
- 改版、換 CDN、調整安全策略之後,把這套检查再跑一遍。
發現問题後怎么處理
如果確認有頁面被誤加 noindex,先修正配置,再观察抓取日誌里這些地址的响應碼與响應头,確認新狀態已经被抓到。索引狀態的變化需要時間,期間不要反复改動指令,避免蜘蛛每次来都看到不同版本。
如果只是局部頁面需要控制,優先用更精确的條件(栏目、模板、路径規則),而不是在全局配置里加一條覆盖所有頁面的指令。范围越小的改動,回滚成本越低。
把它当成一個定期動作,而不是出問题才想起来的事。多數索引異常,都能在上线那一刻被拦住。