蜘蛛每天来多少次,并不等于它把站点走完了。很多站点日志里的抓取请求看起来不少,但唯一 URL 数长期停在某个水平,新增页面迟迟不出现在抓取记录里。想把这件事说清楚,需要一个可核对的口径:抓取覆盖率。
先定分母:哪些 URL 算“该被抓”
覆盖率的分母不能随手拿全站 URL 数。更稳妥的做法是先列出站点愿意被蜘蛛抓取的 URL 集合,再分层统计。
- 入口层:首页、栏目页、频道导航这类长期存在的页面。
- 内容层:文章、商品、详情等正文页面,通常是站点的主要内容载体。
- 辅助层:标签页、筛选页、分页,是否纳入分母取决于你是否希望它们被抓。
把这三层分开算,比混在一起算一个总数更有意义。内容层覆盖率高、辅助层低,和整体覆盖率 60% 是两种完全不同的状态。
日志里至少要读的四列
- 请求路径:确认 URL 是否规范化过,带参数和不带参数会被算成两条记录。
- 状态码:200、301、304、404、5xx 分开统计,304 偏多说明蜘蛛在重复访问同一批页面。
- 蜘蛛标识与时间:区分不同蜘蛛,按天看频次变化,而不是只看总量。
- 来源或抓取入口:有 referrer 记录时,可以看出这条请求是通过内链还是从 Sitemap 进来的。
覆盖率之外的三个观察点
覆盖率高不代表抓取健康,还要一起看:
- 抓取频次分布:如果首页和列表页占了绝大多数请求,深层页面只是偶尔被碰到,说明路径并不通畅。
- 状态码结构:5xx 和超时比例偏高时,蜘蛛通常会降低访问频率,覆盖率也会跟着下滑。
- 抓取深度:可以从入口页按内链层级估算,看蜘蛛实际走到的层级和站点结构是否匹配。
几个常见的误读
- 把 304 当成“没抓”:304 也是一次有效访问,只是内容未变。
- 只看总请求数:请求数上升可能只是同一批页面被反复抓。
- 把 Sitemap 提交量当成已抓取量:提交只是告知,不等于被抓。
发现死角之后,按这个顺序改
- 先修服务器侧问题:5xx、超时、TLS 握手失败优先,这些会直接影响蜘蛛的抓取节奏。
- 再修可达性:确认死角页面能从入口页经过少量内链点到,没有只能靠 JS 渲染才出现的链接。
- 然后修结构:把重要页面从深层目录或孤岛状态中拉出来,放进栏目页或相关推荐位。
- 最后补充发现通道:Sitemap 分片、RSS、提交接口各自承担一部分,互相不冲突。
覆盖率是结果指标,不是原因指标。它低下来时,要回到路径、状态码和服务器响应上找原因。
把这三层分母、四列日志和上面几个指标固定成一张表,按周看变化,比每次重新翻日志更容易发现趋势。真正的抓手往往不在“蜘蛛为什么不来”,而在“来了之后卡在哪一步”。