很多人把 robots.txt 当成一道门:寫上 Disallow,把不想被抓的目錄關掉,任務就算完成。但從抓取流程看,它還有第二重身份——蜘蛛每次訪問站点前,几乎都會先来取一次這個文件,而這里恰好是声明 Sitemap 位置的固定入口。
蜘蛛為什么每次都先看 robots.txt
抓取調度在進入一個新站点,或訪問一個長時間没有接触的站点时,會先請求根目錄下的 /robots.txt,讀取里面的規則,再决定後續怎么走。這個文件本身也有可用性要求:
- 返回 200 且内容正常,規則被讀取;
- 返回 404,通常视為不限制抓取,但 Sitemap 声明也就随之丢失;
- 返回 5xx 或超时,抓取可能被整体暂缓,等下一次探测再恢复。
所以 robots.txt 不只是規則文件,也是抓取通路上的第一個检查点。让它保持稳定、体积小、响應快,往往比寫一堆复杂規則更有價值。
Sitemap 声明放在哪一行
在 robots.txt 中声明 Sitemap,是让蜘蛛在不依赖内鏈的情况下找到 URL 入口的一種方式。寫法本身很简單,但有几個细节容易被忽略:
- 必须寫完整地址,包含协议和域名,例如 Sitemap: https://www.example.com/sitemap.xml;
- 字段名按惯例寫作 Sitemap,路径與文件名要和實际文件一致;
- 可以声明多條,比如分片索引、不同子域或不同内容類型的站点地图;
- 不要把它寫在 Disallow 覆盖的路径下,否則声明與規則會互相打架。
如果站点已经有 sitemap 索引文件,優先声明索引,而不是把几十個分片全部罗列進来。索引文件本身就是為“入口唯一、分片清晰”准备的。
別把入口挡在门外
常见的誤配是規則范围過大。比如先寫了 Disallow: / 做临时维護,之後只放行了首頁,却忘了站点地图文件和静態资源目錄;又比如用通配符把所有 .xml 一並挡掉。结果蜘蛛讀到了 Sitemap 声明,却取不到對應的文件。
還有一種情况是 robots.txt 把自己也挡住了:規則命中了 /robots.txt 本身,抓取端既拿不到規則,也無法確認站点地图在哪。
声明只是入口,抓取還要看別的
把 Sitemap 寫進 robots.txt,解决的是“告诉蜘蛛去哪儿找 URL”,並不解决“蜘蛛愿不愿意抓這些 URL”。真正影响抓取分配的仍然是:
- 内鏈是否把這些 URL 接進主结构;
- 頁面响應是否稳定,服務器是否频繁超时;
- URL 是否重复、參數是否泛滥;
- 站点地图里是否混入了大量低價值或已失效的地址。
一個實用做法是定期從服務器日誌里筛出蜘蛛對 sitemap 中 URL 的訪問记錄,和站点地图條數做對比,看哪些入口被長期忽略。忽略比例高的部分,通常需要回头检查内容质量和内鏈结构,而不是反复修改声明。
一份简單的检查清單
- robots.txt 能正常返回 200,且不带多余的重定向跳轉;
- Sitemap 声明使用绝對地址,條數與實际分片一致;
- Disallow 規則没有誤伤 sitemap、robots.txt 和必要的静態资源;
- 站点地图本身不超過單文件限制,超出时用索引拆分;
- 改版或迁移後,及时更新声明里的域名與路径。
robots.txt 的價值在于稳定地說明規則和入口,而不在于規則寫得多复杂。语法越简單、越容易被解析,抓取端出错的概率就越低。
最後要提醒的是:Sitemap 声明只是一種發現路径的补充,不是收錄保證。把它放對位置、保持可訪問,再配合清晰的内鏈和稳定的服務器,URL 被發現並進入抓取队列的机會才會更顺畅。