蜘蛛池入口页里常见一种写法:同一批目标链接后面挂上不同的跟踪参数,比如 ?from=page1、?utm_source=xxx、?ref=abc。这样做的初衷通常是区分来源、统计点击,但随之而来的问题很直接——搜索蜘蛛会不会把这些地址当成一堆不同的 URL,分别抓一遍,把抓取配额耗在重复内容上?
搜索蜘蛛怎么判断两条链接是不是同一个地址
搜索蜘蛛不会“理解”参数的含义,它拿到的是一串字符串。判断两个地址是否等价,主要看 URL 规范化规则和内容相似度两方面。
- 规范化层面:域名大小写、默认端口(:80/:443)、末尾多余斜杠、片段标识(# 后面的内容不参与请求)等,通常会被归并。
- 参数层面:不同搜索引擎处理方式不同。utm_*、ref、from 这类常见跟踪参数在部分引擎的规则里会被忽略或降权,但这属于引擎内部策略,不是你能确保的。
- 内容层面:如果两个地址返回的 HTML 完全一致,引擎也有可能自行去重,但前提是它愿意抓这两次来做比较。
哪些参数容易被当成不同 URL
- 会话 ID、用户 ID 之类每次访问都会变化的参数。
- 排序、筛选、翻页参数(sort=、page=、filter=)。
- 随机数或时间戳(?t=1719…),每次刷新都产生新地址。
- 参数顺序不固定:a=1&b=2 和 b=2&a=1 在很多实现里就是两个字符串。
前两类如果内容确实不同,重复抓取算正常;后两类只是形式差异,抓取基本是白花。对蜘蛛池入口页来说,浪费的是本来就不宽裕的抓取配额,目标 URL 被发现的时间会被拉长。
怎么排查入口页是否在制造重复地址
- 看日志。把入口页被请求的 URL 按路径去重统计,如果同一路径出现几十上百种参数组合,说明链接生成环节有问题。
- 看目标 URL 的抓取量。某个地址如果被反复请求、返回内容又完全一致,多半是被多个带参数的入口带过去的。
- 检查页面源码。看链接生成模板里有没有拼接 session、时间戳、随机数。
可以做的收敛处理
- 入口页只输出规范化后的干净地址:不拼跟踪参数,统计用跳转脚本或前端埋点完成,不要写进 href。
- 参数顺序固定,并且只在内容确有差异时才保留参数。
- 如果无法避免参数,用 canonical 指向无参数版本,同时确认无参数版本能正常访问、返回同样的内容。
- robots.txt 只用来屏蔽确实不需要抓取的无效参数形态,不要拿它代替规范化,被屏蔽的地址也就不会再被发现。
- 站点地图里只放无参数的规范地址。
参数收敛解决的是“别把配额花在重复地址上”,它不是收录开关。地址被正确发现、抓取之后能不能收录,仍然取决于内容本身。
一个容易被忽略的前提
不少团队在优化参数问题的同时,把入口页本身改成了需要登录或带人机验证的地址,结果蜘蛛连入口页都读不到,参数再怎么规范也没有意义。先把入口页的可访问性、响应速度、链接是否可见确认一遍,再谈参数层面的收敛,顺序会顺一些。