蜘蛛在站点里是靠链接走的。链接越规整,路径越短;链接一旦出现排列组合,同一个页面就会被拆成成百上千个地址。筛选参数、排序参数、日历归档和分页这几类结构叠加在一起时,最容易出现所谓的“无限抓取路径”——蜘蛛每次都能发现新 URL,于是不断往下走,抓取次数上去了,真正有内容的页面却没多几个。
无限路径是怎么长出来的
单个参数通常不致命,问题出在叠加。下面这些元素单独看都合理,组合之后 URL 空间是乘法增长的。
- 筛选条件支持多选,颜色、尺寸、品牌、价格区间任意搭配;
- 排序参数(价格、时间、销量、好评)再与筛选自由组合;
- 日历按年、月、日逐级展开,每一层都是可点击链接;
- 分页用参数控制,页码又和筛选、排序拼在同一个地址里;
- 会话 ID、来源追踪参数附着在每条站内链接上。
三类常见结构
筛选与排序的排列组合
类似 /list?color=red&size=40&sort=price&page=2 这样的地址,颜色、尺寸、排序、页码任意组合都能得到一个能正常打开的页面,而内容与主列表差别很小。蜘蛛无法判断哪一条才是主地址,只能一条条抓过去。
日历式归档
日期归档在内容站很常见,年、月、日三层嵌套,再叠加分页,路径会越走越深。多数日期页内容稀疏,甚至只有一条记录,却同样占用一次抓取。
分页与参数混用
同一份列表既可以用路径形式的分页访问,也可以用带 page 参数的地址访问,两条路径通向相同内容。蜘蛛会当作两个入口分别抓取,路径数量随之翻倍。
怎么判断已经踩进去了
这类问题在收录面板上不一定明显,但在访问日志里很容易看出来。可以按 URL 模板归类,逐个观察数量变化:
- 大量 URL 只有参数顺序或取值不同,页面标题模板完全一致;
- 抓取次数持续上升,索引量和有效流量没有同步变化;
- 某个模板的 URL 数量在几天内不断增长,看不到上限;
- 蜘蛛停留的目录层级越来越深,新增内容页却很少。
从几处收口
收口的原则是让蜘蛛只看到一类稳定地址,其余组合尽量不让它顺着链接走到。可以按下面的顺序处理:
- 用 robots.txt 有选择地屏蔽参数,注意只屏蔽确实不需要被搜到的组合;
- 列表入口固定成一条干净路径,分页尽量用路径形式而不是参数;
- 用 canonical 指向规范地址,避免同一份内容被当成多个页面处理;
- 站内链接只提供有限组合,例如只给单选筛选做链接,多选组合交由用户表单提交;
- Sitemap 只放内容页和稳定的列表页,不要把参数组合写进去;
- nofollow 和 robots 屏蔽都有效果,但都会影响链接权重的传递,用之前想清楚。
收口不等于一刀切屏蔽所有参数。真正有搜索需求、能当作落地页的筛选结果,值得保留并给出规范地址;需要挡住的是剩下那批大批量的近似组合。
服务器与抓取预算的连带影响
参数组合爆炸不只浪费抓取预算,也会给服务器带来压力。蜘蛛并发上来后,如果每个请求都要实时查询数据库,响应变慢,整体抓取节奏会被拖下来,重要页面反而抓得更少。给列表页加缓存、限制无意义的深翻页,往往比调整服务器配置更直接。
定期把日志按 URL 模板归类看一眼,比等到索引出问题再处理省事得多。发现某个模板的 URL 数量在持续增长,基本就是该收口的信号。