常见問题

入口頁被缓存返回舊 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 能否正常返回内容。