一个商品页,正常地址是 /item/1024,但站内链接、广告投放、分享按钮各自带上了不同的尾巴:?utm_source=、?from=、?sid=、?sort=price。对用户来说这是同一个页面,对抓取程序来说却是一串不同的地址。参数本身没有问题,问题在于它会把抓取机会摊薄,也让收录时的版本判断变得模糊。
先分清:哪些参数改变了内容
处理参数之前,先按一个标准分类:加上这个参数后,页面主体内容是否真的不同。
- 不改变内容:utm 系列、来源标记、分享来源、会话 ID、纯展示偏好(如列表/网格切换)。
- 改变内容:分页 page=2、筛选品牌/价格区间、排序方式、语言或地区切换、搜索结果。
第一类只需要收敛到无参地址;第二类要单独判断是否值得被抓取和收录,不能一刀切地全部屏蔽。
不改变内容的参数:从源头少生成
最有效的做法不是事后加标签,而是让这类地址尽量不产生。
- 站内链接、面包屑、分页、sitemap 里的地址统一写无参版本,不要因为当前页面带了参数就把参数继续传给内链。
- 分享按钮和投放链接的跟踪参数,尽量不要在同一份页面模板里扩散到所有内链。
- 会话 ID 能放 cookie 就不要放在 URL 上,URL 上的会话 ID 每次访问都变,等于源源不断制造新地址。
- 页面的 canonical 指向无参版本,并且要自洽——列表页、分页页、详情页各自指向自己的规范地址,不要全站都指向首页。
canonical 是建议不是指令,它的作用是帮助判断主版本,而不是保证带参地址一定不出现。链接层面少产生,比标签层面多补救更省事。
排序和视图参数:优先级低,容易组合爆炸
排序参数单独看影响不大,但一旦和筛选、分页叠加,组合数量会迅速膨胀。常见的处理顺序是:
- 把排序、视图切换这类交互尽量做成前端行为,不改变地址;
- 如果必须改地址,给带排序参数的页面指定 canonical 指向默认排序地址;
- 对明显不会被搜索需求的组合,考虑在抓取层面控制,而不是指望它们被收录。
要留意的是,robots.txt 屏蔽和 canonical 不能同时用在同一批地址上。被 robots 屏蔽的 URL,抓取程序不会去读页面内容,也就读不到里面的 canonical 和 noindex,站内信号和 robots 规则会互相打架。选择一种手段,别叠两层。
筛选和站内搜索:控制抓取面,而不是逐个处理
筛选组合页和搜索结果页往往是参数地址的大头。逐个挑出「值得收录」的几乎没有必要,更实际的是控制抓取面:需要保留的品类筛选页给出稳定、干净的地址结构;纯组合型的筛选参数,则在抓取层面限制,或对页面使用 noindex 并把链接正常输出,让权重继续传递。
分页参数属于另一类。第 2 页、第 3 页通常有独立内容,canonical 指向自身即可,不要指向第 1 页,否则等于主动告诉搜索引擎「这些页面不用单独存在」。
自查顺序:从日志和链接入手
如果怀疑参数地址已经造成困扰,按这个顺序看比较快:
- 抓取日志里带参 URL 占了多少比例,是否集中在少数几个参数上;
- sitemap 和内链里是否混进了带参地址;
- canonical 是否指向了正确的无参版本,是否存在循环或指向不存在的地址;
- robots.txt 是否有规则误伤了需要被抓取的地址,或与页面内的 noindex 冲突;
- 参数地址是否在被抓取后占用了大量访问频次,却长期没有进入索引。
参数不会直接导致页面被降权,它更像是把有限的抓取机会和判断信号分散掉了。把会产生地址的地方收紧一点,把该有独立地址的页面(分页、有实际需求的筛选)明确保留下来,收录状态通常会逐渐稳定。