唯一责任方应落在“最终写出可被抓取URL集合的那一层”,而不是生成链接最多的系统。判断方法是:沿一条真实URL从产生到对外可访问的链路走一遍,找到最后一个能单独改变该URL是否出现、以什么形式出现的环节,把这个环节的配置归属定为唯一责任方;其余系统只提供输入,不承担收录层面的解释责任。这个定义在业务前提变化后需要重新确认,例如站点从单套发布系统切换到多套系统并行、或从整站静态输出改为部分动态拼装时,原来的责任方可能已经不再是最后写入者。
多个系统同时产出网址时,通常混着三种不同性质的动作,把它们分开才能谈责任归属。
唯一责任方应落在第三种。原因是搜狗看到的是输出结果,前两层即使规则写错,只要输出层做了归一,对外表现仍可能一致;反过来,输出层若自行改写或拼接路径,前两层写得再规范也无法约束最终结果。把责任放在内容源,会出现“业务系统说路径没问题、抓取结果却不对”的长期扯皮。
系统多不等于责任分散,关键看谁拥有最终写权限。可以按下面的顺序做一次反推,全程只跟踪一条代表性URL,不必全站铺开。
这个动作的结果会直接影响下一步:确认责任方后,只需要在一个地方加校验或改规则,其他系统保持只读。如果反推发现同一条URL在不同条件下由不同层写入,说明责任边界本身不成立,应先统一写入点,再谈查询和排查,否则每次异常都会重复定位。
确认责任方之后,常见处理不是只有“修好”一条路,而是三种取舍,适用条件不同。
适用于输出层已经稳定、异常集中在少数路径形态的情况。做法是在输出层加一道路径规范检查,把不符合约定的URL拦在渲染之前。前提是你能列出明确的合法路径形态,否则校验会误伤正常页面。这种取舍改动最小,但要求责任方确实拥有拦截能力。
适用于多个系统都在直接写路径、且已经出现互相覆盖的情况。做法是只保留一个出口负责拼接和归一,其余系统改为提交实体标识。前提是这些系统的改造排期可控。改写期间新旧路径可能并存,需要明确哪一套对外,避免两套同时被引用。
适用于某套系统生成的路径既无法归一、又对应大量低价值页面。退出意味着不再让它参与对外URL集合。前提是确认这些页面没有外部引用和实际访问需求,否则退出会造成可访问地址消失。退出后仍需观察一段时间,因为抓取和索引的变化通常滞后,短期数据不动不代表处理无效。
责任方不是一次定义就长期有效。以下变化出现时,原来的归属需要重新确认,因为“最后写入者”很可能已经换了人。
在这些节点上,应按前面的反推方法重新走一遍,而不是沿用旧结论。需要提醒的是,robots.txt里的抓取限制并不等于可靠的索引移除,站点地图也不保证收录,所以责任方的工作目标是让对外URL集合可控、可解释,而不是承诺某个页面一定被处理。若把责任方的考核定成收录数量,很容易诱发用不可靠手段制造收录假象。
假设某站的内容系统按<栏目ID>/<文章ID>给出路径,同时前端框架又按标题生成一层可读路径,两者都能访问。此时不要按“谁先上线”或“谁调用次数多”来定责,而应看输出层最终返回的是哪一个。若输出层对两种请求都返回200且内容相同,责任方应定为输出层,由它决定保留哪一种、另一种做跳转或不再输出;若输出层只透传框架结果,责任方就是框架路由的配置归属。这个判断只依赖可观察的返回结果,不需要猜测任何系统的内部权重。
定责完成后,把结论写成一句话贴在配置变更流程里,例如“对外URL形态由输出层模板负责,其他系统不得直接拼接完整路径”。这句话的作用是让下一次异常有唯一入口,而不是继续在多个系统之间传递排查。前提变化时,先验证这句话是否仍然成立,再决定保留、改写还是退出对应的生成逻辑。