robots.txt 和 noindex 是站点上最容易改错、也最容易長期没人复查的两個開關。它們平时不出声,出問题时也不报错,只是抓取量慢慢變少、地址清單慢慢變杂。這篇文章只讲一件事:怎么確認這两個開關現在的狀態,就是你想要的狀態。
先分清两個開關的分工
robots.txt 决定“能不能来抓”,noindex 决定“抓到了要不要留下”。两者层級不同,生效时机也不同。
- robots.txt:放在根目錄,按 UA 與路径匹配,控制的是抓取行為。它並不阻止頁面被索引,只要別處有連結指向,地址仍有可能出現在结果里。
- noindex:可以寫成頁面的 meta 标簽,也可以放在响應头的 X-Robots-Tag 里,控制的是索引行為。前提是抓取工具必须真的抓到這一頁,才能讀到這條指令。
由此可以推出一個常见的自相矛盾:既在 robots.txt 里 Disallow 了某個目錄,又想用 noindex 把目錄里的頁面清出索引。因為抓不到,noindex 永遠不會被讀到,结果往往和预期相反。
robots.txt 最容易出問题的几處
通配符和路径寫得過宽
一條以斜杠開头的規則,如果结尾没有做锚定,往往會连带匹配到一堆無關路径。比如本意是屏蔽搜尋參數,却把正常栏目一起罩了進去,抓取量下降常常就是從這里開始的。
把規則顺序当成唯一依據
多數主流抓取工具按最長匹配生效,而不是简單地“先寫先赢”。同一份文件里既有 Disallow 又有 Allow 时,路径最具体的那條通常優先。寫規則时如果只按顺序推断,很容易得出错誤结论。
分环境时直接複製粘贴
測試环境為了省事寫了全站 Disallow,上线时整份文件被原样带到生产环境。這類問题往往要等几天後翻日誌才看得出来。
顺手加了 Crawl-delay
這不是标准字段,各家處理方式並不一致。對本来就抓得不多的站点,人為加延迟只會让新地址被發現得更慢。
noindex 不生效的三種情况
- 頁面被 robots.txt 挡住,标簽根本没机會被讀到。
- 标簽寫在模板里,但頁面靠前端异步渲染,抓取时拿到的是空壳。這種情况應改用响應头方式下發。
- 同一頁面出現互相冲突的值,例如同时有 noindex 和 index。處理方式取决于抓取工具,最好只保留一個明确值。
另外要留意:noindex 與 nofollow 是两件事。前者管索引,後者管連結跟踪,寫错一個词,效果完全不同。
一份可执行的自查清單
- 直接訪問根目錄下的 robots.txt,確認返回 200 且内容與预期一致,不是缓存里的舊版本。
- 逐條核對 Disallow 路径,重点看有没有誤伤栏目頁、詳情頁和 sitemap 所在目錄。
- 確認 sitemap 地址在文件中有明确声明,並且该地址可以正常訪問。
- 抽查几個标记了 noindex 的頁面:它們是否仍可被抓取,标簽是出現在 HTML 里還是响應头里。
- 检查測試环境與生产环境的配置文件是否已经分開,避免互相污染。
- 用抓取日誌抽样驗證:被挡住的目錄還有没有来訪记錄,被放開的目錄抓取是否正常。
如果一份規則你自己都说不清它到底匹配了哪些路径,那它大概率不止匹配了你想匹配的那些。
改完之後怎么驗證
規則調整不會立刻反映在資料里,通常需要几天時間观察。建议改動前後各留一份日誌样本,對比目标目錄的来訪次數與狀態碼分布。如果發現某類地址的来訪量骤降到接近零,先回头確認是不是新增的規則把它們一起挡了。
robots.txt 和 noindex 都属于低维護成本、高誤伤概率的設定。把它們放進固定的站点巡检清單,比出問题之後再回头排查要省事得多。