蜘蛛从一个已知 URL 出发,沿着页面上的链接向外走。它先到哪个页面、多久回访一次,很大程度上取决于这个页面距离入口有多少层链接。这个层数通常被称为点击距离或抓取距离。它不是硬性的规则,但会实实在在影响页面被发现的先后顺序。
抓取距离是怎么算出来的
最简单的算法:从首页开始,点几下能到目标页面。首页算第 0 层,导航直接指向的栏目算第 1 层,栏目里的列表指向的文章算第 2 层,依次类推。蜘蛛没有站点全貌,它靠链接一层层爬,这个层数就是它理解站点结构的顺序。
实际计算时要注意几点:
- 从已被抓取的任一入口算起都有效,不限于首页
- JS 渲染后才出现的链接,对蜘蛛来说距离会变长
- 同一个页面有多条路径时,取最短的那条
层级太深的常见表现
内容层级深,问题往往不是完全抓不到,而是被抓得太晚、太稀疏。
- 新发布的页面几天甚至更久没有出现在日志里
- 老内页更新后,蜘蛛迟迟不回访,看到的还是旧版本
- 抓取请求大量落在中间层列表页,真正的内容页被挤到后面
- 同类页面之间没有互链,只能靠列表页维持连接,一旦列表改版就断了路径
把抓取预算看成有限的访问次数,路径越绕,花在中间环节的次数就越多。
把重要页面的层级压下来
不需要把全站压平,但核心内容应该有几条短路径。
- 主导航和二级分类保持稳定,不要频繁调整位置
- 首页保留数量克制、指向明确的一级入口
- 正文里的相关文章、上下篇、同主题推荐,是缩短距离最直接的手段
- 面包屑既给向上路径,也可以横向指向同级分类
下拉菜单、悬浮导航、需要点击才展开的模块,如果链接只在交互后才写入 DOM,蜘蛛看到的距离会比用户感觉的长。
深层页面也不能只靠 Sitemap
Sitemap 能提供入口,但它更像一份清单,不负责说明页面之间的关系和重要性。深层页面的发现,通常要多种方式叠加:
- 在相关内容的正文里自然链出
- 由同主题的聚合页或标签页收拢
- 通过上下篇、系列文章形成链式路径
- Sitemap 兜底,避免遗漏
层级不是越平越好
把所有页面都塞到首页链接里,首页链接数量会迅速膨胀,单条链接能分到的关注度反而下降。适度的分层能让同主题页面彼此靠近,也让蜘蛛在抓一个栏目时顺便覆盖到相关内容。对多数站点来说,核心内容控制在三跳以内可达,是一个现实的目标。
怎么验证抓取距离
- 按目录统计日志里蜘蛛的访问次数,看深层目录是否长期偏低
- 记录新页面上线到第一次被抓的时间,对比不同层级
- 检查列表页翻页、筛选参数是否制造了大量中间层 URL
- 手动从首页出发点击,看看能不能走到最重要的那几个页面
抓取距离不是一次性配置,而是随栏目调整、模板改版不断变化的东西。发布新内容时顺手想一想:这个页面从哪个已有页面点得到,路径有多长,往往比事后反复提交更有效。