為什么 CDN 會让抓取结果變得不稳定
站点接入 CDN 之後,用戶和搜尋引擎蜘蛛看到的頁面不再由同一台服務器直接生成。請求會先落到就近的邊缘节点,命中缓存就直接返回,未命中才回到源站。這個過程中任何一环配置不一致,都可能让蜘蛛在不同時間、不同节点拿到不一样的 HTML:有的是新版本,有的是几天前的舊版本,有的干脆是错誤頁。
對蜘蛛来说,同一個 URL 返回差异過大的内容,轻則造成重复抓取、浪費抓取配額,重則让蜘蛛對頁面判断出現偏差。下面這些点值得定期自查。
常见的不一致来源
缓存時間與更新节奏不匹配
如果 HTML 的缓存時間設定為几天甚至几周,而站点每天更新,蜘蛛很可能一直拿到舊版本。首頁、栏目頁這類更新频繁的頁面,缓存時間應明顯短于普通内容頁;反過来,图片、样式表這類带指纹的静態资源,長缓存反而更合适。
缓存了不该缓存的响應
- 把 404、410 頁面缓存下来,源站已经恢复,邊缘节点還在返回舊的错誤頁。
- 把 5xx 或超时頁面缓存住,形成“幽灵宕机”,蜘蛛反复来訪都吃閉门羹。
- 带參數的 URL 未做規范化處理,每個參數组合各缓存一份,凭空多出大量相似頁面。
回源被拦截或指向错誤
回源請求要经過源站的防火墙、WAF 或安全组。如果規則只放行了普通訪客,而 CDN 官方公布的回源 IP 段没有加白,就會出現部分节点正常、部分节点报错的情况。改版換服務器後忘了更新回源地址,也會让蜘蛛抓到舊站内容。
按 UA 做差异化處理
按訪客類型返回不同内容本身就有風險。如果對蜘蛛單獨放行完整版、對普通用戶返回简化頁,很容易被判定為作弊,得不偿失。
一份可执行的自查清單
- 對比直连與走 CDN 的响應:先绑定源站 IP 直接請求,再通過域名請求,比較狀態碼、正文主体和關键字段是否一致。
- 看响應头:Age、X-Cache 一類字段能說明這次是命中還是回源,Age 過大意味着缓存偏舊。
- 多节点驗證:借助多地区測試工具,從不同地域發起請求,確認返回内容没有区域性差异。
- 检查回源白名單:把 CDN 官方公布的回源 IP 段加入源站放行列表,並定期核對更新。
- 確認没有屏蔽蜘蛛 UA:部分防護策略預設拦截非浏览器 UA,需要顯式放行主流搜尋引擎。
- 核對缓存規則:HTML 短缓存或不缓存,静態资源長缓存,错誤頁設定較短缓存並避免長期驻留。
- 检查 HTML 改寫:有些产品會做頁面優化、脚本注入,確認這些改動不會影响正文和連結的可讀性。
更新内容後的收尾動作
發布重要更新後,主動刷新相關 URL 的缓存,再確認邊缘节点已经返回新版本。若站点使用了多层缓存或同时接入多家 CDN,注意逐层刷新,別只刷了最外层,里层仍是舊内容。
最後提醒一点:CDN 日誌和源站日誌最好一起看。只看其中一份,容易把“邊缘命中舊缓存”誤判成“蜘蛛根本不来抓”,進而做出错誤的調整方向。