列表页加上筛选,是很常见的功能。但对蜘蛛来说,每多一个筛选维度,就多出一批地址。颜色、尺码、价格区间、排序方式,看上去只是几个下拉框,组合起来却可能是几百上千个 URL,而这些地址背后的内容,往往只是同一批条目的不同排列。
参数为什么容易失控
问题通常出在两个地方。一是筛选状态直接写进地址,用户每点一次就生成一个新 URL;二是没有默认值归一,比如按价格升序和按价格降序是两个地址,但呈现的内容几乎一样。蜘蛛顺着链接一路点下去,就会在这些组合地址上花掉大量时间。
更麻烦的是,这些页面往往还自带分页。筛选加翻页,地址数量会再乘一层。
先把参数分成三类
筛选参数
决定页面展示哪些条目,比如 ?color=red。这类参数确实会产生不同的列表,但组合数量最多,也最容易失控。
排序与视图参数
只改变展示顺序或样式,比如 ?sort=price、?view=list。内容基本一致,重复度最高,通常不值得单独被抓取。
追踪与来源参数
渠道标记之类的参数,比如 utm 系列。这类参数对页面内容没有影响,只用于统计来源,站内链接里带它们,就会凭空多出一批地址。
先看日志,再定策略
动手之前,先确认蜘蛛到底抓了多少带参数的地址。从服务器日志里筛出含问号的请求,看几个指标:
- 带参数地址占全部抓取请求的比例;
- 这些请求返回的是 200,还是被跳转到别处;
- 抓取是否集中在少数几个参数组合上。
如果比例很高,而且大部分是排序、视图这类没有实质差异的地址,那就值得处理;如果带参地址占比很低,先把精力放在更明显的问题上更划算。
几种常见的处理办法
不同参数适合不同手段,混着用容易出问题。
- 排序与视图参数做归一。默认排序不带参数,其他排序通过跳转或 canonical 指回默认版本,避免多个地址各自为政。
- 筛选参数区分对待。有一定点击、内容确实不同的组合可以保留;冷门组合可以限制站内链接的暴露,减少蜘蛛顺着爬进去的机会。
- 追踪参数不进站内链接。站内跳转不要带上渠道标记,否则同一页面会在站内以多个带参形式出现。
- robots.txt 屏蔽要谨慎。被屏蔽的地址如果还有外部链接,蜘蛛仍可能尝试抓取,只是拿不到内容,判断起来更麻烦。屏蔽解决的是抓取,不是重复内容本身。
参数页面的处理没有统一答案。先看这批地址有没有真实的搜索需求,再看维护成本。为了几个没人搜的组合地址写一堆规则,往往是白费力气。
新增筛选功能前先想一步
很多参数问题是在功能上线之后才发现的。比较省事的做法是,在提需求时多问一句:这个筛选会不会生成新地址,默认状态是什么,需不需要被搜索到。答案清楚了,技术侧才好决定用哪种写法。
已经上线的站点,可以按栏目分批梳理,先处理量最大、重复度最高的那几类。梳理的结果记到文档里,下次加功能时翻出来对一遍,比临时救火省事得多。
维护节奏
处理之后不用天天盯,隔一段时间抽查一次即可:看日志里带参数请求的比例有没有回升,看新上线的筛选有没有按约定处理。参数这类问题很少一次解决完,它会随着功能迭代反复出现,留一个简单的检查习惯,比做一次大扫除更实际。