先给有条件的结论:如果测试工具能拿到目标页,而真实用户点内链失败,优先怀疑“请求身份”和“路径上下文”不同,而不是链接本身写错。只有当失败能被稳定复现,并且复现条件能缩小到某一类用户、某一段路径或某一种跳转方式时,才值得继续改内链;否则应先保留旧链接,避免误删仍被使用的入口。
测试工具通常直接请求内链的目标 URL,不执行页面上的点击行为,也不一定带上用户的 Cookie、登录态、来源页、设备类型或地区网络。实际用户失败,可能发生在点击之前、跳转之中或到达之后,而工具只验证了“服务器对某个 URL 返回了内容”。
假设一个旧栏目页里还有一条指向旧系统的内链,工具直接请求目标地址返回正常页面,但用户从栏目页点击后停在空白页。这里工具验证的是目标可达,用户经历的是来源页到目标页的跳转链路,两者不是同一件事。下一步不是改目标 URL,而是记录点击后的实际跳转序列。
要复现,先把内链放回它所在的页面和路径中,而不是孤立地测目标地址。可收集的证据包括:
其中“登录后失败”是一个可区分原因的证据:如果匿名访问目标页正常、登录后点击同一内链失败,问题更可能在权限、会话或来源页渲染,而不是链接地址本身。此时应固定一个可重复的账号和路径,再逐步去掉变量。
如果来源页对内链做了条件渲染,比如未登录时输出 A 地址、登录后输出 B 地址,或者脚本根据设备改写跳转目标,那么“工具能访问”和“用户失败”可能根本不在测同一个 URL。这种情况下,继续围绕工具测到的地址复现是无效的。
另一个反例是缓存:工具请求绕过缓存拿到新页面,用户拿到旧页面里的旧内链,点击后指向已下线的目标。此时失败原因在旧缓存与旧链接的组合,而不是当前配置。请求量或抓取量归零也不能单独证明内链该删,它还可能来自抓取预算调整、入口被折叠或统计口径变化。
具体动作:选一条失败内链,在来源页记录它实际输出的目标地址,然后分别用匿名、登录、移动端三种条件点击,记录每一步的跳转和最终页面。结果如果只在登录后失败,下一步查权限与会话;如果只在移动端失败,下一步查脚本改写与响应式渲染;如果三种都失败但工具直连正常,下一步查来源页到目标页之间的跳转链路。
当复现条件稳定且确认是旧系统或旧合作关系导致的死链,才考虑退出该内链;若目标仍有价值,只是路径条件不同,应保留链接并修正跳转条件。对 robots.txt 的限制要单独看待:它限制抓取,不等于可靠的索引移除;站点地图也不保证收录。涉及 HTTPS 时,它不保证安全无漏洞或排名,不能拿它当作内链失败的解释。
最后,把复现条件写成可交接的步骤,交给能改来源页或目标系统的人;在条件未稳定前,不要批量清理旧内链,否则可能把仍有用户使用的入口一并删掉。