入口页接入 CDN 是很常见的做法,能降低源站压力、加快响应。但不少运营者会遇到一种情况:明明已经在源站给入口页加了新的目标 URL,搜索蜘蛛却像没看到一样。这往往不是链接本身有问题,而是搜索蜘蛛拿到的是 CDN 缓存的旧版 HTML。
搜索蜘蛛只会看到它拿到的那份 HTML
搜索蜘蛛本质上是普通的 HTTP 客户端,它请求入口页时,得到什么响应体就解析什么链接。如果请求命中了 CDN 边缘节点缓存,节点会直接返回缓存副本而不回源,源站上新加的链接就不会出现在这次响应里。也就是说,URL 发现的起点是响应内容,而不是源站文件。
怎么判断是不是缓存导致的
- 用带搜索蜘蛛 UA 的请求直接访问入口页 URL,查看返回的 HTML 里是否包含新链接。
- 观察响应头里的缓存标识,例如 Age、X-Cache: HIT/MISS、CF-Cache-Status 等,判断这次请求是否走了缓存。
- 对比 CDN 域名与源站直连返回的 HTML,如果两者不一致,基本可以确认是缓存版本陈旧。
- 在源站访问日志里筛选搜索蜘蛛的 UA,如果长时间没有回源记录,说明请求大多被边缘节点消化了。
比较稳妥的处理方式
- 给入口页 HTML 设置较短的缓存时间,例如几分钟到十几分钟;静态资源可以单独设置较长缓存,两者分开配置。
- 更新入口页后主动刷新 CDN 缓存,多节点部署时注意刷新范围,避免只刷新了个别节点。
- 如果入口页内容更新频繁,可以考虑对 HTML 关闭缓存,或设置成需要回源校验的模式。
- 链接变更后,把 URL 提交接口或 sitemap 作为补充渠道,让发现不只依赖入口页这一次响应。
几个容易踩的坑
第一,为了绕过缓存给入口页 URL 加随机参数,会制造出大量内容相同的地址,反而不利于抓取效率。第二,缓存副本里可能还留着已经删除的链接,搜索蜘蛛抓到后得到 404,白白消耗抓取配额。第三,多地 CDN 节点缓存刷新时间不一致,可能出现不同地区的搜索蜘蛛看到不同版本入口页的情况,排查时要多节点对比,不要只看一次请求的结果。
入口页的更新能否被发现,取决于搜索蜘蛛那次请求实际拿到的 HTML。缓存策略、刷新动作和日志核对这三件事配合好,URL 发现的节奏才相对稳定。
日常检查清单
- 入口页 HTML 的缓存时长是否与更新频率匹配
- 更新后是否执行了缓存刷新,并用带蜘蛛 UA 的请求复核过
- 响应头里的缓存状态是否正常,是否长期 HIT 不回源
- 缓存副本中是否残留已经失效的链接
- 源站日志里搜索蜘蛛的回源是否规律