网站收录

带参数的 URL 被大量收录:先给参数分类,再决定收敛方式

站内链接带上追踪、筛选或会话参数后,索引里常会多出一批内容相同的 URL。本文按参数类型拆分处理方式,并给出一条从索引表现往回查的核对顺序,覆盖内链、sitemap、canonical 与服务端响应几个环节。

网站收录

带参数的 URL 被大量收录:先给参数分类,再决定收敛方式

站内链接带上 utm_、sid、sort 之类的参数,时间一长,索引里就可能多出一批“看起来像新页面、内容其实是同一份”的 URL。处理这类问题,先别急着在 robots.txt 里一刀切,因为屏蔽和归并是两件不同的事。

一、先把参数分成三类

不同来源的参数,处理方式差别很大。核对之前先给它们归个类:

  • 追踪类:utm_source、utm_medium、gclid、fbclid、ref、spm 等,只在站外跳转或投放时出现。
  • 筛选与排序类:color、size、price、sort、view、brand 等,由站内筛选器生成,可能组合出成百上千个 URL。
  • 会话与状态类:sid、sessionid、token、_t、timestamp 等,本来就不该出现在可分享的 URL 里。

二、核对顺序:从索引表现往回查

被收录的带参 URL,先看它长什么样,再顺着来源往回收。

  1. 在索引报表或 site 查询里抽样,看被收录的带参 URL 是否返回了完整正文,还是只是一个壳页。
  2. 检查站内链接:分享按钮、面包屑、分页条、筛选器是否把参数写进了 href。
  3. 检查 sitemap、RSS、AMP 或接口输出里是否直接提交了带参 URL。
  4. 看服务端对带参请求的响应:是 200 返回同一份正文,还是 302 跳到干净版本。
  5. 看 canonical 指向哪里,以及那个目标 URL 本身是否可正常抓取、是否已被收录。
参数收敛不等于“全部 Disallow”。robots.txt 屏蔽之后,已收录的 URL 常常仍会留在索引里,只是因为没有正文可读而显示成裸链接;同时爬虫读不到 canonical,归并信号也就传不过去。

三、按类型给处理方式

追踪类

  • 内链一律使用无参版本,追踪参数由脚本在点击时拼接,而不是写死在 HTML 里。
  • 带参版本尽量 canonical 到无参版本,两边正文保持一致。

筛选与排序类

  • 只有确实有独立内容、也有搜索需求的筛选组合,才允许自指 canonical 并保持可抓取。
  • 其余组合归并到主列表页;如果连归并都不合适,再用 noindex 处理,注意保留抓取权限。

会话与状态类

  • 这类参数应回到服务端解决:生成会话标识时不要写进 URL,或对带参请求统一 302 到干净地址。

四、容易踩的坑

  • 归并目标本身有问题:canonical 指到无参版本,但那个版本跳转、报错或内容不同,信号会被忽略。
  • 站内链接自己带参数:等于不断把带参版本重新暴露给爬虫,清理速度赶不上发现速度。
  • noindex 与 Disallow 同时用:屏蔽抓取后 noindex 读不到,页面可能长期停在索引里。
  • 参数顺序不统一:?a=1&b=2 与 ?b=2&a=1 会被当成两个 URL,建议在服务端对参数排序做规范化。
  • 大小写与空值参数:Color=Red 与 color=red、?size= 与不带 size,都可能各自成页。

五、处理后怎么确认

改完之后,按周观察索引报表中带参 URL 的数量趋势,同时抽查几个典型 URL 的抓取与索引状态。维护一份“允许索引的参数白名单”,后续新增筛选维度时先对照这份名单,避免同类问题反复出现。