先明确一点:搜索引擎蜘蛛抓取看到的页面,和你浏览器里看到的页面经常不是同一个版本。缓存造成的假象,就是你把一个旧版本、旧状态或代理层返回的结果,当成了蜘蛛当前真实抓取到的内容。排除它最直接的办法是:用带原始请求头的方式重新拉一次页面,同时对比响应头中的缓存标记、内容时间戳和正文关键片段,确认三者一致后再下结论。
“缓存”这个词在抓取排查里至少对应三个不同位置,混在一起就会误判:
判断顺序应该是:先排除本地缓存,再查 CDN 层,最后才判断是不是搜索引擎快照滞后。
不要只看浏览器刷新结果。用命令行带蜘蛛常见 UA 请求一次,重点看响应头和正文:
curl -A "Mozilla/5.0 (compatible; Googlebot/2.1)" -I https://example.com/page
把 -I 换成直接输出正文,检查三样东西:
Cache-Control、Age、X-Cache、Last-Modified。如果 Age 是一个很大的秒数,说明命中了中间缓存。如果正文是旧的但 Last-Modified 是新的,说明缓存层和源站状态不一致,问题在缓存,不在蜘蛛。
下面这些现象同时出现两项以上,基本可以判定为缓存造成的假象,而不是抓取失败:
X-Cache: HIT 或类似命中标记。curl 拉到的正文是新的。反过来,如果源站直接请求也是旧内容,那就不是缓存问题,而是发布流程或数据库没更新。
时间和人手有限时,不要一上来就提交重新抓取。按下面的顺序做,每一步都有明确的验收结果:
curl 请求一次,确认源站内容已更新。验收标准是正文包含最新改动。Cache-Control 是否允许缓存 HTML,Age 是否过大。验收标准是蜘蛛 UA 请求返回 Age: 0 或接近 0。责任划分上,第 1、2 步由能改服务器或 CDN 配置的人做,第 3 步由能看响应头的人做,第 4 步只需要观察,不必安排专人盯。
robots.txt 的抓取限制不等于可靠的索引移除,它只控制蜘蛛能不能抓,不控制已缓存内容何时消失。站点地图不保证收录,提交 sitemap 也不能强制刷新缓存。HTTPS 不保证安全无漏洞,也不保证排名,它和缓存假象没有直接关系。不同搜索引擎对缓存头的处理和支持情况不同,需要分别用各自的蜘蛛 UA 核查,不能用一个引擎的结果推断另一个。
下一步:挑一个你怀疑被缓存影响的 URL,用上面的 curl 命令分别带蜘蛛 UA 和普通 UA 请求一次,把两次的响应头和正文关键片段并排对比。如果两次结果不同,先改缓存规则;如果相同且都是旧内容,去查发布流程。