把旧页面的正文复制进新模板后,肉眼看到的文字和链接往往一致,真正出问题的多是链接目标、锚文本、包裹层和相对路径。发现隐藏差异最可靠的办法,不是再通读一遍页面,而是把复制前后的链接清单分别导出并逐项比对;如果页面数量少、模板结构简单,直接抽查渲染后的HTML也够用。
两种做法都成立,区别在于代价和适用条件。全量比对适合链接承担导航、转化或站内权重传递作用的页面,比如栏目页、聚合页和带大量内链的正文页;代价是要准备一份可解析的链接清单,并在模板替换后重新导出一次。抽查比对适合页面数量多、模板改动集中在头部和尾部的站点;代价是可能漏掉正文深处的个别链接。
判断依据可以看三点:链接是否由编辑器自动生成、是否包含相对路径、是否有跳转或参数拼接。只要其中一项成立,就优先全量比对,因为这三类链接最容易在复制过程中被模板重写。
无论用哪种方式,清单至少要包含链接地址、锚文本、所在位置和包裹标签。做法可以是在浏览器开发者工具里执行一段脚本,把页面内所有 <a> 元素收集成列表;对静态页面,也可以直接对HTML源码做一次解析。导出后不要只看数量,数量相同不代表内容相同。
把新旧两份清单按链接地址排序后做差集,能直接暴露新增、丢失和被改写的条目。这个动作的结果决定下一步:差集为空才进入渲染检查,差集不为空就先修链接再谈样式。
清单差异只是线索,不一定是故障。比如模板把正文链接统一加上 rel 属性,或把锚文本外的空格规范化,这类差异通常无害。真正需要处理的是链接目标指向错误、锚文本与目标不符、可点击区域被遮挡。
假设一个只有十来个链接的页面,复制后清单显示少了一条。合理解释至少有三种:原链接被模板当作重复项合并、原链接在复制时被编辑器当作装饰元素丢弃、导出脚本本身漏抓了动态插入的节点。这时不要直接判定模板有问题,应回到渲染后的页面,用键盘Tab键逐个聚焦可点击元素,看实际能到达哪些链接。这个动作能区分“清单少了”和“用户点不到”是两回事。
旧页面如果位于根目录,相对路径写成 ../about/ 也能正常跳转;复制到多级目录的新模板后,同一写法可能指向错误层级。检查方法是在新模板环境下实际点击或模拟解析该地址,而不是只看字符串是否一致。
页内锚点同理。模板可能给标题自动生成ID,也可能把原来的 id 属性清掉,导致 #section 这类链接失效。验证时逐个访问带锚点的链接,确认页面是否滚动到预期位置。如果锚点失效,优先补回ID,而不是改链接文本,因为改文本会连带影响其他引用。
如果改动前后还观察了点击或访问数据,不要把变化直接归因于链接处理。季节、搜索需求波动、采集口径差异都会影响结果。可用的做法是固定同一时间段、同一统计口径,只比较链接相关的指标,并明确这是相关性观察,不是因果结论。
完成修复后,再导出一次链接清单,与基线做第二次差集。第二次差集为空,说明链接层面的隐藏差异已处理完;仍有差异,就回到渲染检查,确认是模板逻辑还是内容本身的问题。这样每一步的结果都能决定下一步动作,而不是靠反复通读页面碰运气。