先给结论:缓存造成的“假象”通常有两种,一是你看到的页面是旧版本,二是抓取工具或搜索引擎返回的是缓存副本。排除时不要凭肉眼刷新判断,要用带时间戳的证据比对:请求头、响应体哈希、抓取日志和索引状态分开看,确认到底是页面没更新,还是收录状态被缓存掩盖。
“网站不收录”在缓存语境下常被混为一谈。需要拆成两个对象:
判断方法:用 curl -I 查看响应头中的 Age、Cache-Control、Last-Modified、ETag;再用 curl -s 取正文并与源文件做哈希比对。若 Age 很大且正文哈希与源文件不同,说明中间缓存层在返回旧内容。这一步只能证明“你拿到的是旧副本”,不能直接证明搜索引擎因此不收录。
排除缓存假象的关键是让每次检查都可复现。建议按下面顺序执行:
适用条件:你能接触源站日志或至少能发起带自定义请求头的抓取。判断结果:如果抓取日志显示返回 200 且正文哈希与源文件一致,但索引仍未出现,缓存就不是主因,应转向内容质量、重复页面或抓取预算等方向。
robots.txt 的抓取限制不等于可靠的索引移除。即使某条规则挡住了抓取,已经建立的索引也可能保留一段时间;反过来,放开抓取也不保证马上收录。站点地图只提交 URL 线索,不保证收录。HTTPS 是传输层保护,不保证页面无漏洞,也不保证排名。把这三项当成“收录开关”会掩盖真正原因。
检查项:确认 robots.txt 没有误封目标目录;确认站点地图中的 URL 返回 200 且可被抓取;确认 HTTPS 证书链完整、没有混合内容。以上都通过后,仍要回到抓取日志和索引状态,而不是直接断定“缓存导致不收录”。
如果怀疑 CDN、反向代理或页面缓存插件造成旧副本,逐项核对:
Cache-Control: max-age 且值过大。Age 是否接近或超过 max-age,说明命中了缓存。Vary 是否按 User-Agent 或 Cookie 分片,导致不同抓取者看到不同版本。假设示例:某页面源文件哈希为 A,连续三次请求返回哈希 B、B、A,且响应头 Age 分别为 600、580、0。这说明缓存层在部分节点返回旧副本,回源后恢复。此时应检查缓存刷新策略和节点一致性,而不是继续修改页面内容。
完成上述比对后,你会得到三种结果之一:抓取拿到旧副本、抓取拿到新副本但索引未更新、抓取本身失败。只有第一种与缓存直接相关。下一步是针对缓存层设置合理的刷新规则并复测哈希;若是第二种,转向索引状态和内容信号;若是第三种,先解决抓取失败。每次修改后保留请求头、正文哈希和抓取日志三样证据,才能判断“网站不收录”是否真的由缓存假象造成。