改动前保存原始状态,核心是先把当前线上文件完整取回并固定版本,再在副本上修改。对robots.txt来说,最稳妥的做法是:保存一份带时间戳的原始文件、记录其HTTP状态码和响应头、把文件内容做哈希留档,然后才允许编辑。这样多人协作时,谁改了哪一版、线上原来是什么样,都有据可查,也能在出错时快速回退。
很多人手里已经有一份robots.txt,就直接在它上面改,这是返工的常见来源。本地文件可能落后于线上,也可能被别人的分支覆盖。正确的原始状态只有一个来源:当前正在对爬虫提供服务的那个文件。
执行时至少保存三样东西:
curl -i https://你的域名/robots.txt取回,-i能同时看到响应头,确认返回的是200而不是404或重定向。Content-Type、Last-Modified、缓存相关字段和重定向目标。如果robots.txt被重定向到别的路径,原始状态要连重定向关系一起记录。取回之后不要只放在某个人电脑里。原始状态要满足两个条件:别人能拿到,且能确认没被改过。
可以这样操作:把取回的文件原样提交到版本库的一个独立目录,例如archive/robots/2025-01-15-production.txt,文件名带日期,内容不做任何格式化。提交信息写清“线上原始状态,未修改”。同时生成内容哈希,例如用sha256sum,把哈希值贴在提交说明或变更单里。哈希的作用是:日后任何人拿到这份文件,都能验证它和当时线上内容是否一致。
如果团队没有版本库,退一步也要把文件放进共享的变更记录里,并保留只读副本,避免有人直接在存档上编辑。存档一旦被改,就不再是原始状态,回退依据也就失效了。
不是每次改动都需要同等程度的留档。判断依据是改动的影响面:
Disallow、Allow规则:可能直接改变整站或整目录的可抓取范围,除原始文件外,还要记录改动前后的规则对照,明确哪些路径从可抓变不可抓,或相反。Sitemap指令:记录原指令指向的地址,确认新地址可访问,但不要把它理解为提交收录的保证。这里要分清一件事:robots.txt限制抓取,不等于可靠的索引移除。已经收录的页面不会因为加了Disallow就自动从结果中消失。所以如果改动目的涉及“让某些页面消失”,保存原始状态只是第一步,还要单独评估索引层面的处理方式,不能把两者混为一谈。
多人协作减少返工的关键,是让接手的人不依赖口头说明。交付内容建议包含:
验证时不要只看文件能不能打开。取回改动后的文件,确认返回200、内容与提交版本一致、关键规则存在且拼写正确。不同搜索引擎对robots.txt的支持细节需要分别核查,尤其是指令兼容性,不要假设一处生效就处处生效。
假设你要删除一条Disallow规则,让某目录重新可抓。先取回线上文件并留档哈希;再在副本上删除该规则,生成差异对照;然后确认改动后文件能被正常取回、规则语法无误;最后按约定发布,并保留原始文件直到确认无需回退。判断结果的标准是:原始状态可复现、改动范围可读、回退动作可执行。三者缺一,就不算保存到位。
下一步,把这次改动涉及的原始文件、哈希和差异说明放进同一个变更记录,并约定一个观察期,在期内定期取回线上文件与记录比对,确认没有被意外覆盖。