很多站点运营者关心的是收录了多少,但在这之前还有一个更基础的指标:搜索蜘蛛到底把你站点上的哪些 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 有没有拦、服务器错误码有没有涨。
- 改动后再观察一到两周,看差集有没有缩小。
最后提醒一句,抓取覆盖是结果,不是可以单独拨动的开关。真正能改变它的,还是站点结构、内链设计、更新节奏和服务稳定性这些基础工作。