站点运营

站点运营:CDN 与缓存自查,别让蜘蛛拿到过期或错误的页面

源站更新了,蜘蛛从 CDN 边缘节点拿到的可能还是旧版本。本文梳理缓存时间、缓存键、回源兜底、边缘规则等常见偏差,并给出一套源站与节点对照的自查流程,帮运营确认蜘蛛看到的内容和自己以为的一致。

站点运营

站点运营:CDN 与缓存自查,别让蜘蛛拿到过期或错误的页面

做站点运营时,一个容易忽略的事实是:你在办公室打开页面看到的内容,和搜索蜘蛛从 CDN 边缘节点拿到的内容,可能并不是同一份。源站已经更新,边缘缓存还是旧的;或者回源失败,CDN 兜底返回了一份几小时前的副本。蜘蛛不会告诉你它看到了哪个版本,它只会按看到的内容做判断。

为什么会出现两个版本

CDN 的职责是就近分发,代价是内容多了一层副本。只要缓存键、缓存时间、回源策略三者中有一处和你的更新节奏对不上,就会出现蜘蛛与用户看到不同页面的情况。多数时候它不会报错,只是安静地返回旧内容,直到某天你发现新栏目迟迟没被收录,回头查才发现问题出在边缘层。

值得逐一确认的几个点

缓存时间是否跟得上更新节奏

列表页、首页这类更新频繁的页面,如果被设置了很长的边缘缓存时间,新发布的内容可能几个小时都进不了蜘蛛的视野。反过来,全站都设成几十秒,回源压力大,源站响应变慢,蜘蛛的抓取同样会被拖累。比较稳妥的做法是按页面类型分档,而不是一刀切。

回源失败时的兜底行为

源站短暂返回 5xx 时,有些配置会继续返回陈旧缓存。这对用户体验通常是好事,但蜘蛛可能因此长期拿不到更新的版本,也看不到真实的错误状态。需要提前明确:哪些路径允许兜底,兜底窗口最长多久,超出后返回什么。

缓存键是否包含影响内容的维度

如果缓存键忽略了语言、设备类型、地区等参数,不同版本会互相覆盖,蜘蛛抓到的可能是它并没有请求的那一版。这类问题在多语言站和做了移动端适配的站点上尤其常见,排查时容易被当成模板问题处理。

边缘规则是否误伤了 robots.txt 与 Sitemap

有些站点给静态文件设置了激进的缓存或访问控制,结果 robots.txt、sitemap.xml 返回了旧版本,甚至被直接拦截。这两个文件一旦失真,后续所有抓取判断都会跟着偏,而你在浏览器里刷新往往看不出异常。

是否对蜘蛛做了额外限速或拦截

安全防护、爬虫管理、地区限制等策略,有时会把搜索引擎的 IP 段一并算进去。表现是日志里蜘蛛访问量骤降,但源站本身并没有报错,监控面板也显示正常。

一次可执行的自查流程

  1. 准备对照样本:直接从源站取一次响应,再从 CDN 节点取一次,比较状态码、正文关键段落,以及 Age、Cache-Control、Last-Modified 等头部。
  2. 更换视角:用不同地区节点、不同 UA 各取一次,观察是否存在内容差异。
  3. 核对缓存键:确认参与缓存的维度,和页面实际发生变化的维度是否一致。
  4. 确认回源策略:把失败时的兜底逻辑和过期上限写成一句话,能写清楚就说明想清楚了。
  5. 翻两类日志:边缘日志看命中率与状态分布,源站日志看真实回源请求,两边对照着看。
  6. 单独验证特殊文件:robots.txt、sitemap、主要栏目页,最好各取一次现场快照。

调整时的几个原则

  • 按页面类型分档设置缓存时间,首页、列表页、详情页、静态资源区别对待。
  • 内容发布、修改、删除时主动刷新对应 URL,不要只依赖到期失效。
  • 回源失败时避免长期返回 200 的旧内容,兜底窗口尽量短,并在日志中留痕。
  • robots.txt 与 Sitemap 保持短缓存或不走边缘缓存。
  • 一次只改动一个变量,改完留出观察期,再决定下一步。
CDN 与缓存自查的目的,不是让蜘蛛抓得更多,而是让蜘蛛看到的内容和你以为它看到的一致。一致性是后续结构优化、内容更新、内链调整的前提。

调整后观察什么

可以关注几项信号:栏目页新内容的出现时间是否提前、边缘命中率是否稳定、源站 5xx 是否明显增加、蜘蛛抓取频次与状态码分布是否回归常态。这些指标比起伏不定的排名更能说明问题出在哪一层。

如果条件允许,把“源站与边缘节点对照取样”做成一个固定动作,在每次内容结构调整或缓存策略变更后执行一次。它花不了太多时间,却能省下大量事后排查的成本。