做站点运营时,一個容易忽略的事實是:你在办公室打開頁面看到的内容,和搜尋蜘蛛從 CDN 邊缘节点拿到的内容,可能並不是同一份。源站已经更新,邊缘缓存還是舊的;或者回源失敗,CDN 兜底返回了一份几小时前的副本。蜘蛛不會告诉你它看到了哪個版本,它只會按看到的内容做判断。
為什么會出現两個版本
CDN 的职责是就近分發,代價是内容多了一层副本。只要缓存键、缓存時間、回源策略三者中有一處和你的更新节奏對不上,就會出現蜘蛛與用戶看到不同頁面的情况。多數时候它不會报错,只是安静地返回舊内容,直到某天你發現新栏目迟迟没被收錄,回头查才發現問题出在邊缘层。
值得逐一確認的几個点
缓存時間是否跟得上更新节奏
列表頁、首頁這類更新频繁的頁面,如果被設定了很長的邊缘缓存時間,新發布的内容可能几個小时都進不了蜘蛛的视野。反過来,全站都设成几十秒,回源压力大,源站响應變慢,蜘蛛的抓取同样會被拖累。比較稳妥的做法是按頁面類型分档,而不是一刀切。
回源失敗时的兜底行為
源站短暂返回 5xx 时,有些配置會繼續返回陈舊缓存。這對用戶体驗通常是好事,但蜘蛛可能因此長期拿不到更新的版本,也看不到真實的错誤狀態。需要提前明确:哪些路径允许兜底,兜底窗口最長多久,超出後返回什么。
缓存键是否包含影响内容的维度
如果缓存键忽略了語言、设备類型、地区等參數,不同版本會互相覆盖,蜘蛛抓到的可能是它並没有請求的那一版。這類問题在多語言站和做了移動端适配的站点上尤其常见,排查时容易被当成模板問题處理。
邊缘規則是否誤伤了 robots.txt 與 Sitemap
有些站点给静態文件設定了激進的缓存或訪問控制,结果 robots.txt、sitemap.xml 返回了舊版本,甚至被直接拦截。這两個文件一旦失真,後續所有抓取判断都會跟着偏,而你在浏览器里刷新往往看不出異常。
是否對蜘蛛做了額外限速或拦截
安全防護、爬虫管理、地区限制等策略,有时會把搜尋引擎的 IP 段一並算進去。表現是日誌里蜘蛛訪問量骤降,但源站本身並没有报错,监控面板也顯示正常。
一次可执行的自查流程
- 准备對照样本:直接從源站取一次响應,再從 CDN 节点取一次,比較狀態碼、正文關键段落,以及 Age、Cache-Control、Last-Modified 等头部。
- 更換视角:用不同地区节点、不同 UA 各取一次,观察是否存在内容差异。
- 核對缓存键:確認參與缓存的维度,和頁面實际發生變化的维度是否一致。
- 確認回源策略:把失敗时的兜底逻辑和過期上限寫成一句话,能寫清楚就說明想清楚了。
- 翻两類日誌:邊缘日誌看命中率與狀態分布,源站日誌看真實回源請求,两邊對照着看。
- 單獨驗證特殊文件:robots.txt、sitemap、主要栏目頁,最好各取一次現场快照。
調整时的几個原則
- 按頁面類型分档設定缓存時間,首頁、列表頁、詳情頁、静態资源区別對待。
- 内容發布、修改、刪除时主動刷新對應 URL,不要只依赖到期失效。
- 回源失敗时避免長期返回 200 的舊内容,兜底窗口尽量短,並在日誌中留痕。
- robots.txt 與 Sitemap 保持短缓存或不走邊缘缓存。
- 一次只改動一個變量,改完留出观察期,再决定下一步。
CDN 與缓存自查的目的,不是让蜘蛛抓得更多,而是让蜘蛛看到的内容和你以為它看到的一致。一致性是後續结构優化、内容更新、内鏈調整的前提。
調整後观察什么
可以關注几項信号:栏目頁新内容的出現時間是否提前、邊缘命中率是否稳定、源站 5xx 是否明顯增加、蜘蛛抓取频次與狀態碼分布是否回归常態。這些指标比起伏不定的排名更能說明問题出在哪一层。
如果條件允许,把“源站與邊缘节点對照取样”做成一個固定動作,在每次内容结构調整或缓存策略變更後执行一次。它花不了太多時間,却能省下大量事後排查的成本。