蜘蛛进入一个站点,靠的不是一张完整的地图,而是不断从一个 URL 走到下一个 URL。多数人关注“有多少页面”,但真正决定蜘蛛能走多深的,是路径上有没有断点。一条内链指向的页面如果返回空内容、错误状态,或者干脆没有出口,蜘蛛走到那里就会停住,后面的页面也就不会被发现。
什么是抓取路径上的断点
断点可以理解为:蜘蛛按正常预期走到某个 URL,却没有得到可以继续前进的东西。它可能是状态码层面的,也可能是内容层面的。判断标准很简单——如果蜘蛛站在这个页面上,找不到任何值得继续跟的链接,或者拿到的内容与链接承诺的不一致,这里就是一个断点。
几类常见的断点
- 空列表页。分类页、标签页、搜索结果页在数据为空或筛选条件过窄时,只返回一句“暂无内容”。蜘蛛会认为这条路到头了,反复抓到几次之后,这类 URL 的抓取频次会明显下降。
- 软 404。页面返回 200,但正文是“内容不存在”“已下架”。蜘蛛拿到的是成功状态,却没有任何可用信息,既不会像真 404 那样清理索引,也带不出下一步链接。
- 硬 404 与 410 混用。本该保留并跳转的旧地址直接给 404,原本存在的路径被切断;而已经确认删除的页面又长期给 301,等于让蜘蛛一遍遍去走一条其实已经废弃的路。
- 参数循环。筛选、排序、分页参数互相组合,A 页面链到 B,B 又链回 A,蜘蛛在里面来回走,抓取量被消耗掉,却没有触达新内容。
- 孤岛页。页面本身没问题,但从首页、栏目页都点不到它,只能靠 Sitemap 或外链进入。这类页面通常只有入口没有出口,蜘蛛抓到一次之后很难再回来。
- 依赖交互的链接。链接只在点击按钮、展开折叠、滚动之后才写入 DOM,蜘蛛在初始 HTML 里看不到,路径在源码层面就是断的。
软 404 为什么比硬 404 更麻烦
硬 404 是一个明确的信号,蜘蛛知道该放弃并清理。软 404 则是含糊的:状态码说“这里没问题”,内容说“这里什么都没有”。结果往往是页面被保留在索引里,蜘蛛还会按固定间隔回来复查,一次次空手而归。如果站点里存在大量这种页面,抓取预算就会被摊薄。
处理思路是让状态码和内容对齐:确实不存在的页面返回 404 或 410;由筛选、排序等参数产生的空结果页,应该做规范化或直接禁止抓取,而不是让它们以 200 状态长期存在。
断点不等于错误:有些页面本来就该停
并不是所有出口都要补上。筛选组合、会话参数、站内搜索的查询结果页,本来就属于无限扩展的地址空间,把它们的链接收敛掉,反而是对抓取路径的保护。真正需要补的是有内容价值、但入口太窄或出口太少的页面,而不是所有返回空结果的地址。
怎么自查路径上的断点
- 从首页出发,手动点进主要栏目,记录每一步能不能继续往下走。
- 挑一个目标页面,看它距离首页需要几次点击,中间有没有跳到空页或错误页。
- 关闭 JavaScript 再走一遍,确认关键链接是否写在初始 HTML 里。
- 在抓取日志里筛出 404、软 404 集中的目录,看它们是不是同时承担着入口作用。
- 检查分页最后一页:如果下一页链在最后一页仍然存在,蜘蛛就会被带到空页。
补路的几种做法
- 给空列表页一个出口。在“暂无内容”的位置放回上级分类、热门条目或相关标签的正常链接。
- 收敛分页。最后一页不再输出“下一页”,或者把超出范围的分页地址做规范化。
- 修好参数。用 canonical 指向无参数版本,把不产生新内容的筛选组合从链接中摘掉。
- 给孤岛页加内链。在相关的正文、专题或栏目页里补一个上下文合理的链接,比只放在 Sitemap 里更有用。
- 让面包屑真实可用。面包屑不只是展示,它是蜘蛛理解层级和找到上级出口的重要通道。
抓取路径不是越宽越好,而是每一步都要有明确的下一步。补路的目标是让蜘蛛少绕圈,而不是让它抓到更多无关地址。
把断点当作路径设计的一部分来检查:入口是否可达、出口是否存在、状态码与内容是否一致。这三件事理顺之后,蜘蛛能走到的深度通常会自然改善,URL 发现也会更稳定。