先把结论说清:如果 robots.txt 引发的抓取异常只在凌晨、发版后或某个爬虫集中访问的时段出现,单靠事后看一眼文件内容几乎抓不到证据。更可行的做法是让“文件版本”和“访问结果”在同一时间轴上留下痕迹——例如在每次发布 robots.txt 前后自动保存一份带时间戳的副本,并让服务器日志保留该时段对 /robots.txt 的请求与响应码。这样即使错误已经消失,也能回看当时到底是文件内容不同、返回状态不同,还是抓取方行为不同。
下面用一个假设情境贯穿,说明怎么把决策一步步做出来。假设某站有一批旧活动页要下线,但其中一部分仍带来长尾访问,于是团队决定只屏蔽目录 /old-campaign/,保留 /old-campaign/guide/。上线后监控显示:白天抓取正常,凌晨时段来自某爬虫的抓取量骤降,白天又恢复。问题不是“robots.txt 写错了没有”,而是“错误是否真实存在,还是只是那个时段的行为差异”。
特定时段异常通常有三种解释,证据形态不同:
这三类的下一步动作完全不同:第一类要修发布流程,第二类要修服务稳定性,第三类通常不需要改 robots.txt。若把三者混在一起,很容易在白天“看起来正常”时误判为已修复。
假设团队决定先取证再动手。可执行的动作是:在发布流程里加一步,把每次 robots.txt 的变更保存为带时间戳的文件副本,内容与线上完全一致,并记录发布人。这样做的结果是,当天凌晨的异常一旦再次出现,就能把“当时线上返回的内容”与“快照”逐行比对,而不是靠记忆或聊天记录还原。
需要注意适用条件:快照只证明文件内容,不证明抓取方看到了什么。如果中间有 CDN 或反向代理,还要确认它是否缓存了旧版本,以及缓存键是否包含路径以外的变量。这一步的产出会直接影响下一步——如果快照与线上返回不一致,问题在分发链路;如果一致,才需要继续看日志和抓取行为。
仅有文件快照还不够。要捕捉短暂证据,需要保留该时段对 /robots.txt 的请求记录,至少包含时间、请求方标识、响应码和响应大小。假设凌晨异常再次发生,日志显示请求集中在同一分钟、响应码为 200、内容长度与白天一致,那么“文件被改坏”这个假设就被削弱,更可能是抓取方调度或网络路径问题。
反过来,如果日志显示该时段大量请求返回 503,或响应大小明显偏小,就说明问题出在服务端或分发层,而不是规则文本。这里有一个容易误判的点:请求量或抓取量归零,并不能单独证明 robots.txt 处理正确。它也可能是抓取方降低频率、站点整体变慢、或该时段本就没有新内容可抓。要把它当作线索,而不是结论。
假设比对结果是:快照与线上一致,响应码正常,但凌晨抓取量下降。此时更合理的动作不是继续改 robots.txt,而是先确认该爬虫是否在其他目录也同步下降。如果只有 /old-campaign/ 下降,而其他目录正常,才回到规则本身,检查是否误伤了仍要保留的 /old-campaign/guide/。这个检查的结果决定下一步:误伤则收窄规则,未误伤则保留现状并继续观察。
还要记住两点边界。第一,robots.txt 的抓取限制不等于可靠的索引移除;即使规则生效,已收录页面仍可能出现在结果中。第二,不同搜索引擎对同一规则的支持情况须分别核查,不能用一个爬虫的表现推断全部。若站点同时使用站点地图,它也不保证收录,只能作为发现路径的补充,不能替代对短暂异常的证据收集。
把上述动作串起来,实际顺序是:先保存变更快照,再保留该时段请求日志,然后用“文件是否一致、状态是否正常、抓取分布是否只影响目标目录”三个问题分流。每一步的输出都决定下一步查什么,而不是先改规则再猜原因。