robots.txt 是站点给爬虫的第一份约定。它不复杂,但影响范围很大:改错一行,可能让某個栏目長時間没有新的抓取记錄。更麻烦的是,這類問题往往不會立刻报错,只能從抓取日誌和收錄變化里慢慢看出来。所以每次改動前後,都值得按下面几項過一遍。
一、先確認文件本身能被正常讀取
- 用浏览器直接訪問域名根目錄下的 robots.txt,確認返回 200,而不是 404、403 或 5xx。文件不存在时爬虫會按預設放行處理,但這不代表可以放任不管。
- 不要用 301 或 302 把 robots.txt 跳到別處。部分爬虫對跳轉的處理並不一致,規則可能被忽略。
- 返回的内容類型保持 text/plain,不要返回一個 HTML 頁面。
- 注意大小寫:在 Linux 环境下,robots.txt 與 Robots.txt 是两個不同路径,寫错就無法被讀取。
- 它只能放在域名根目錄。子目錄下的同名文件不會被当作主規則文件。
二、检查 Disallow 有没有誤伤
大部分事故都出在這一步。常见情况包括:
- 寫成 Disallow: /,本意是屏蔽測試目錄,结果屏蔽了整站。
- 想屏蔽 /search,却因為前缀匹配,把 /search-guide 這類正常頁面也一起挡掉。
- 用通配符时范围過大,例如把所有带問号的地址都排除,包括本该抓取的分頁或規范後的地址。
- 規則末尾的匹配符号缺少或多余,導致命中范围和预期不一致。
判断时不要只看規則本身,最好把站内主要目錄、栏目入口、詳情頁路径各挑几個,逐一對照是否會命中。規則條目越多,越需要這样核對。
三、別把 CSS、JS 和图片一起挡掉
如果站点依赖前端渲染,而 robots.txt 里屏蔽了 /assets、/static、/js 這類目錄,爬虫拿到的頁面可能是不完整的。現在主流搜尋引擎會执行頁面脚本,但前提是這些资源本身可抓取。
- 检查样式、脚本、字体、主要图片目錄是否在 Disallow 列表里。
- 如果确實要限制部分资源,尽量缩小到具体文件,而不是整個目錄。
四、看清爬虫分组的寫法
robots.txt 支持按 User-agent 分组,不同爬虫可以有不同的規則。這里最容易出問题的两点:
- 分组之間要用空行分隔,否則後面的規則可能被並入上一组。
- User-agent: * 是通配分组,如果它下面寫了 Disallow,其他没有單獨声明的爬虫都會繼承。
做抓取观察时,经常會看到不同 UA 的訪問。建议把關键爬虫的規則單獨列出,並记錄每次調整的原因,方便後續對比抓取频次的變化。
五、robots.txt 不能替代 noindex
Disallow 的作用是阻止抓取,不是阻止索引。如果一個頁面已经被其他站点連結,搜尋引擎仍可能在没有抓取内容的情况下把它放進索引。想让頁面不出現,更合适的方式是允许抓取、再用 noindex 标记。
反過来,如果一個頁面已经加了 noindex,就不要同时在 robots.txt 里把它封掉。爬虫抓不到頁面,也就看不到那行标记,结果可能适得其反。
六、顺手確認 Sitemap 声明
robots.txt 里通常可以寫一行 Sitemap,指向站点地图地址。检查两点:地址是否可訪問、是否與實际使用的 sitemap 一致。如果站点有多個地图文件,這里是补充發現入口的地方,但不要指望它替代正常的内鏈和栏目结构。
七、改動後的驗證流程
- 先在本地或測試环境寫好規則,逐條對照目錄列表核對。
- 用搜尋引擎官方提供的 robots 測試工具模拟抓取,確認目标地址是允许還是阻止。
- 發布後再次訪問 robots.txt,確認线上内容與预期一致,没有返回舊版本。
- 观察一段時間内的抓取日誌,看重点目錄的抓取次數是否明顯變化。
- 把本次改動内容、時間、原因记錄下来,方便下次排查。
robots.txt 平时很少被打開,但正因為如此,它的問题容易被忽略很久。把它当成一份需要定期核對的配置,而不是一次寫完就不用管的文件,能减少很多後續排查的成本。