先给结论:当你确认某个URL应当返回404或410、但浏览器、CDN或搜索工具仍显示旧页面时,大概率是缓存层在返回旧副本,而不是服务器真的没修好。排除办法不是反复改配置,而是分层验证:先看源站响应,再看CDN和浏览器缓存,最后看搜索引擎抓取工具拿到的状态码。只有源站、边缘节点和抓取工具三方一致,修复才算完成。
同一个现象可能有不同原因,不要一上来就断定是缓存。需要分别核对:
判断依据是状态码,而不是页面外观。用命令行看响应头最直接:
curl -I https://example.com/old-page
把返回的HTTP状态码和X-Cache、Age、CF-Cache-Status之类的响应头一起看。Age大于0通常意味着这份响应来自缓存,而不是刚由源站生成。
排除缓存假象,本质是在“主动清理”和“等待自然过期”之间选一个。两者不是谁更好,而是看条件。
Age归零或X-Cache显示MISS,同时状态码为404。如果源站已经返回404、但CDN仍返回200,优先选主动清理;如果只是搜索引擎结果页还显示旧标题,而抓取工具请求已经拿到404,那属于索引更新滞后,不需要反复清缓存。
要把“排除缓存假象”做成可验收的结果,先明确最终交付是什么:一份能证明该URL在源站、CDN、浏览器、抓取工具四处都返回404的记录。倒推需要:
curl复测;在抓取工具中请求该URL并查看状态码。这里有一个容易踩的边界:robots.txt的抓取限制不等于可靠的索引移除。如果该URL被robots.txt禁止抓取,抓取工具可能无法请求它,也就无法确认它已经返回404,旧结果可能长期保留。正确做法是允许抓取该URL,让它返回404,而不是用robots.txt挡住。
按顺序执行,避免在错误层面反复操作:
curl -I请求源站IP或绕过CDN的地址,确认状态码。curl -I请求正式域名,查看Age和缓存命中头。假设某页面已删除,源站返回404,但CDN因TTL为24小时仍返回200。此时清理CDN缓存后,curl返回404且Age为0,说明缓存假象已排除。如果清理后仍返回200,则要检查是否有另一层缓存、页面规则或重写规则在生效,而不是继续等待。
先拿到源站的真实状态码。如果源站不是404,先修源站;如果源站是404而正式域名不是,去清理对应缓存并复测;如果两者都是404而搜索工具仍显示旧内容,检查该URL是否被robots.txt挡住抓取,并确认抓取工具能实际请求到它。