蜘蛛沿着链接走,站点每多出一种链接组合,就等于多开了一条路。大部分路通向有用页面,但有些路会不断分出新的分支,让蜘蛛在有限时间里一直走、一直发现新 URL,却始终到不了有价值的页面。这类结构通常被称为无限 URL 空间,或者爬虫陷阱。
无限 URL 空间是怎么形成的
根源不在蜘蛛,而在站点自身:同一份内容可以被无数种 URL 表达,站点又愿意为每一种写法都返回 200。蜘蛛看到链接就跟着走,看到新地址就记下来,循环自然出现。
常见的几种形态
- 日历与归档:按年月日生成归档页,每页又链向“上一月”“下一年”,这些链接会跟着当前日期持续向后延伸。
- 筛选与排序叠加:颜色、尺寸、价格区间、排序字段互相组合,再叠加分页参数,URL 数量呈乘积增长。
- 分页首尾互链:列表页同时提供“第一页”“最后一页”“下一页”,蜘蛛在页与页之间来回跳。
- 会话与跟踪参数:session id、来源跟踪码被写进每一条内链,同一条路径因此生成成千上万个变体。
- 站内搜索与结果页:搜索结果本身是可抓取的 URL,而结果页里又带着新的搜索入口。
- 相对路径在深层目录被反复拼接:写错的相对链接会在不同层级拼出越来越长的地址。
它带来的实际影响
最直接的是抓取时间被分散。蜘蛛每天来站点的次数有限,大量相似 URL 占掉这些请求,真正需要复查的新页面、更新页面就要排队。其次是日志难读,同一份内容出现几十种 URL,很难判断哪个才是有效入口。第三是服务器压力,重复请求本身也要消耗带宽和 CPU。需要注意,这不一定表现为抓取总量上涨——有些站点总抓取量没变,但有效页面的抓取次数明显下降。
怎么找出这类路径
- 按路径前缀统计日志里的 URL 数量,看哪一段的 URL 密度明显偏高。
- 看参数:同一路径下出现了多少种参数组合,其中多数是不是只有参数顺序不同。
- 对比 Sitemap 与内链:Sitemap 只列了几百个 URL,日志里却出现上万条同前缀地址,说明入口在筛选或分页。
- 观察蜘蛛的停留位置:抓取集中在中层列表页,很少到达详情页,通常意味着中间层生成了太多岔路。
收口的思路
处理顺序建议从“不生成”开始,再到“不把它变成链接”,最后才是“拦在门外”。
- 减少组合维度:把筛选收窄到少数几个真正有需求的组合,其余组合通过表单提交或点击后异步加载,不直接输出静态链接。
- 去掉无意义参数:跟踪码、会话标识不进内链;参数顺序统一,重复参数合并。
- 给分页设边界:分页只保留“上一页/下一页”,去掉“跳到最后”这类跨页链接;深度过大的分页不再生成链接。
- 用 robots.txt 屏蔽已确认的模式:规则要写得窄,只针对明确的参数前缀,避免误伤正常路径。
- 空结果返回 404 或 410:不存在的筛选组合如果返回 200 的空页面,蜘蛛会继续保留并复查。
- Sitemap 只放有意义的 URL:把参数变体塞进 Sitemap,等于主动扩大空间。
收口之后看什么
调整后的一两周,重点看三件事:同前缀 URL 在日志里的数量是否下降;详情页的抓取次数是否上升;服务器因蜘蛛访问产生的负载是否变轻。如果总抓取量下降但有效页面小幅上升,这通常是好现象,不必因为总数字变小而紧张。
抓取路径的管理不是把蜘蛛挡在门外,而是让它在有限的时间里少走岔路。
最后提醒一点:无限 URL 空间很难完全清零,筛选、分页、日历都是正常功能。目标不是零,而是让这些分支不超过蜘蛛能承受的比例,让主要内容路径始终清晰可辨。