先用一个不受缓存影响的请求确认服务器真实返回的状态码,再判断浏览器、CDN或反向代理是否把旧的404响应缓存了下来。如果直接请求返回200,而日常访问仍显示404,缓存就是主要嫌疑;如果直接请求同样返回404,问题在源站或路由配置,与缓存无关。
同样看到404,成因可能完全不同,排查方向也不一样。
这三种情况的共同点是“源站可能已经正常”,区别在于旧响应被存在哪一层。定位到具体层级,才能决定是清浏览器、刷节点还是改配置。
最直接的检查是发一个不带本地缓存、带随机参数的请求,观察返回码是否变化。
?cachebust=1730000000,让中间层无法命中同一份缓存键。Cache-Control、Age、X-Cache、CF-Cache-Status 等。出现 Age 大于0或命中标记,说明响应来自缓存。适用条件是你能直接访问该地址并看到响应头。如果站点前面有多层代理,需要逐层加参数测试,而不是只测一次就下结论。
清理动作的影响范围不同,建议按下面的顺序做,避免一上来就动全局配置。
判断标准很简单:每做一层清理就复测一次,哪一层清理后恢复正常,问题就出在哪一层。如果三层都清理后仍然404,说明这不是缓存假象。
有些404看起来像缓存,实际不是。
一是页面本身确实被删除或改名,此时任何清理都不会让404消失,需要恢复内容或设置正确的重定向。二是 robots.txt 禁止抓取某路径,抓取工具可能无法获取真实状态,看到的404未必代表用户访问结果;抓取限制也不等于可靠的索引移除手段,两者要分开判断。
另外,站点地图只用于提示可抓取地址,不保证收录;HTTPS 也不保证页面一定可访问或排名靠前。这些都与“缓存造成404假象”无关,排查时不要混在一起。
缓存问题解决后,还需要确认状态码稳定返回预期值,而不是时好时坏。连续多次请求同一地址,观察返回码是否一致;检查响应头里是否仍带有较长的缓存时间,避免旧的404再次被缓存。如果该地址曾经返回404并被搜索引擎抓取过,恢复后应通过站点地图或抓取工具重新提交,但收录结果由搜索引擎决定,不能保证时间。
下一步:挑一个当前显示404的地址,先带随机参数请求一次并查看响应头。若返回200且带缓存命中标记,就按浏览器、CDN、应用层的顺序逐层清理;若返回404,直接转向源站路由和内容检查。