不少站长改完 robots.txt 之后,会盯着日志等一个结果:昨天已经 Disallow 的路径,今天怎么还有蜘蛛在抓?于是开始怀疑规则写错了、蜘蛛不听话,或者服务器返回了错误内容。多数情况下,问题不在规则本身,而在于你把 robots.txt 当成了一个实时开关。
对蜘蛛来说,robots.txt 也是一个普通文件,需要先抓取、再读取、再应用。这个过程中存在缓存和抓取周期,新规则从发布到被真正执行,中间会有一段延迟。
robots.txt 自己也会被缓存
蜘蛛不会每次访问站点前都重新下载一遍 robots.txt。它会在本地保存一份,并按自己的节奏回访更新。不同蜘蛛、不同站点规模、不同抓取压力下,这个回访间隔并不固定,常见的是几小时到一天左右,也可能更长。
也就是说,在你修改文件的那一刻,蜘蛛手里可能还拿着上一次抓到的版本。它继续按旧规则抓取,并不代表新规则无效,只是还没轮到重新读取。
把 robots.txt 理解为一份“定期同步的约定”,而不是“即时下发的命令”,很多现象就解释得通了。
影响生效时间的几个变量
- 蜘蛛的抓取周期:抓取频繁的站点,robots.txt 回访也更勤;小站或新站可能间隔更久。
- 缓存头设置:如果服务器或 CDN 给 robots.txt 设置了较长的缓存时间,蜘蛛和中间层都可能继续返回旧内容。
- 规则变化幅度:只调整某条路径,和整份文件大改,蜘蛛的处理没有本质区别,但大改后更容易被观察到。
- 上次抓取时间:如果你刚好在蜘蛛上次抓取后不久修改,等待时间就会接近一个完整周期。
- 文件可用性:robots.txt 返回 5xx 或超时,蜘蛛可能暂时沿用旧规则或采取保守策略,而不是立刻接受新规则。
怎么确认新规则已经生效
与其反复刷新日志焦虑,不如按下面几步做一次确认。
- 在服务器日志里筛选 /robots.txt 的请求,看最近一次抓取发生在什么时候,返回状态码和响应字节数是否正常。
- 如果日志显示蜘蛛已经重新抓取,并且返回 200、内容长度与你修改后的文件一致,说明新版本已经被取走。
- 继续观察被 Disallow 的路径,看是否还有新的抓取记录。注意区分修改前残留的请求和修改后新发起的请求。
- 用搜索平台提供的抓取测试工具或 robots.txt 测试功能,确认规则语法没有写错,尤其是通配符和结尾匹配。
- 如果站点前面有 CDN 或反向代理,检查这一层是否缓存了 robots.txt,必要时主动刷新该文件的缓存。
几个容易踩的坑
- 用 Disallow 处理已收录页面:robots.txt 管的是抓取,不是移除。已经进入索引的 URL,屏蔽抓取后可能仍然留在结果里,只是蜘蛛看不到最新内容。
- 规则写得太宽:一条不小心覆盖全站的 Disallow,会让蜘蛛在重新读取后迅速减少抓取,恢复时同样需要等待下一个周期。
- 改完立刻删旧规则:如果你在排查问题,最好保留修改记录,方便对照日志判断哪一版规则在起作用。
- 忽略小众蜘蛛:不同蜘蛛读取 robots.txt 的频率不同,主流量蜘蛛生效了,不代表所有抓取工具都已同步。
改完之后的稳妥做法
修改 robots.txt 之前先想清楚目标:是减少无效抓取,还是临时屏蔽某个目录。改完后不要反复来回改,给蜘蛛留出一个完整的回访周期。与此同时,保持服务器稳定、robots.txt 可正常访问,并让 Sitemap 和内链继续提供清晰的 URL 线索。
如果几天后日志里仍然没有新的 robots.txt 抓取记录,再去检查服务器状态、CDN 缓存和文件权限。大多数“蜘蛛不遵守新规则”的情况,只是更新还没走到它手里。