筛选、排序、站内搜索这些功能一旦上线,索引里很容易多出一批带参数的 URL。它们不是凭空出现的:只要页面能被爬虫顺着链接抓到,又没有被明确处理,搜索引擎就可能把它当成独立页面看待。问题不在于参数本身,而在于这些 URL 有没有独立价值、值不值得占用抓取配额和索引空间。
第一步:把带参数的 URL 从索引和日志里分出来
先摸清规模,再动手改。按参数名分组统计,比盯着总数更有用。
- 站内搜索参数(如 ?q=、?s=):组合近似无限,独立价值通常最低。
- 筛选与排序参数(如 ?color=、?sort=):同一个列表的不同视图,内容高度重叠。
- 分页或游标参数:属于内容序列的一部分,处理方式和筛选参数不同。
- 统计与追踪参数(?from=、?ref=):只是入口标记,不该形成新页面。
顺便看一眼抓取日志里带 query 的请求占比。如果爬虫大量时间花在参数页上,核心页面的抓取频率就会被挤占。
第二步:给每类参数定一个归属
处理方式无非三种,但前提是先判断这个 URL 本身值不值得留。
- 保留:少量固定的聚合页,比如“全部商品”或某个固定筛选组合确实有搜索需求,可以保留为可索引页面,做自指 canonical,并让内链正常指向它。
- 归并:内容与主页面高度重复的排序、视图切换,可让页面 canonical 指向无参数版本。前提是两页内容确实一致,否则信号会互相矛盾。
- 屏蔽:组合无限、几乎不可能有独立搜索需求的参数,优先考虑禁止抓取或禁止索引。
第三步:执行顺序比选哪一招更重要
- 先确认页面能正常访问、返回 200,再谈处理方式。
- 决定是“不抓”还是“不索引”。要让页面被读取但不进索引,用 meta robots 的 noindex,此时不要用 robots.txt 封死。
- 如果确定整类参数都不需要被抓,再考虑在 robots.txt 里按模式屏蔽,或使用参数设置类工具让搜索引擎自行判断。
- 处理完回头改内链和 sitemap。内链仍指向参数 URL,爬虫就会继续发现,前面的处理等于白做。
- 最后再核对索引状态的变化,而不是当天改完当天就下结论。
一个常见的顺序错误:先用 robots.txt 屏蔽参数目录,再往这些页面上加 noindex。爬虫读不到页面内容,noindex 自然不会生效。
第四步:改完之后核对什么
- 抓取日志里参数类 URL 的请求占比是否下降,核心目录的抓取是否更集中。
- 索引覆盖报告里,参数 URL 的状态是否变为“已排除”一类,而不是仍显示已收录。
- 被 canonical 归并的页面是否跟着主页面走,而不是各自留在索引里。
- 核心列表页和详情页的收录是否稳定,别在处理参数时误伤了主页面。
几个容易忽略的细节
会话 ID、多语言参数、移动端识别参数同样会生成 URL 变体,处理逻辑与筛选参数类似,但不建议一刀切。参数页的处理结果通常不会立刻反映到索引里,核对时要按批次、按目录去看,而不是只看总量。真正需要判断的始终是:这个 URL 上有没有用户会主动搜索的内容。