如果遗留系统不能改模板、不能加meta、也不能改响应头,你仍然可以在robots协议层面做有限调整,但边界很窄:它主要影响爬虫的抓取调度,不能替代页面级索引控制,也不保证内容从索引中消失。可行的做法是先在网关或前置层改写robots.txt,再配合站点地图和日志观察,而不是指望一条规则解决全部问题。
遗留系统改不动模板,通常意味着你无法在每个页面的<head>里插入noindex,也无法按URL批量返回X-Robots-Tag。此时robots.txt是少数能在不改应用代码的前提下生效的抓手,因为它是一个独立文本文件,通常可以由反向代理、CDN或网关直接返回。
它的能力边界是:Disallow只阻止爬虫抓取,不阻止已抓取URL被索引。如果一个URL已经被索引,仅靠加Disallow,搜索引擎仍可能因为外部链接或历史数据而保留该条目,只是不再抓取新内容。所以当你的目标是“让某类页面从结果里消失”时,robots.txt单独使用往往不够,需要能配合页面级noindex,或者接受更慢的退出路径。
反过来,如果你的目标只是减少爬虫对低价值URL的抓取频率,比如筛选参数组合、会话ID、排序参数,那么robots.txt是合适的第一层控制,因为它不需要碰模板。
当遗留系统的robots.txt已经存在且没有明显冲突时,优先考虑保留,只追加少量Disallow。适用前提是:你确认这些路径确实不需要被抓取,且它们不是靠自然搜索获取流量的入口。
具体动作:在网关层把原robots.txt复制出来,追加一条针对参数目录的规则,例如Disallow: /*?sort=。结果如何影响下一步:如果几天后抓取日志里这类URL的请求量下降,而重要页面的抓取没有同步下降,说明补充规则方向正确;如果重要页面抓取也掉了,说明规则模式写得太宽,需要收窄。
当遗留系统生成的robots.txt本身包含互相矛盾的规则,或者把整站都挡住时,改写比追加更合适。适用前提是你已经能确认哪些目录必须放开,哪些必须关闭,并且有日志或站点地图作为对照。
改写时要注意:不同爬虫对通配符和结尾匹配的支持并不完全一致,*和$不能想当然地认为所有爬虫都按同样方式解释。所以改写后要分别核查目标爬虫的说明,而不是只在一处测试通过就全量上线。
如果遗留系统连robots.txt都无法稳定返回,或者返回的内容会被应用动态覆盖,那么继续在robots协议上投入的收益很低。适用前提是:你已经确认模板、响应头和robots.txt三条路都走不通。
这时更现实的动作是转向站点地图和内部链接管理:把需要保留的URL放进站点地图,把不需要的URL从站点地图移除,并减少站内链接指向。需要明确的是,站点地图不保证收录,它只是提供发现线索;移除站点地图也不等于删除索引,只是降低再次被抓取的概率。
遗留系统改模板困难,意味着你很难通过页面变化来验证。此时日志是主要证据来源。建议至少区分三类请求:被Disallow的路径、重要内容路径、站点地图本身。
这里要避免一个推断错误:请求量归零不能单独证明规则正确。它也可能是爬虫整体降低了抓取频率,或者你的日志采集本身出了问题。所以至少要和一个未受影响的对照组路径一起看。
假设某遗留电商系统无法改模板,商品列表页会生成大量带排序参数的URL,例如/list?sort=price和/list?sort=new。这些页面内容相近,但系统无法加noindex。
可选动作是在网关层改写robots.txt,加入Disallow: /*?sort=。预期结果是爬虫减少抓取这些参数组合,但已经索引的版本不会立刻消失。下一步应该是观察这些URL在日志中的请求变化,并检查它们是否仍然出现在外部链接中。如果外部链接持续指向这些参数URL,那么仅靠robots.txt的退出速度会很慢,需要考虑能否在网关层对已知爬虫返回410或301,而这又取决于网关是否具备按URL改写状态码的能力。
这个例子的边界在于:它假设网关能稳定返回自定义robots.txt,且你接受的不是立即删除索引,而是逐步减少抓取。如果这两个前提不成立,就不应把robots.txt当作主要方案。
在遗留系统上做robots调整,最容易忽略的是“看起来生效但实际不支持”。需要分别核查的情况包括:
把这些前提确认清楚之后,再决定是保留、改写还是退出robots层面的调整,才能避免把抓取控制误当成索引删除来使用。