排除缓存造成的假象,核心做法是先用“无缓存请求”或“强制刷新”拿到源站当前返回,再与浏览器、CDN、反向代理各层缓存分别对照。内链结构设计改动后,如果只看到旧链接、旧锚文本或旧页面版本,先别急着改代码,先确认你看到的是源站输出还是某一层缓存副本。
内链相关改动常见的“假象”有三类,排查方向完全不同:
判断顺序建议从最靠近你的一层开始:浏览器 → CDN/代理 → 源站 → 抓取工具快照。逐层排除,比一上来就怀疑搜索引擎处理更省时间。
这是最直接、可执行的一步。以命令行请求为例,加一个随机查询参数可以绕过多数缓存键:
curl -s "https://example.com/page?cb=20240101" | grep -o 'href="[^"]*"'
把输出里的内链与你在浏览器看到的对比。如果命令行拿到的是新链接,浏览器里还是旧链接,问题基本锁定在浏览器或中间缓存层,而不是内链结构本身。注意查询参数绕过缓存只是排查手段,不要把它当成长期方案,否则可能产生重复URL问题。
看响应头里的 Cache-Control、Age、X-Cache、CF-Cache-Status 等字段,可以判断这次响应是否来自缓存。判断依据:
Age 大于0,说明响应在缓存中停留过,可能不是源站最新内容。X-Cache: HIT 或类似命中标记,说明边缘节点直接返回了缓存副本。Cache-Control: no-store 或较短 max-age,说明该资源本来就不该被长时间缓存,若仍看到旧内容,要查是否有其他层忽略了这个头。适用条件:这些字段名因CDN厂商和配置而异,没有统一标准。你需要在所用服务商的文档里核对该字段含义,不要凭字段名猜测。
按下面顺序逐项确认,每项都能给出明确的“是/否”结论:
Age 和缓存命中标记。若命中且内容旧,需要刷新或等待该层缓存过期。这五步的代价依次是:隐私窗口最省事,命令行请求稍需工具,查响应头需要一点HTTP知识,刷新CDN缓存可能影响线上流量,重新部署则需要走发布流程。优先做代价低、结论明确的步骤。
如果排查确认源站输出已正确、只是缓存层未过期,处理方式是刷新对应缓存或调整缓存策略,不需要动内链结构设计。反过来,如果源站输出本身就是旧链接,那缓存只是暴露了问题,不是问题本身,此时要回到模板、导航或内容编辑流程里找原因。
判断结果的标准很简单:源站新、缓存旧,处理缓存;源站旧、缓存也旧,处理内链结构或发布流程。两者不要混在一起改,否则改完仍无法判断是哪一步起了作用。
下一步:选一个刚改过内链的页面,按上面的清单跑一遍,记录每一步的返回结果,再决定是刷新缓存还是回查源站模板。