很多人看抓取数据只看总量,忽略了另一个维度:蜘蛛抓到的页面,大多停在离入口几跳的位置。抓取深度决定了站点里哪些部分长期处于阴影中——不是被禁止,而是根本没被走到。
跳数是什么,为什么它比“层级”更贴近现实
目录层级是文件系统的概念,跳数是从入口页出发,经过几次链接点击才到达。两者经常不一致:一个 /a/b/c/d/ 形式的 URL 可能首页直接链过去,只有一跳;一个浅目录页面可能藏在三级导航里,要四跳才摸到。
蜘蛛对每个站点的抓取额度有限,越往深处走,单位收益越低,所以它会优先把额度花在容易回访、更新频繁、入口多的页面上。
深度是怎么被消耗掉的
- 导航和面包屑只覆盖到中间层,最底层页面只能靠列表页往下带;
- 列表分页到某个位置断了链接,后面的内容自然没人走;
- 重要页面只出现在某个交互展开后才生成的链接里;
- 深层页面之间没有横向互链,彼此都是死胡同。
Sitemap 能补深度,但补不了全部
Sitemap 提供的是“这个 URL 存在”这条信息,可以缩短发现时间,但它不改变蜘蛛对页面重要性的判断。把一个孤立的深层页塞进 Sitemap,蜘蛛可能来一次,之后因为没有任何内链指向它,回访频率会很低。
把 Sitemap 当成兜底,而不是主干。主干仍然是可点击、可延续的内链路径。
服务器在深度抓取里扮演的角色
深层页面的抓取往往排在队列后面,这意味着它们更容易撞上服务器状态不佳的时段。间歇性的 5xx、响应时间忽长忽短,会让蜘蛛在下一次调度时更保守:先抓浅层、高频更新的页面,深层页面被推后甚至暂时搁置。
所以服务器稳定性对抓取的影响并不均匀,浅层页面容忍度高,深层页面最吃亏。如果你发现日志里深层 URL 的抓取间隔越来越长,先看看那段时间的响应码分布。
怎么判断深度出了问题
- 按跳数给日志里的 URL 分组,看每个深度段的抓取量占比;
- 找出“有 Sitemap 记录、有内容更新、但没有内链指向”的页面;
- 检查深层页面的抓取状态码,是否集中在 5xx 或超时;
- 观察同一深度的页面之间,抓取次数差异有多大。
几个不费力的调整
- 把重要但深的内容,在上一层页面上给一个固定的文字入口;
- 同类深层页面互相链接,形成一条可延续的路径,而不是各自孤岛;
- 列表翻页保留可抓取的链接,别只留“加载更多”按钮;
- Sitemap 里保留这些页面,但不要把它的存在当成唯一入口;
- 服务器告警别只看首页可用性,深层路径的响应时间也要盯。
深度不是越低越好,而是不要让重要的东西掉在没有路的地方。蜘蛛走的路,本质上是用户点得到的路。