很多站点在内容数量上没有明显增长,抓取日志里的 URL 却翻了好几倍。翻一翻被频繁请求的地址,往往不是新页面,而是同一批内容套上不同参数的版本:?utm_source=…、?orderby=price、?page=2&filter=red。参数本身没有错,但当它可以被蜘蛛自由组合时,一个栏目就可能衍生出成百上千个可抓取的地址。
参数是从哪里进来的
先要弄清楚这些地址是天然存在的,还是被页面链接带出来的。常见来源有三个:
- 外部推广:广告、邮件、社交平台附加的跟踪参数,通常只出现在少数落地页上。
- 站内交互:筛选、排序、分页、视图切换,往往由前端拼接进链接或表单。
- 程序与中间件:会话标识、语言偏好、缓存标记,有时会被服务端自动附加到 URL 上。
外部来源的参数影响相对有限,真正需要处理的是站内交互生成的链接,因为它们会被蜘蛛反复爬到,并顺着内链扩散到全站。
判断这段参数该不该被抓
不是所有带参数的地址都要屏蔽。判断标准可以简单一些:这段参数是否产生了用户看得见、且值得被搜索到的独立内容。
- 值得保留:真正的内容筛选,例如某品牌、某价格区间或某场景的聚合页,有独立标题、稳定地址和持续价值。
- 应当合并:排序方式、每页条数、列表与网格视图切换,内容相同,只是排列或呈现不同。
- 应当屏蔽或丢弃:会话标识、跟踪参数、空筛选值、无效的排序字段。
处理顺序:先改链接,再谈规则
不少站点一上来就写 robots.txt 或加 canonical,结果参数链接仍然从页面里被蜘蛛发现,只是抓回来被拦掉了。更稳妥的顺序是:
- 从链接源头减少:排序、视图切换这类交互尽量走前端状态,不生成可点击抓取的链接;跟踪参数只在外部落地页使用,站内链接不再携带。
- 给出规范地址:确实要保留的筛选页,在页面上加自引用 canonical,指向该筛选结果自身的干净 URL,而不是一律指回主列表。
- 统一参数写法:同一个筛选值只用一种形式,避免大小写、参数顺序、空值造成多个地址。
- 必要时才用 robots.txt:屏蔽只对抓取生效,被屏蔽的地址仍有可能被收录成无描述的结果。屏蔽与 canonical 同时使用时,要确认两者不冲突。
- 服务端兜底:对无意义的参数直接 301 到干净地址,或明确返回 404,比放任程序生成空白页更清晰。
几个常见误区
- 把过滤参数整体屏蔽,等于把有价值的筛选聚合页一起关掉。
- canonical 一律指向主列表页,但筛选页在标题和内容上差异很大,用户点进来会觉得货不对板。
- 只在页面里加 canonical,站内链接却仍然大量指向带参数的地址。
- 分页参数与多个筛选参数叠加,形成组合爆炸,却没有对这类组合做任何限制。
处理之后要看什么
规则生效不等于问题解决,还是要去日志里看真实请求。重点观察三件事:带参数请求的占比是否下降;被请求的参数组合是否集中在少数几类;改动过的地址返回状态码是否与预期一致。也可以定期从站内链接出发抓一遍 URL,统计参数出现的模式,通常比翻代码更快找到入口。
参数治理的目标不是让带参数的 URL 彻底消失,而是让每一类参数都有明确归属:要么是值得收录的独立页面,要么是不该浪费抓取资源的重复地址。