带参数的 URL 本身没有错,麻烦在于它会成倍出现。一个列表页加上排序、筛选、分页、来源追踪之后,可以组合出几十甚至上百个地址,而蜘蛛对每一个地址都会当成独立 URL 来处理,消耗的抓取次数也跟着翻上去。
蜘蛛看到的是 URL,不是页面逻辑
对服务器来说,/list?color=red 和 /list?color=blue 是两次不同的请求;对蜘蛛来说也是两个独立地址。如果你用参数把同一批商品重新排列组合,蜘蛛会顺着内链或 Sitemap 一路展开,把这些组合逐个抓一遍。结果往往是:真正需要更新的详情页没被抓几次,组合出来的列表页却占掉了大头。
哪些参数最容易让抓取量失控
- 排序参数:?sort=price、?order=desc,同一批内容换个顺序就多一个地址。
- 多条件筛选:?color=red&size=40&brand=x,条件越多,组合增长越快。
- 分页叠加筛选:筛选结果后面再带 page=2,地址数量又乘一层。
- 追踪与来源参数:?from=home、utm_source 这类对内容没有影响,却会生成新地址。
- 会话与临时参数:带 sessionid、时间戳的地址,每次抓到的写法都不一样。
几种常见的收口方式
用 robots.txt 挡住
对确认没有收录价值、纯粹由筛选组合出来的地址,可以用 Disallow 规则拦住。要注意 robots.txt 管的是抓取,不是收录,已经进过索引的地址需要另外处理。
统一 canonical 与内链口径
把参数页的 canonical 指回不带参数的规范版本,同时让站内链接尽量只用规范写法。内链是蜘蛛最常走的路径,链接怎么写,它就更可能怎么抓。
让参数页可用,但不必处处可达
筛选结果可以由前端 JS 生成,或者通过提交、接口拉取,避免为每一种组合都生成一个能被直接抓取的静态地址。用户照样能用,蜘蛛也不需要顺着链接全部展开。
Sitemap 里只放主干
Sitemap 是主动递出去的清单,把参数组合也写进去,等于邀请蜘蛛逐个访问。主干列表页和重要详情页放进去即可。
怎么判断哪些参数页值得保留
- 看服务器日志或站长平台的抓取统计,找出被抓次数最多的一批参数地址。
- 确认这些地址有没有带来实际访问或转化,没有的话基本属于纯消耗。
- 看看是否有重要页面因为抓取额度被占用而更新滞后。
- 定好规范地址口径,再决定是屏蔽、合并还是保留。
参数本身不是问题,无人管理的参数组合才是。把口径定下来,抓取路径才会更集中。
一个容易忽略的细节
屏蔽参数地址之后,要回头确认站内链接和 Sitemap 里没有继续出现这些写法,否则蜘蛛会在能发现却抓不了的状态里反复试探。规则调整后观察一段时间的日志,看抓取分布有没有向内容页倾斜,再决定要不要继续收紧。