很多站点运营者關心的是收錄了多少,但在這之前還有一個更基础的指标:搜尋蜘蛛到底把你站点上的哪些 URL 抓走了。抓取是後續動作的前置條件,覆盖面上不去,後面的工作都难以展開。
什么算抓取覆盖率
简單说,一個統計周期内被搜尋蜘蛛實际請求過的 URL 數量,除以你希望被看到的 URL 總量。分子来自服務器日誌,分母来自你自己的 URL 清單。两個數字都不难拿,难的是口径要對齐。
分子的口径是:按 UA 识別出各搜尋引擎的蜘蛛,去掉 CSS、JS、图片、字体等静態资源請求,去掉非 HTML 的接口請求,剩下的 HTML 請求再去重才算 URL 數。分母的口径是:Sitemap 中提交的 URL、内容库中已發布的頁面,再加上内鏈能走到的栏目頁和列表頁。
三步把日誌整理成可用資料
第一步:按 UA 和狀態碼切分
先把蜘蛛流量單獨拆出来,再看狀態碼分布。200 表示拿到了内容;304 表示内容未變,是正常且省资源的表現,不要当成没抓;301 和 302 要看看跳轉目标是不是自己;404 和 410 要核對是否還有内鏈或 Sitemap 在引用;5xx 要優先處理,服務器持續报错而蜘蛛還在抓,通常會让它放慢频率。
第二步:做 URL 归一化
同一個頁面常常有多種寫法:带 www 和不带、大小寫不同、带不带结尾斜杠、附带一堆排序參數。統計前先归一化,否則覆盖率容易被虚高,也不容易看出問题。常见做法是去掉 utm 之類的跟踪參數,统一大小寫,再按站点規范确定是否保留结尾斜杠。
第三步:與 Sitemap 和内容库對照
把归一化後的抓取 URL 集合,和 Sitemap 中的 URL 集合做一次差集。差集里剩下的是提交了却還没被抓的部分,它們往往集中在站点深處、由參數生成的頁面,或者近期新增的頁面。
覆盖率偏低,先查這几處
- 入口太少:頁面只靠 Sitemap 提交,没有一條從首頁或栏目頁出發的内鏈路径,蜘蛛很难自己走到。
- 层級太深:從首頁到目标頁要经過四五层列表,抓取预算先被中間层消耗掉。
- 路径被拦:robots.txt、防火墙或 CDN 規則誤伤了蜘蛛,日誌里會表現為整段路径完全没有請求记錄。
- 内容重复:同一批内容通過不同參數组合生成大量 URL,蜘蛛在重复頁面之間来回抓,真正有價值的頁面被挤到後面。
- 服務不稳:超时和 5xx 频繁出現时,蜘蛛會自動降低抓取频率,覆盖面的恢复需要一段時間。
- 渲染成本高:依赖 JS 渲染的内容如果首屏没有關键連結,蜘蛛拿到的可能是一個接近空白的頁面。
看覆盖率时要避開的几個誤区
覆盖率不是越高越好,也不是越低越差,關键是重要的 URL 有没有被及时抓走。
第一,不要把全站 URL 都当成目标。篩選參數頁、站内搜尋结果頁、重复的排序頁本身就不需要被抓,排除它們,分母才真實。第二,不要只看一天日誌。抓取存在波動,用一到两周的窗口更稳。第三,不要忽略回訪。一個 URL 被抓過一次之後,内容更新了却没被重新抓取,從运营角度看它仍然没跟上。第四,样本要够。日誌量大的站点可以按小时抽样,但要覆盖工作日與周末,也要覆盖更新和未更新的时段。
把检查變成固定動作
- 每月導出一份 Sitemap URL 清單和一份日誌抽样。
- 按上面的口径归一化,算出覆盖率並记錄环比變化。
- 把提交未抓的 URL 按栏目分组,優先看核心栏目。
- 核對内鏈有没有断、robots 有没有拦、服務器错誤碼有没有涨。
- 改動後再观察一到两周,看差集有没有缩小。
最後提醒一句,抓取覆盖是结果,不是可以單獨拨動的開關。真正能改變它的,還是站点结构、内鏈设計、更新节奏和服務稳定性這些基础工作。