很多站点在前面加了 CDN 之后,源站压力小了,访问速度也稳定了,但抓取层面会出现一些新情况:同一篇文章,你在浏览器里看到的是新版,蜘蛛拿到的却可能是几小时前的旧 HTML;或者你从公司网络访问一切正常,蜘蛛从另一个节点回源时却被拦了。CDN 本身不改变抓取的规则,它只是把服务器返回什么这件事拆成了多份,每一份都可能不一样。
蜘蛛走 CDN 时的完整链路
一次抓取大致经过:DNS 解析到某个边缘节点,节点检查缓存,命中就直接返回,未命中则回源,源站返回内容,节点按缓存策略存储并返回给蜘蛛。任何一个环节的差异,都会让蜘蛛看到的东西和你预期的不同。要注意的是,搜索引擎通常有自己的 IP 段,这些 IP 在 CDN 上可能被单独分组处理,命中率和回源策略未必和普通用户一致。
三类常见的不一致
1. 缓存陈旧:改版后蜘蛛仍拿到旧页面
页面更新后,如果 CDN 缓存没被刷新,蜘蛛可能连续几次抓取都拿到旧版本。对于内容站来说,这会让蜘蛛误以为页面没有变化,从而降低再抓取的频率。建议在发布流程里把刷新缓存当作必要步骤,尤其是首页、栏目页和刚发布的内容页。
2. 节点差异:不同边缘返回不同内容
有些站点根据访问者地区返回不同语言或不同价格,CDN 按地域分流后,蜘蛛从不同节点拿到的 HTML 可能完全不同。如果差异只体现在价格或推荐位,问题不大;如果连正文、标题、canonical 都不一样,蜘蛛就会把它当成多个页面处理。建议对搜索蜘蛛固定返回一个主版本,把地区差异放到前端或单独的 URL 上。
3. 安全层误伤:WAF、频控把蜘蛛挡在门外
CDN 上常见的防护规则会按请求频率、User-Agent、请求头特征做拦截。蜘蛛抓取时往往短时间集中请求,如果规则设置得比较激进,可能出现 403、429 甚至验证页。表现是抓取量突然下降,而你从浏览器访问一切正常。建议在防护规则里为已知的搜索蜘蛛放行,并定期核对。
怎么确认问题出在 CDN
- 对比源站直连和 CDN 域名的返回:用 curl 分别请求源站 IP 和 CDN 域名,比较状态码、正文长度和关键字段。
- 指定节点测试:把域名解析到某个具体边缘 IP 再请求,看不同节点返回是否一致。
- 查看缓存命中情况:CDN 日志里的缓存状态(如 HIT、MISS、EXPIRED)能说明蜘蛛那次抓取是命中还是回源。
- 核对抓取日志:看蜘蛛请求的时间和源站日志里对应的时间是否吻合,如果大量命中缓存,源站日志里就不会出现这些请求。
日常要怎么处理
- 发布后主动刷新相关 URL 的缓存,不要只等缓存自然过期。
- 对蜘蛛返回稳定的主版本,地理位置差异尽量用独立 URL 表达。
- 把 CDN 的防护规则和 robots.txt 一起纳入变更检查清单,改规则前先确认蜘蛛不受影响。
- 监控抓取量变化,抓取量骤降时先排查 CDN 层,再看源站。
CDN 让抓取链路变长,也让排查变复杂。遇到蜘蛛看到的不对,先判断是缓存、节点差异还是拦截,再动手,比直接改源站要省事得多。
最后提醒一句,CDN 层的问题解决之后,页面能不能被稳定抓取,还要看内链、Sitemap 和服务器本身的状态。这几层是叠加的,不要指望只调好一个环节就万事大吉。