搜索抓取

抓取入口的层级分工:首页、栏目页与详情页各承担什么角色

蜘蛛从哪个页面进来、沿着哪些链接往下走,很大程度上决定了它能发现多少 URL。本文拆解首页、栏目页、详情页在抓取路径中的分工,以及内链、Sitemap 与服务器响应稳定之间的配合关系,并给出一份可执行的检查顺序。

搜索抓取

抓取入口的层级分工:首页、栏目页与详情页各承担什么角色

蜘蛛进入一个站点,通常不是随机游走。它从一个入口页开始,沿着页面里的链接一层层往下,能走到哪里、走多深,取决于站点的入口层级怎么安排。入口层级混乱时,常见的结果是:首页和少数几个页面被反复抓取,大量详情页长期没有抓取记录。

入口层级的三个角色

把站内页面粗略分成三层:首页、栏目页(列表页、聚合页)、详情页。这三层在抓取路径里承担的任务并不一样,混着做容易出现“该被发现的没被发现”。

首页:负责分发,不负责堆放

首页被访问频率最高,它的主要作用是把蜘蛛送到下一层。如果首页堆了几百条链接,其中大半是促销、活动、无关推荐,蜘蛛的注意力会被分散,真正需要被抓取的栏目入口反而被挤到后面。保留稳定的主导航、少量重要的栏目入口即可。

栏目页:蜘蛛的中转站

栏目页是详情页 URL 的主要来源。它需要满足两个条件:一是能从首页通过静态链接点到;二是列表本身可被抓取,不依赖滚动、点击“加载更多”才出现。分页链接也属于这一层,第一页之后的分页如果只能用 JavaScript 触发,深层内容基本就断在这里。

详情页:终点,也是新的起点

详情页是抓取目标,同时也是通往其他详情页的节点。相关推荐、上一篇/下一篇、同标签聚合,都能让蜘蛛在详情层内部横向移动。这类链接要控制数量,一页放十几条相关链接通常足够,塞进几十条效果反而下降,因为重要链接被稀释。

内链要“能走通”,而不是“看起来很多”

  • 每个栏目页至少有一条从首页可点击到达的静态路径,不要只靠站内搜索框。
  • 列表分页保留可抓取的链接,第一页、第二页、末页都要能点到。
  • 避免孤岛页:新上线的详情页如果没有进入任何列表和相关推荐,只能等 Sitemap 提醒。
  • 全站导航的链接数量保持克制,几百条链接的导航对蜘蛛和用户都不友好。
  • 链接文字尽量描述目标页面内容,不要清一色“点击这里”。

Sitemap 和内链是两条腿,别互相打架

内链决定蜘蛛日常沿着哪些路径走,Sitemap 更像一份补充清单,用来提示那些路径较深、更新频繁或新产生的 URL。两者给出的地址应当一致:如果内链指向带参数的版本,Sitemap 写的是静态化版本,蜘蛛面对的是同一内容的两个地址,抓取会被分散。发现这种不一致时,先统一地址,再考虑用 canonical 收敛。

服务器不稳定,再顺的路径也走不通

抓取路径的设计再好,前提是蜘蛛每次请求都能拿到正常响应。持续的高响应时间会让蜘蛛在单位时间内走得更少,超时和连接中断则直接中断这条路径。5xx 出现频繁时,蜘蛛通常会降低抓取频率,恢复需要时间;429 表示请求过多,应当按照对方给出的 Retry-After 调整节奏,而不是继续加压。

判断问题出在路径还是服务器,可以分两步:先看服务器日志里响应码和响应时间的分布,再看被请求的 URL 是否集中在列表页和分页。两者交叉看,方向通常就清楚了。

一个可执行的检查顺序

  1. 从首页出发,手动点出一条到最深层详情页的路径,记录需要点击几次。
  2. 检查栏目页分页是否可抓取,末页是否可达。
  3. 核对 Sitemap 中的 URL 与内链实际指向是否一致。
  4. 看服务器日志的响应码与响应时间,确认没有被超时和 5xx 大面积打断。
  5. 找出最近更新但长期没有抓取记录的页面,看它们是否缺少入口。

抓取这件事很少靠单点技巧解决。入口给对、路径通畅、响应稳定,这三件事做好了,蜘蛛能覆盖的范围自然会往合理的方向走。