有些頁面在抓取日誌里能看到蜘蛛来過,但索引狀態長期停在“已發現未抓取”或“已抓取未编入索引”,同站其他頁面却正常。這類情况有时並非内容质量或内鏈問题,而是 robots 相關指令互相打架:一個来源说可以索引,另一個来源说不要索引,蜘蛛通常按更嚴格的規則执行,入口就在這一步被掐断。
先分清三類指令的生效范围
- robots.txt:控制抓取行為,按路径與 UA 分组匹配,本身不直接控制索引。
- meta robots:寫在頁面 head 中,控制该 URL 的索引與連結跟随。
- X-Robots-Tag:HTTP 响應头形式,粒度更细,可按目錄、文件類型甚至特定狀態碼统一下發。
三者作用层級不同,但只要出現 noindex,頁面基本不會進入索引,哪怕 robots.txt 明确允许抓取。反過来,如果 robots.txt 屏蔽了某目錄,頁面里的 meta noindex 也就讀不到,等于白寫。
容易互相覆盖的几種组合
1. 頁面寫 index,响應头带 noindex
常见于反向代理或 CDN 层统一注入了 noindex,而站点模板里仍寫着 index。蜘蛛讀取响應头更早,會按响應头的 noindex 處理,頁面表現為抓取正常但不收錄。
2. robots.txt 屏蔽抓取,却依赖頁面 noindex 登出索引
這是顺序错位:屏蔽後蜘蛛無法讀到 meta 指令,登出索引的诉求落空,頁面反而可能以無摘要形式出現。需要登出索引时,正确做法是保持 200 狀態並返回 noindex。
3. nofollow 誤伤關键内鏈
列表頁、分頁入口、聚合頁如果被 X-Robots-Tag 标成 nofollow,深层 URL 的發現路径會明顯减少,抓取量不一定立刻下降,但新頁面進入队列的時間會被拉長。
4. 按 UA 分组的規則誤伤
部分配置會對特定蜘蛛返回不同响應头。用浏览器 UA 自查时一切正常,換成蜘蛛 UA 才暴露 noindex,這也是排查时最容易漏掉的一步。
建议的排查顺序
- 用蜘蛛 UA 請求目标 URL,完整查看响應头,重点確認 X-Robots-Tag 中是否含 noindex、nofollow、noarchive。
- 核對 head 中的 meta robots 與 canonical 是否一致,是否存在重复声明。
- 检查 robots.txt 是否放行该路径,注意分组行、通配符與结尾斜杠的差异。
- 逐层對比源站、反向代理、CDN、WAF 的响應头,確認是哪一层注入的規則。
- 抽样同類頁面若干條,判断是個別 URL 還是模板級批量問题。
- 調整後重新請求驗證,並观察抓取日誌中该目錄的狀態碼與入口數量變化。
修复时的几個注意点
- 同一份响應尽量只保留一個指令来源,避免多层重复下發相互矛盾的規則。
- 頁面需要登出索引时,用可抓取的 200 加 noindex,而不是用 robots.txt 屏蔽。
- 分頁、标簽、列表頁若只是不想被索引,也不要顺手加 nofollow,以免切断 URL 發現路径。
- 修改缓存策略後,確認邊缘缓存中的舊响應头已被替換,否則复测结果會失真。
指令排查的核心只有一句话:確認最终返回给蜘蛛的那一份响應里到底寫了什么。本地模板和後台配置都只是中間环节。
把驗證做成固定動作
每次調整 robots 相關配置後,用蜘蛛 UA 复测一次,並在随後一到两周内對比抓取日誌里入口 URL 數量與狀態碼分布。如果入口數量下滑,優先回看這次改動涉及的响應头與 CDN 規則,而不是急着加外鏈或改正文内容,這样更容易定位真正的原因。