常见问题

入口页被缓存返回旧 HTML,搜索蜘蛛拿到的还是老链接,怎么排查

入口页换了新链接,日志里却看不到搜索蜘蛛去抓新的目标 URL,很多时候不是蜘蛛池失效,而是 CDN、反向代理或页面缓存插件返回了旧版 HTML。本文讲怎么判断蜘蛛实际拿到的是哪个版本、缓存响应头怎么看、缓存时间怎么设,以及更新链接后应该按什么顺序操作。

常见问题

入口页被缓存返回旧 HTML,搜索蜘蛛拿到的还是老链接,怎么排查

蜘蛛池入口页更新了链接,日志里却看不到搜索蜘蛛来抓新的目标 URL,不少人第一反应是入口页被惩罚或者蜘蛛池失效。实际上有一类很常见的原因被忽略了:搜索蜘蛛拿到的还是缓存里的旧 HTML。

为什么搜索蜘蛛看到的可能是旧版本

入口页前面通常不止一层:源站服务器、CDN、反向代理、对象存储,有的还挂着页面缓存插件。任意一层命中缓存,返回的都是当时生成的 HTML,里面的链接列表可能是几小时甚至几天前的版本。

搜索蜘蛛和普通访客走的是同一套 HTTP 链路,它并不会主动绕过缓存去读源站。如果某个 CDN 节点缓存了旧页面,恰好蜘蛛的请求落到那个节点,它看到的就是旧链接。这也是为什么同一时间用不同线路去测,结果可能完全不一样。

怎么确认搜索蜘蛛拿到的是旧 HTML

  1. 用站外抓取模拟工具请求入口页,看返回的 HTML 里有没有新链接,请求时尽量带接近搜索蜘蛛的 User-Agent。
  2. 查看响应头里的缓存字段,比如 AgeCache-ControlX-CacheCF-Cache-StatusX-Cache-Hits,出现 HIT 基本就说明命中了缓存。
  3. 多换几个节点或地区测试,缓存本身是分布式的,单点测试可能刚好命中新版本,容易误判。
  4. 直接把源站返回的 HTML 和 CDN 返回的 HTML 做差异比对,能最快看出链接列表是否一致。

缓存策略怎么设更合适

入口页本质是链接聚合页,更新频率取决于你的运营节奏。如果它缓存 24 小时,那么链接更新后最长要等一天才可能被搜索蜘蛛看到。

  • 入口页的 Cache-Control 可以设较短的 max-age,或者用 s-maxage 单独控制 CDN 层的缓存时间。
  • 更新链接后主动做一次缓存刷新,不要只依赖自然过期。
  • 如果入口页对所有访客内容一致,可以缓存;如果带有会话、地域等个性化内容,要确认缓存键设置正确,避免不同版本串页。
  • 不要为了“让搜索蜘蛛看到最新内容”而把缓存全关掉,源站压力上来后响应变慢,反而影响抓取。

更新链接后的操作顺序

  1. 先在源站确认新 HTML 已经发布,链接格式本身没问题。
  2. 刷新 CDN 和反向代理的缓存,等几分钟后复测响应头,确认 Age 归零或缓存状态不再是 HIT。
  3. 用抓取模拟工具确认返回的 HTML 里确实包含新链接。
  4. 确认无误后,再考虑提交或其他入口页的补充动作。

几个容易踩的坑

  • 只刷新了首页缓存,忘了入口页所在的具体路径。
  • 浏览器里看到的是新版本,因为浏览器自己也有本地缓存,不代表搜索蜘蛛看到的一样。
  • 用带查询参数的 URL 测试,命中了不同的缓存键,误以为没有缓存问题。
  • 缓存刷新后立刻大规模重复提交,抓取预算被无效请求占用。
缓存问题说到底属于配置问题,不是“蜘蛛池有没有用”的问题。先确认搜索蜘蛛实际拿到的是什么,再决定要不要调整入口页策略。

把缓存链路理清楚之后,入口页更新和 URL 发现之间的时间差会变得可预期。真正值得长期花精力的,是入口页本身是否稳定、链接是否清晰,以及目标 URL 能否正常返回内容。