搜索抓取

参数化 URL 的抓取账:哪些链接不该带着参数发出去

站内链接里随手带上的追踪参数、排序参数和会话 ID,会把一个页面变成几十个地址,蜘蛛把时间花在这些变体上。本文理清三类参数的处理顺序:先改链接输出,再用 robots.txt 收口,最后用 canonical 兜底,并说明怎么用服务器日志确认效果。

搜索抓取

参数化 URL 的抓取账:哪些链接不该带着参数发出去

一个页面为什么会变成几十个地址

URL 膨胀往往不是从外链开始的,而是从自己页面里的链接开始的。列表页的「按价格排序」、文章底部的分享链接、投放落地页带的 UTM 参数,只要被写进 HTML,蜘蛛就会把它们当成新的地址排队。同一个商品页,可能因为 ?sort=price、?from=weibo、?sid=abc123 这几个后缀,在抓取队列里出现十几个版本。

这些变体页面内容大同小异,蜘蛛抓到之后要么判定重复,要么反复确认两者之间的关系。无论哪种结果,消耗的都是同一份抓取时间。

三类参数,处理顺序不一样

追踪参数:最该先清掉

utm_source、from、ref、spm 这类参数只服务于统计,对页面内容没有任何影响。它们最好在链接输出阶段就不要出现。统计需求可以由脚本在点击时上报,不必通过改写链接来实现。

排序与筛选:保留少量可控入口

排序和筛选参数确实能产生有价值的页面组合,但组合数量是乘法级的。可以先确认哪些组合有真实搜索需求,把这几组做成可抓取的静态入口,其余组合通过 robots.txt 或参数屏蔽规则收口。

会话与身份参数:从源头避免

sid、sessionid、token 这类参数会让同一个 URL 对每个访客都不同。蜘蛛每次抓到的都像是「新地址」,缓存和去重都失去意义。这类信息应改为 Cookie 或请求头传递,不要出现在链接里。

内链是第一道关

参数治理最省力的位置是模板层。检查一遍站点模板,通常能找到大部分问题来源:

  • 分享组件自动附加的来源参数;
  • 分页链接里带的时间戳或随机数;
  • 面包屑、相关推荐里拼接的追踪参数;
  • 站内搜索结果的链接被直接输出到页面上。

把这些位置改成干净链接,比事后写规则去拦截要可靠得多。规则是补丁,链接输出才是源头。

robots.txt 和 canonical 的分工

如果短期内改不完模板,可以用 robots.txt 挡住参数型 URL。多数主流蜘蛛支持通配符写法,但要小心别把正常页面一起挡住,比如规则写得过宽,可能连带参数的正规内容页也一起屏蔽了。

canonical 的作用不同:它不阻止抓取,只表明「这个变体属于哪个主版本」。适合用在参数确实需要保留、且希望把权重归并的情况。

把 robots.txt 当成屏蔽、canonical 当成归并,两者不要互相替代。被 robots.txt 挡住的 URL,蜘蛛通常不会去读它页面里的 canonical。

用日志确认收口效果

规则上线不等于生效,回到服务器日志里看才踏实。可以按下面几步核对:

  1. 筛选出带问号的请求,统计参数种类和请求量占比;
  2. 观察同一路径下不同参数版本各被请求了多少次;
  3. 对比收口前后,蜘蛛在有效页面上的请求量有没有变化;
  4. 留意是否出现新的参数组合,说明还有没被清理的链接出口。

一个可以照着走的顺序

先清模板里的追踪参数,再把筛选组合收敛到少数可控入口,然后用 robots.txt 挡住剩余的参数型 URL,最后用 canonical 处理必须保留的变体,并回到日志验证。整个过程不必一次性做完,但顺序尽量不要颠倒——先改链接输出的收益,通常比后面几条规则加起来都大。