站点运营

站点运营:robots.txt 與 noindex 自查,別让一行規則挡住整站抓取

robots.txt 决定能不能抓,noindex 决定要不要留,两者层級不同却经常被寫混。本文梳理常见誤伤场景:通配符寫得過宽、規則顺序被誤解、測試环境配置串到线上、noindex 因抓取受阻而失效,並给出一份可以直接照着做的自查清單和改動後的驗證方法。

站点运营

站点运营:robots.txt 與 noindex 自查,別让一行規則挡住整站抓取

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 不生效的三種情况

  1. 頁面被 robots.txt 挡住,标簽根本没机會被讀到。
  2. 标簽寫在模板里,但頁面靠前端异步渲染,抓取时拿到的是空壳。這種情况應改用响應头方式下發。
  3. 同一頁面出現互相冲突的值,例如同时有 noindex 和 index。處理方式取决于抓取工具,最好只保留一個明确值。

另外要留意:noindex 與 nofollow 是两件事。前者管索引,後者管連結跟踪,寫错一個词,效果完全不同。

一份可执行的自查清單

  1. 直接訪問根目錄下的 robots.txt,確認返回 200 且内容與预期一致,不是缓存里的舊版本。
  2. 逐條核對 Disallow 路径,重点看有没有誤伤栏目頁、詳情頁和 sitemap 所在目錄。
  3. 確認 sitemap 地址在文件中有明确声明,並且该地址可以正常訪問。
  4. 抽查几個标记了 noindex 的頁面:它們是否仍可被抓取,标簽是出現在 HTML 里還是响應头里。
  5. 检查測試环境與生产环境的配置文件是否已经分開,避免互相污染。
  6. 用抓取日誌抽样驗證:被挡住的目錄還有没有来訪记錄,被放開的目錄抓取是否正常。
如果一份規則你自己都说不清它到底匹配了哪些路径,那它大概率不止匹配了你想匹配的那些。

改完之後怎么驗證

規則調整不會立刻反映在資料里,通常需要几天時間观察。建议改動前後各留一份日誌样本,對比目标目錄的来訪次數與狀態碼分布。如果發現某類地址的来訪量骤降到接近零,先回头確認是不是新增的規則把它們一起挡了。

robots.txt 和 noindex 都属于低维護成本、高誤伤概率的設定。把它們放進固定的站点巡检清單,比出問题之後再回头排查要省事得多。