删栏目后最容易漏掉的入口,往往不是导航菜单,而是那些“不指向栏目页、却依赖栏目存在”的位置:面包屑上一级、列表页的默认分类、搜索框的筛选参数、站内推荐位、结构化数据里的栏目路径、以及外部链接和用户收藏的旧地址。找齐它们的可行做法是:先冻结栏目结构快照,再按“模板层—数据层—站外层”三遍扫描,每遍都记录命中位置和处置方式,最后用一次全站抓取比对删除前后的差异。只删页面而不处理这些入口,通常会出现两类结果:一是旧地址返回错误状态被大量发现,二是站内仍有路径把用户或爬虫送到空栏目,两者都会让这次删除的影响范围超出预期。
常规做法是删掉栏目页、清掉导航链接、提交一次地址移除,然后观察日志。矛盾现象是:栏目页已经不存在,但抓取记录里仍不断出现该栏目下的地址,站内点击也能到达一个空列表。此时有两种解释。
解释一:入口藏在模板和配置里,不在内容编辑的视野内。栏目的存在被写进了列表模板的默认筛选、面包屑的上级链接、侧栏推荐规则、站点地图生成逻辑或结构化数据的路径字段。删掉栏目记录后,这些位置仍然按旧配置输出链接。
解释二:入口在站外,站内已经干净。旧栏目地址被外部页面、用户收藏、历史推送或第三方聚合引用,站内扫描自然找不到它们,但访问和抓取仍会持续。
这两种解释对应的动作完全不同:前者要改模板和配置,后者只能做重定向和对外沟通。判断错方向,就会在站内反复搜索一个根本不在站内的入口。
能区分两种解释的证据,是“链接来源”而不是“访问次数”。做法是:在删除前保存一份全站可抓取地址清单,删除后间隔一段时间再抓一次,把两次结果做差集,然后对差集里的每个地址检查它的引用来源。
这里要注意一个容易被误读的现象:抓取量下降或某个地址访问归零,不能单独证明栏目已经删干净。它也可能来自抓取频率调整、季节性的搜索需求变化、数据采集口径不同,或者外部引用页面本身被下线。把访问量当作唯一证据,很容易把“暂时没人访问”当成“入口已清理”。
模板层的入口不会因为栏目内容被删而自动消失,所以要主动找。建议在动手前导出一份栏目结构快照,至少包含栏目标识、层级路径、绑定的模板、默认筛选参数和是否进入站点地图。删除后,按这份快照逐项核对以下位置是否仍引用旧栏目:
一个实际动作是:把上述位置逐条改成“按现存栏目动态取数”,而不是写死栏目标识。这样做的直接结果是,以后再删栏目时,模板层不会再输出指向已删栏目的链接,扫描范围也随之缩小到站外层。如果暂时无法改成动态取数,至少要在删除清单里把写死的位置标出来,作为每次删除的固定检查项。
数据层指那些以栏目标识为键的记录,例如内容与栏目的关联字段、专题配置、活动页的取数条件。删除栏目后,这些记录可能变成悬空引用,表现为页面空白、列表为空或回退到默认栏目。处理方式是先查引用计数,再决定是清除关联、迁移到新栏目,还是保留但不再输出入口。
站外层无法通过改站内配置解决,只能做两件事:一是为旧地址设置指向最相关现存页面的重定向,二是记录哪些外部来源仍在引用,作为后续观察对象。重定向的目标要按内容相关性选择,而不是统一跳到首页,否则用户和抓取都会落在与预期不符的位置。
假设一个栏目下有三十个内容页,删除时只对栏目页做了重定向,没有处理内容页地址。那么一段时间后,差集里仍会出现这些内容页地址,因为站外引用指向的是它们而不是栏目页。这个例子说明:删除的粒度决定了要处理的地址范围,栏目级删除通常需要同时覆盖栏目页和其下的内容页,否则入口永远找不齐。
确认方式不是看某个数字是否归零,而是看差集是否收敛。具体做法是:删除并处理完上述三层后,再次抓取全站,把新差集与上一次差集比较。如果新增的引用来源只剩站外且已设置重定向,说明站内入口基本清理完毕;如果站内模板仍产生新引用,说明还有配置没改到。每次比较都要在同一采集口径下进行,并考虑季节和搜索需求变化对访问数据的影响,避免把正常波动当成处理失败的证据。
把这三层扫描固化成删除前的检查清单,比事后反复搜索更省力:模板层决定站内是否还有路径,数据层决定页面是否还完整,站外层决定旧地址是否还有人来。三者都过一遍,才算真正找齐受影响的入口。