参数是怎么把地址数量撑起来的
一个列表页本来只有一个地址,加上筛选、排序、分页、每页条数和追踪标记之后,同一批内容就能对应出几十个表面上不同的 URL。蜘蛛顺着站内链接往下爬,抓到的大多是同一份内容套了不同外壳。对站点来说,这既浪费抓取额度,也让索引里塞进一堆低价值的近似地址。
常见的情况大致有几类:
- 筛选与排序组合:品牌、价格区间、颜色、销量、上架时间,每多一个可勾选条件,地址数量就往上翻一层。
- 分页与每页条数:?page=2&size=20 和 ?page=4&size=10 很可能指向同一段商品。
- 追踪标记:utm_source、gclid、fbclid、ref、from 这些本来是给外部投放用的,一旦被复制进站内导航或分享按钮,就会沿着内链一路扩散。
- 会话与临时参数:sid、token、带时间戳的 _t,每次访问都生成新地址,对抓取来说等于无穷多个新页面。
- 默认值写进 URL:?sort=default、?page=1、?cat=all 与不带参数的版本内容完全一致,却各自占一个地址。
它会带来哪些实际麻烦
最直接的影响是抓取被摊薄。蜘蛛一天能访问的页面数是有限的,如果大量访问都落在内容重复的筛选页上,真正会更新、有搜索需求的页面就分不到足够次数。
其次是信号混乱。多份近似内容都指向自己的地址,页面之间容易互相竞争,标题和描述在索引里也可能被系统自行改写。时间久了,索引量看着在涨,实际有价值的却不多。
先从日志里找出失控的参数
治理之前得先知道哪些参数在被频繁抓取。打开最近一段时间的访问日志,做几步简单统计:
- 筛出请求路径里带问号的记录,算出它们占总抓取量的比例。比例异常高时,说明参数页面正在吃掉大量访问。
- 按参数名分组统计,看每个参数各自被请求了多少次,先盯排名前几位的。
- 把同一个内容不同参数的地址挑出来,人工对比页面正文是否真的不同。
- 看这些地址有没有出现在站内链接里。如果只有蜘蛛在访问,而站内入口很少,多半是从外部链接或旧地址爬过来的。
处理顺序:能归一化就别急着屏蔽
第一步,把不该出现的参数去掉
- 站内链接一律不带追踪参数,分享和广告链接里的标记留在外部即可。
- 默认值不写进 URL,sort=default、page=1 这类直接回到干净地址。
- 统一参数顺序,a=1&b=2 与 b=2&1 在服务端归一成同一种写法,避免相同组合产生多个地址。
- 清掉空参数和失效参数,比如 ?color=&size= 这种没有任何筛选意义的尾巴。
第二步,用 canonical 把有内容的组合收敛到主版本
筛选页如果确实能给用户提供有效信息,不必全部砍掉。可以让它指向对应的主分类地址,同时保证主地址本身可抓取、有入口。分页页面则更要注意,每页内容不同,不要一律指向第一页。
第三步,再考虑屏蔽
会话 ID、时间戳、纯排序切换这类对用户没有实质帮助的参数,可以在 robots.txt 里拦住抓取路径。但要清楚一点:屏蔽抓取不等于阻止索引,外链指向的地址仍可能被收录。所以顺序上还是先做归一化,屏蔽只作为兜底。
参数本身不是问题,失控的是那些既没有独立内容、又没有任何入口管理价值的组合。判断标准很简单:这个地址单独拿给用户看,他会不会觉得值得点开。
参数治理不是一次做完的事。新建筛选功能、上线投放系统、改版导航时,都可能重新引入一批地址。把参数命名和链接生成的规则写进开发约定,再定期从日志里复查一次,比事后清理省力得多。