发现只是起点,不等于抓取
外链出现、Sitemap 里新增一条 URL、站内多了一个 a 标签,这些动作都只是把地址送到蜘蛛面前。蜘蛛拿到 URL 后,通常不会立刻发起请求,而是先把它放进待抓队列。队列里的 URL 要经过几道筛选,才会变成一次真实的 HTTP 请求。理解这条链路,比单纯追求“被蜘蛛看到”更有用。
第一关:URL 规范化与去重
蜘蛛会对 URL 做归一化处理,比如统一协议、主机名大小写、去掉默认端口、处理末尾斜杠等。如果站内同一内容存在多个写法,蜘蛛可能只保留一个代表地址,其余版本进入去重逻辑。常见情况包括:
- http 与 https 同时可访问,且没有跳转;
- 带 www 与不带 www 都能打开;
- 列表页同时存在 ?page=1 与无参数版本;
- 大小写混用的路径被服务器视为不同地址。
这些重复地址会占用队列位置,让真正需要抓取的页面往后排。站点侧能做的,是尽早确定唯一地址,用 301 把其他写法收敛过去,并在内链和 Sitemap 中保持统一。
第二关:robots 与可抓取性判断
进入队列前,蜘蛛会对照 robots.txt 判断该路径是否允许抓取。如果被 Disallow,URL 可能仍会被发现,但不会产生正常抓取。另一种情况是页面虽然允许抓取,但返回 noindex 或 canonical 指向别处,蜘蛛会据此调整后续处理优先级。
需要留意的是,robots.txt 只控制抓取,不控制索引。不希望收录的页面,更稳妥的做法是允许抓取、再给 noindex;如果直接屏蔽抓取,蜘蛛看不到 noindex,页面仍可能以其他方式出现在结果里。
第三关:优先级与抓取预算
待抓队列不是先进先出。蜘蛛会参考页面重要性、更新频率、历史抓取质量、站内链接位置等因素排序。首页、栏目页、近期更新过的详情页,通常更容易被优先安排。相反,深藏在多级分页之后、只有极少内链指向的 URL,可能长时间停留在队列里。
抓取预算有限时,站点要避免把队列塞满低价值地址。比如筛选参数组合、站内搜索结果页、空结果页,如果大量暴露给蜘蛛,会稀释重要页面的抓取机会。可以用 robots.txt 屏蔽高重复参数,或给这些页面加 noindex,减少无效排队。
第四关:服务器响应与重试
轮到某个 URL 实际抓取时,服务器响应会决定它是否顺利完成。超时、5xx、连接中断,都会让这次抓取失败。蜘蛛会退避重试,但重试有次数和间隔限制。如果同一批 URL 反复失败,蜘蛛会降低对该站点的抓取频率,恢复需要时间。
因此,服务器稳定性不是运维单方面的事,它直接影响 URL 从队列走到抓取的成功率。抓取高峰期出现响应变慢,最好先排查数据库、缓存、动态渲染等环节,而不是简单封禁蜘蛛 IP。
站点侧可以配合的几件事
- 统一 URL 写法,用 301 收敛重复地址,减少队列浪费。
- Sitemap 只放希望被抓取、且返回 200 的规范地址,并保持更新。
- 内链指向明确,重要页面从首页或栏目页几次点击可达。
- 对无价值参数页、搜索结果页做屏蔽或 noindex,避免占用预算。
- 监控服务器 5xx 与超时,发现异常及时处理,别让蜘蛛连续碰壁。
被蜘蛛发现是 URL 进入抓取流程的第一步,后面还有去重、权限判断、排序和响应质量几道关卡。把每一关的阻力降下来,比反复提交地址更实际。