很多站点在流量统计、广告投放或分享链接里会带上一串参数,比如 ?utm_source=...、?from=...、?sessionid=...。这些 URL 一旦被搜索引擎发现,就有可能独立进入抓取和收录流程。结果就是同一个页面在索引里出现多个地址,标题和摘要还可能不一样。要处理这个问题,先别急着全站屏蔽参数,而是把参数分成三类来看。
第一类:跟踪与来源参数
utm_*、gclid、fbclid、from、share_source 这类参数,只记录用户从哪来,不改变页面内容。它们对用户和搜索引擎都没有实际价值。理想状态下,同一篇内容只保留一个不带跟踪参数的规范 URL。处理方式通常是:站内链接不要主动带这些参数;外部投放链接可以带,但页面本身要用 canonical 指向干净地址;如果参数数量极大,也可以在 robots.txt 里屏蔽带特定参数的路径,但要先确认这些 URL 没有独立内容。
第二类:功能与会话参数
sessionid、sid、phpsessid、token 这类参数和用户会话绑定。不同用户访问同一个页面,URL 可能不同。这类参数容易造成大量重复抓取,而且内容对搜索引擎没有区别。常见的做法是让服务器不要对搜索引擎爬虫分配会话 ID,或者在 robots.txt 中屏蔽带 session 参数的 URL。如果无法从服务端处理,至少要用 canonical 指向无会话参数的版本。要注意,屏蔽和 canonical 是两种手段,前者阻止抓取,后者提示规范地址,不要同时用错。
第三类:筛选、排序与分页参数
?color=red、?sort=price_asc、?page=2 这类参数会改变页面展示的内容或顺序。它们不一定都是垃圾 URL,有的筛选组合本身有搜索需求。处理时要看“内容增量”:如果参数变化后只是同一批商品的顺序变了,或者筛选出来的结果和主列表高度重叠,可以考虑 canonical 指向主列表,或者用 noindex 让页面不被索引但仍可抓取。如果某个筛选组合有独立价值,比如“红色连衣裙”确实有用户搜索,那就保留它,并做好标题和描述。分页参数则是另一回事:分页页面通常可以抓取,但不一定要全部索引,具体看内容量和站内结构。
处理顺序:先看日志,再动手
不要一上来就改 robots.txt。先看服务器日志和搜索控制台里的抓取统计,确认哪些参数 URL 真的被频繁抓取、有多少已经被收录。然后按影响面排序:跟踪参数影响最大、最容易批量处理,优先做;会话参数次之;筛选和分页参数要逐个判断,不要一刀切。处理之后观察一段时间,看抓取请求是否下降、索引中的重复 URL 是否减少。索引更新需要时间,不要指望第二天就干净。
判断一个参数 URL 该不该保留,最简单的标准是:如果去掉参数后,页面主要内容没有变化,那它大概率不需要独立收录。
几个常见误区
- 用 robots.txt 屏蔽参数 URL,同时又希望这些页面被索引,这两件事互相矛盾。
- canonical 指向干净地址,但站内链接仍然大量带参数,搜索引擎还是会把带参数的 URL 当作入口。
- 把所有参数 URL 都 301 到主地址,可能误伤真正有内容的筛选页,也可能造成跳转链过长。
- 只处理首页和栏目页,忽略了站内搜索、分享按钮和广告落地页产生的参数链接。
参数 URL 的收录问题,本质上是 URL 规范问题。先分清参数的作用,再决定是屏蔽抓取、指定规范地址,还是保留并优化。处理过程中以日志和实际收录数据为准,别为了“看起来干净”而把有搜索需求的页面一起砍掉。