结论先说:如果输入对象由一批关键词换成一批页面,规范要改的不是“多填几列”,而是把主键从关键词字符串改成规范化URL,并把每一行的含义从“我要研究什么”改成“这个页面已经覆盖了什么”。只有当页面集规模很小、且你只关心页面标题里出现的词时,才可以继续沿用词表式规范;一旦需要判断页面之间的覆盖重叠,词表式规范会失效。下面给出选择条件、代价和一个反例。
第一种做法是保留词表结构,把页面当成附加维度塞进去。它成立的条件是:页面数量有限,通常几十条以内;每个页面只对应一个主题;你只需要知道“这个词出现在哪个页面”,不需要知道页面之间谁覆盖谁。代价是后续做覆盖判断时,同一关键词可能挂在多个页面上,你无法从表里看出重复,只能靠人工回看。
第二种做法是重建规范,以URL为主键,关键词变成该页面的属性列。它成立的条件是:页面之间有明确的层级或栏目关系;你需要做覆盖重叠、缺口和优先级判断;后续还会反复增删页面。代价是前期要处理URL规范化,比如去掉参数、统一大小写、决定是否保留末尾斜杠,否则同一个页面会被拆成多行。
这三条里最容易被忽略的是重复程度。很多人以为页面少就不会重叠,实际上栏目页和详情页经常覆盖同一批词,只是词表结构看不出来。
假设你的页面集全部来自同一模板生成的列表页,每个页面标题只是把分类名替换进去,页面正文高度相似。这种情况下,即使你改用URL做主键,覆盖重叠的判断也没有意义,因为页面本身没有足够差异来承载不同主题。此时正确的动作不是改输入规范,而是先合并或删减页面,再决定输入对象。换句话说,URL主键的前提是页面之间确实存在可区分的内容边界。
另一个反例是:你拿到的页面集其实是别人给的导出文件,URL里带有会话参数或跟踪参数。直接以原始URL为主键会把同一页面拆成多行,导致重复率虚高。这时要先做规范化,再判断是否需要重建规范。
不要一次性替换整个输入文件。先复制一份,只保留url、page_title、target_keyword三列,把原来的关键词列改成一对多关系,即一个页面可以对应多个关键词,但每个关键词只允许出现在一个页面下。跑一遍重复检查:如果某个关键词被分配到多个页面,就标记出来。这个动作的结果直接决定下一步——如果标记数量很少,说明旧结构还能修补;如果标记数量很多,说明必须以页面为主键重做,而不是继续在词表上打补丁。
完成这一步后,再决定是否加入parent_url或section列来表示层级。层级列不是必须的,只有当你要判断“栏目页和详情页是否在抢同一批词”时才需要。假设一个栏目页覆盖了十个详情页的主题,那么这十个词在页面主键下会同时出现在栏目页和详情页两行,重复标记会集中出现,这就是需要层级列的信号。
新规范跑通后,拿同一个查询分别用旧结构和页面主键各跑一次,比较返回的行数和重复标记数。如果行数变化很大,先确认是URL规范化造成的合并,还是真的漏掉了页面。具体工具对输入格式的支持范围、字段长度限制和去重规则各不相同,需要以你实际使用的工具文档为准,不要假设所有工具都接受同一套列名。
把重复标记清单交给下一步执行的人之前,先确认每一条标记都对应一个明确的处理动作:合并、改标题还是保留。没有对应动作的标记只会变成噪音,反而让页面主键的优势被抵消。