蜘蛛池知识

蜘蛛池入口頁的缓存與 CDN:缓存命中、回源和過期時間怎么影响抓取

蜘蛛池入口頁接入 CDN 或缓存後,蜘蛛拿到的可能是缓存副本而不是源站内容。本文說明缓存命中、回源频率、過期時間與缓存头對抓取的實际影响,哪些入口頁适合缓存、哪些應该放行回源,並给出可操作的观察與排查思路。

蜘蛛池知识

蜘蛛池入口頁的缓存與 CDN:缓存命中、回源和過期時間怎么影响抓取

蜘蛛池入口頁的主要任務是让搜尋引擎蜘蛛稳定到達、正常解析,並沿着連結繼續往下走。很多站点為了扛住抓取压力,會在入口頁前面加一层 CDN 或缓存。缓存本身没有好坏,但它會改變蜘蛛實际拿到的東西,所以需要單獨拿出来说清楚。

缓存命中的时候,蜘蛛拿到的是什么

当入口頁命中缓存,蜘蛛請求到達 CDN 邊缘节点就直接返回,源站可能完全没有收到這次請求。带来两個直接结果:

  • 响應更快,首字节時間明顯缩短,蜘蛛在同样的時間窗口内可以抓更多 URL。
  • 源站日誌里看不到這次抓取,容易誤判成“蜘蛛没来”或者“抓取量下降”。

更需要注意的是内容一致性。如果缓存副本是舊版本,蜘蛛解析到的标题、正文、連結都可能和目前源站不同。入口頁承担的是引導作用,連結一旦對不上,後續跟進就會偏。

哪些缓存配置容易出問题

把 HTML 当静態资源長期缓存

部分 CDN 的預設策略對 .html 和無扩展名路径也會缓存。入口頁如果被長時間缓存又没有主動刷新,蜘蛛看到的就是一份“冻结”的頁面。改版、換連結、調整结构之後,蜘蛛仍然按老版本走。

忽略 Vary 头

入口頁如果同时存在 PC 和移動两套輸出,又没有正确声明 Vary,缓存就可能把移動版返回给桌面蜘蛛,或者反過来。结果是蜘蛛抓到的版本和你想让它抓的版本不一致。

過期時間與缓存头互相打架

Cache-Control 的 max-age、Expires、Last-Modified、ETag 如果設定相互矛盾,不同 CDN 节点的行為可能不一样。入口頁在不同地区被抓到的内容因此出現差异,排查时會很难定位。

回源频率和蜘蛛抓取不是一回事

缓存命中率升高,回源請求會變少,但這並不代表蜘蛛不来了。回源日誌只是源站能看到的那部分抓取,被缓存层挡掉的抓取不在里面。

所以用回源日誌統計抓取量时,需要把缓存這一层算進去,否則很容易得出“抓取量下滑”的错誤结论。反過来,如果入口頁刻意不缓存,蜘蛛每次請求都打到源站,服務器压力會直接上升,抓取高峰时更容易出現超时。

入口頁缓存的取舍建议

  1. 入口頁内容相對稳定、更新不频繁的,可以缓存,但過期時間不宜太長,建议控制在几小时到一天,並且更新後主動刷新。
  2. 需要频繁調整連結结构、做對照观察的入口頁,不建议深度缓存,或者把缓存時間设得很短。
  3. 涉及登入態、個性化輸出、按 UA 分流的入口頁,尽量不要缓存,或者把 Vary 声明清楚。
  4. 目标頁如果是動態内容,缓存策略要和入口頁分開考虑,不建议一套規則套全站。

怎么观察和排查

  • 用普通 UA 和蜘蛛 UA 實际請求入口頁,對比返回内容和源站是否一致。
  • 查看响應头里的 Cache-Control、Age、X-Cache 等字段,判断這次是否命中缓存。
  • 在 CDN 後台查看入口頁的缓存命中率和回源量,與源站日誌交叉比對。
  • 更新入口頁後,確認缓存是否已经刷新,再观察蜘蛛是否抓到新版本。

缓存是入口頁运维里容易被忽略的一环。把缓存策略、過期時間和内容一致性管清楚,蜘蛛拿到的版本才和你想让它看到的一致,後續的連結跟進也才有意义。