robots.txt 是蜘蛛进入站点时最先读的文件之一,它不控制收录,只控制抓取。也正因为作用直接,一处写错就可能让整批 URL 在短时间内从抓取日志里消失。麻烦的是,这类问题通常没有任何报错,只有在日志里才能看到抓取量突然掉下去。
匹配规则:前缀匹配,Allow 与 Disallow 比长度
多数搜索引擎对 robots.txt 的处理是前缀匹配,而不是正则表达式。写 Disallow: /news 会同时挡住 /news、/news/1、/newsletter 这类同前缀路径。如果只想挡目录,写成 /news/ 更稳妥。
当 Allow 和 Disallow 同时命中时,通常按规则越长越优先来判定,长度相同时 Allow 优先(各引擎略有差异)。所以想放开某个子目录,可以写一条更长的 Allow 覆盖掉更宽的 Disallow。
- 通配符 * 匹配任意字符,$ 表示结尾,二者支持程度因引擎而异,不要把核心规则押在这上面。
- 路径区分大小写,/Images/ 和 /images/ 是两条不同的规则。
- User-agent 分组用空行分隔,同一分组的规则要写在一起,中间不要插入别的 agent。
三类最容易误伤的写法
一、顺手屏蔽资源目录
为了减少抓取,有人会把 /js/、/css/、/static/ 一起屏蔽。渲染型蜘蛛如果拿不到这些文件,页面内容可能拼不出来,抓到的就是一个空壳。资源文件确实占抓取配额,但省下的那点配额,通常抵不上页面渲染失败的代价。
二、用屏蔽代替页面下线
页面已经废弃,与其在 robots.txt 里 Disallow,不如让它返回 410 或 404,并把内链清理掉。被 Disallow 的 URL,蜘蛛拿不到状态码,页面会长期停留在未知状态,反而拖长处理周期。
三、拿 Disallow 当限速器
robots.txt 里的 Crawl-delay 只有部分引擎支持,主流引擎并不一定认。真正的限速应该靠 429 加 Retry-After 这类响应信号,或者直接提升服务端承载能力,而不是在规则文件里绕弯。
改完之后怎么验证
- 把 robots.txt 完整抓下来一份,确认返回 200 且内容是最新版本,没有被 CDN 缓存住旧文件。
- 挑几条有代表性的 URL 逐条对规则:首页、栏目页、详情页、资源文件、带参数的页面。
- 在搜索引擎提供的抓取测试工具里跑同一批 URL,看结果是否和你的判断一致。
- 改动后的三到七天盯着抓取日志,看总请求量和重点目录的请求量有没有异常下滑。
文件本身也要可靠
robots.txt 返回 5xx 或超时,比返回 404 更麻烦:部分引擎会降低抓取节奏甚至暂停抓取,等文件恢复稳定后再逐步放量。所以它最好是一个静态文件,不经过复杂逻辑、不依赖数据库,CDN 缓存时间别设太长,改动之后要能及时刷新。
Sitemap 声明可以放在 robots.txt 里,但别写错域名和大小写。声明存在的意义只是给蜘蛛一个额外入口,并不等于页面一定被收录。
robots.txt 的每一条规则,最终都会在抓取日志里留下对应结果。改之前先想清楚要挡的是哪一类 URL,改之后用日志验证,比反复猜测有效得多。