站点运营

站点运营:URL 参数与筛选链接的治理,别让排序和跟踪参数生出重复页面

站内筛选、排序和跟踪参数常常在无意间生成大量可抓取地址,消耗抓取配额并制造重复内容。本文从参数来源讲起,说明哪些参数值得保留、哪些应合并或屏蔽,给出从链接源头到服务器返回的处理顺序,以及处理完之后该在日志里观察哪些变化。

站点运营

站点运营:URL 参数与筛选链接的治理,别让排序和跟踪参数生出重复页面

很多站点在内容数量上没有明显增长,抓取日志里的 URL 却翻了好几倍。翻一翻被频繁请求的地址,往往不是新页面,而是同一批内容套上不同参数的版本:?utm_source=…、?orderby=price、?page=2&filter=red。参数本身没有错,但当它可以被蜘蛛自由组合时,一个栏目就可能衍生出成百上千个可抓取的地址。

参数是从哪里进来的

先要弄清楚这些地址是天然存在的,还是被页面链接带出来的。常见来源有三个:

  • 外部推广:广告、邮件、社交平台附加的跟踪参数,通常只出现在少数落地页上。
  • 站内交互:筛选、排序、分页、视图切换,往往由前端拼接进链接或表单。
  • 程序与中间件:会话标识、语言偏好、缓存标记,有时会被服务端自动附加到 URL 上。

外部来源的参数影响相对有限,真正需要处理的是站内交互生成的链接,因为它们会被蜘蛛反复爬到,并顺着内链扩散到全站。

判断这段参数该不该被抓

不是所有带参数的地址都要屏蔽。判断标准可以简单一些:这段参数是否产生了用户看得见、且值得被搜索到的独立内容。

  • 值得保留:真正的内容筛选,例如某品牌、某价格区间或某场景的聚合页,有独立标题、稳定地址和持续价值。
  • 应当合并:排序方式、每页条数、列表与网格视图切换,内容相同,只是排列或呈现不同。
  • 应当屏蔽或丢弃:会话标识、跟踪参数、空筛选值、无效的排序字段。

处理顺序:先改链接,再谈规则

不少站点一上来就写 robots.txt 或加 canonical,结果参数链接仍然从页面里被蜘蛛发现,只是抓回来被拦掉了。更稳妥的顺序是:

  1. 从链接源头减少:排序、视图切换这类交互尽量走前端状态,不生成可点击抓取的链接;跟踪参数只在外部落地页使用,站内链接不再携带。
  2. 给出规范地址:确实要保留的筛选页,在页面上加自引用 canonical,指向该筛选结果自身的干净 URL,而不是一律指回主列表。
  3. 统一参数写法:同一个筛选值只用一种形式,避免大小写、参数顺序、空值造成多个地址。
  4. 必要时才用 robots.txt:屏蔽只对抓取生效,被屏蔽的地址仍有可能被收录成无描述的结果。屏蔽与 canonical 同时使用时,要确认两者不冲突。
  5. 服务端兜底:对无意义的参数直接 301 到干净地址,或明确返回 404,比放任程序生成空白页更清晰。

几个常见误区

  • 把过滤参数整体屏蔽,等于把有价值的筛选聚合页一起关掉。
  • canonical 一律指向主列表页,但筛选页在标题和内容上差异很大,用户点进来会觉得货不对板。
  • 只在页面里加 canonical,站内链接却仍然大量指向带参数的地址。
  • 分页参数与多个筛选参数叠加,形成组合爆炸,却没有对这类组合做任何限制。

处理之后要看什么

规则生效不等于问题解决,还是要去日志里看真实请求。重点观察三件事:带参数请求的占比是否下降;被请求的参数组合是否集中在少数几类;改动过的地址返回状态码是否与预期一致。也可以定期从站内链接出发抓一遍 URL,统计参数出现的模式,通常比翻代码更快找到入口。

参数治理的目标不是让带参数的 URL 彻底消失,而是让每一类参数都有明确归属:要么是值得收录的独立页面,要么是不该浪费抓取资源的重复地址。