robots.txt 管的是能不能抓,不是抓了会不会收录
搭入口页时,很多人只关心链接怎么写、一页挂多少条,却忽略了站点根目录下的 robots.txt。它不决定收录,但它决定搜索蜘蛛能不能进入入口页。进不去,页面里的目标 URL 自然也不会被顺着发现。所以在排查“入口页没起作用”这类问题时,robots.txt 应该排在比较靠前的位置。
几种常见写法会带来什么后果
Disallow: /
这是最彻底的一种。入口页本身不会被抓取,页面内的链接也不会被提取,入口页等于完全没有作用。有些站点为了临时避开某些页面的抓取加了这条规则,后来忘了删,日志里就会长期看不到蜘蛛访问。
只屏蔽某个目录
如果入口页放在 /pool/ 这类目录下,而规则写成了 Disallow: /pool/,在这个目录范围内,效果和全站屏蔽是一样的。检查时要把规则和入口页的实际路径逐条对上,尤其是批量生成入口页时,路径结构经常会发生变化。
用 User-agent 做针对性放行
针对特定蜘蛛放行、对其它 UA 屏蔽,理论上可行,但维护成本不低。蜘蛛 UA 会调整,规则里的 UA 串一旦写错,比如大小写不一致或者少了关键子串,放行就会失效。除非有明确需求,一般不建议把入口页的抓取完全押在这种精细规则上。
Crawl-delay
Crawl-delay 是建议值而不是强制值。部分搜索引擎会参考,部分直接忽略。入口页数量多的时候,写一个很大的 Crawl-delay 只会让发现节奏更慢,并不会换来更有效的抓取。
robots.txt 自身返回异常时的后果
- 返回 200:按文件内容执行规则。
- 返回 404:通常被视为没有限制,蜘蛛可以正常抓取。
- 返回 500 或 503:蜘蛛往往会采取保守策略,暂时减少甚至暂停对整站的抓取,等服务恢复后再来。
最后一种情况比规则写错更难排查,因为文件内容本身看起来毫无问题,但抓取量会整体下滑。所以除了看规则,也要确认 robots.txt 这个地址本身的响应状态是否正常。
一个容易被忽略的点:被屏蔽的页面,里面的链接不会被提取
有人以为“屏蔽的只是页面本身,链接还是能被看到”。实际流程并不是这样:蜘蛛要先抓取页面,才能解析出其中的链接。被 robots.txt 挡住的页面不会被抓取,也就走不到链接解析这一步,挂在里面的目标 URL 自然不会因此被发现。
判断起来很简单:如果日志里从来没有入口页的抓取记录,先别急着改链接写法,先看 robots.txt 和页面的返回状态。
实操检查清单
- 确认入口页所在目录没有被 Disallow 命中,注意前缀匹配和通配符在各引擎中的差异。
- 如果使用了 User-agent 分组,检查该分组的 UA 串是否覆盖了目标蜘蛛。
- 把 Crawl-delay 设成较小的值,或者直接去掉。
- 在 robots.txt 中用 Sitemap 指向站点地图,方便蜘蛛找到入口页列表。
- 用搜索引擎官方提供的 robots.txt 测试工具,验证具体 URL 是否被放行。
- 改完之后观察一段时间日志,看入口页的抓取次数是否有变化。
不要指望用 robots.txt 做精准调度
robots.txt 本质上是一个粗粒度的开关,各引擎对通配符、最长匹配、UA 分组的处理细节并不完全一致。想让目标 URL 被稳定发现,更可靠的做法是保证入口页可抓取、可解析、响应正常,链接直接写在 HTML 里,而不是靠一份复杂规则去精确指挥蜘蛛。规则越简单,出问题的概率越低。