要排除缓存造成的假象,核心方法是把“页面实际输出的 HTML”和“浏览器或中间层缓存的 HTML”分开看:先用无缓存请求或查看源代码确认服务端当前返回的内链,再逐层检查浏览器缓存、CDN 缓存、页面缓存插件与对象缓存。只有确认服务端输出已经变了,缓存却仍返回旧内链,才能判定问题出在缓存层,而不是内链本身没改成功。
打开目标页面,查看页面源代码而不是开发者工具里的 Elements 面板。Elements 显示的是浏览器执行脚本、合并 DOM 之后的结果,可能混入前端脚本动态插入的链接;源代码更接近服务端最初返回的内容。如果源代码里已经是新内链,而页面上点击仍跳旧地址,优先怀疑浏览器或中间缓存;如果源代码里仍是旧内链,问题在模板、数据库或生成逻辑,不在缓存。
执行方式:在地址后临时加一个无意义查询参数,例如 ?cachetest=1,再查看源代码。结果说明:若带参数时内链正确、不带参数时错误,通常指向页面级缓存按完整 URL 缓存;若两者都错误,缓存不是首要原因。
按从近到远的顺序排查,每层只回答一个问题,避免一次改多处导致无法归因。
X-Cache、Age、CF-Cache-Status 等(字段名取决于服务商)。结果说明——命中缓存且 Age 较大时,边缘层很可能仍在提供旧内链;清除该 URL 缓存后再看源代码是否更新。准备两个请求:一个带随机查询参数,一个不带。分别保存响应头和源代码中的内链片段。判断依据不是“页面看起来变了”,而是同一段内链在两个请求中是否一致。
这个对照只适用于 HTML 内链排查,不适用于判断收录或排名。搜索引擎抓取到的版本可能来自缓存或历史快照,需要分别核对,不能把一次无缓存请求当作收录结果。
清除缓存后,重新请求原 URL,确认响应头不再返回旧的缓存命中状态,并再次查看源代码中的内链。若使用了站点地图,注意站点地图只帮助发现 URL,不保证收录,也不代表缓存已更新。若站点通过 robots.txt 限制了抓取,这也不等于可靠的索引移除,更不能用它来“清掉”缓存中的旧内链。
验证时至少覆盖三类页面:首页或栏目页、被链接的目标页、以及内链所在的文章页。结果说明:三类页面都返回新内链,才能认为缓存层已一致;只有单页恢复,说明缓存清除不完整或存在多个缓存层。
先选一个出现旧内链的具体 URL,按“无痕访问 → 查看源代码 → 对比带参数请求 → 检查响应头 → 逐层清缓存”的顺序做一遍,把每层结果记下来。确认是缓存层问题后,再调整该层的失效规则;如果服务端输出本身就是旧内链,就直接去改模板、菜单或数据源,不要继续在缓存上反复清除。