搜索抓取

抓取覆盖率:蜘蛛到底把你站点的哪些 URL 抓走了

收录之前还有一个更基础的指标:搜索蜘蛛实际请求过你站点的哪些 URL。本文讲清抓取覆盖率的分子分母怎么定,如何用日志抽样与 Sitemap 做差集,以及覆盖率偏低时该优先排查的几处问题。

搜索抓取

抓取覆盖率:蜘蛛到底把你站点的哪些 URL 抓走了

很多站点运营者关心的是收录了多少,但在这之前还有一个更基础的指标:搜索蜘蛛到底把你站点上的哪些 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 被抓过一次之后,内容更新了却没被重新抓取,从运营角度看它仍然没跟上。第四,样本要够。日志量大的站点可以按小时抽样,但要覆盖工作日与周末,也要覆盖更新和未更新的时段。

把检查变成固定动作

  1. 每月导出一份 Sitemap URL 清单和一份日志抽样。
  2. 按上面的口径归一化,算出覆盖率并记录环比变化。
  3. 把提交未抓的 URL 按栏目分组,优先看核心栏目。
  4. 核对内链有没有断、robots 有没有拦、服务器错误码有没有涨。
  5. 改动后再观察一到两周,看差集有没有缩小。

最后提醒一句,抓取覆盖是结果,不是可以单独拨动的开关。真正能改变它的,还是站点结构、内链设计、更新节奏和服务稳定性这些基础工作。