很多站点在前面加了 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 和服務器本身的狀態。這几层是叠加的,不要指望只調好一個环节就萬事大吉。