先确认一件事:报告里的“页数”通常不是页面数量,而是被统计的“行”或“记录”数量。同一URL带不同参数、同一页面被多次抓取、列表页展开出多个子项,都会让行数大于实际对象数。去重的正确顺序是——先定义“一个对象”是什么,再把每行映射到该对象,最后才决定合并规则。跳过第一步,任何去重脚本都会误删或漏删。
不同角色对“页数”的理解差异,几乎都来自对象定义不同。技术角色把带参数的URL当独立页面,内容角色把同一篇文章的所有变体当一个页面,运营角色可能把同一产品的多个尺寸页当一个对象。三个定义都成立,但混用就会得出三个不同的数字。
把定义写成一个可核对的字段,例如“对象键”。常见做法是:去掉查询参数中的跟踪类参数,保留分页与筛选参数;统一协议与域名大小写;去掉末尾斜杠的差异。这一步只做规范化,不做删除,任何一行都还保留原始URL,便于回溯。
假设一个站有100个商品,每个商品有3个规格页,报告显示300行。如果对象键取“商品ID”,去重后是100;如果对象键取“URL”,去重后仍是300。两个答案都对,取决于你要回答的是“有多少商品”还是“有多少可访问页面”。先写下这个问题,去重规则才有依据。
不要直接在报告上删行。先把导出数据拆成三列:原始URL、规范化后的对象键、来源标记(哪个工具、哪次抓取、什么时间)。来源标记很关键——同一对象在不同时间被抓到两次,和同一时间被两个工具各抓一次,处理方式不同。
接着做一次分组统计:按对象键分组,看每组有几行。组内只有1行的,通常无需处理;组内多行的,按下面的顺序判断:
这个动作的结果会直接改变下一步:如果第4类占比高,说明去重规则不能用,必须先改对象键;如果前三类占绝大多数,说明规则可用,可以进入批量处理。
报告页数大于实际对象数,常见原因有三类,各有可区分的证据:
三类原因对应三种处理:第一类去重保留最新,第二类归一化到主URL,第三类需要业务方确认对象边界。把这三类分开统计,比笼统说“报告不准”更有用,因为它能告诉协作者分歧到底出在哪一层。
当多个角色对页数有不同理解时,不要争论数字,改为核对下面四项。每项都要求给出具体值,而不是“差不多”:
假设技术角色说“有300个页面”,内容角色说“只有100篇内容”,把这两句话分别填入对象键字段:前者对象键是URL,后者对象键是内容ID。两个数字不再冲突,因为它们回答的是不同问题。接下来只需确认:本次决策要回答的是哪一个问题。确认后,去重规则和交付数字自然一致。
去重不是把行删掉就结束。至少保留一份映射表:原始URL、对象键、保留/合并/排除的标记、处理时间。这样下一次报告页数再次不一致时,可以先比对映射表,而不是从零排查。
另外,把“对象键定义”和“规范化规则”写成一段简短说明,附在报告首页。它的作用不是解释工具,而是让下一个拿到报告的人知道:这里的“页数”指的是什么,什么情况下会与另一份报告不同。做到这一步,页数不一致就从争论题变成了可核对的项目。