做电商或内容站的运营,常常会遇到这样一种情况:同一个商品、同一篇文章,页面上被生成了几十甚至上百个地址——加个筛选条件是一个,换个排序方式又是一个,带个来源追踪参数还是一个新的。这些 URL 都会被蜘蛛发现,也都会占用抓取额度,但真正需要被收录的往往只有其中一两个。
参数 URL 是怎么被蜘蛛发现的
蜘蛛并不知道哪个地址是规范版本,它只会顺着链接和 Sitemap 走。参数 URL 的来源主要有几处:
- 页面上的筛选、排序、分页控件,每一个可点选项都可能是一个新地址;
- 站内搜索结果页、标签聚合页;
- 推广链接、分享链接里带上的 utm 参数、会话 ID;
- Sitemap 或接口中不小心带出的参数化地址。
只要这些地址在 HTML 里以可跟随的链接形式出现,蜘蛛就会把它们排进队列。问题不在于被发现,而在于发现之后,它们会跟真正重要的页面争抢有限的抓取次数。
先分清三类参数,再决定怎么处理
影响内容展示的参数
比如价格区间、颜色、尺寸筛选。这类地址对应的页面内容确实不同,如果本身有搜索需求,是可以保留并做规范化的;如果只是给用户中途筛选用,没有独立价值,就适合收紧。
不影响内容的参数
排序方式(价格从低到高)、视图切换(列表或网格)、追踪参数(utm_source、gclid)。这些地址指向的内容基本相同,属于典型的重复 URL,应当尽量不生成可跟随链接,或者通过 canonical 指明主版本。
分页与会话类参数
分页本身是正常的抓取路径,但要避免每页都叠加一串筛选条件;会话 ID、时间戳之类的参数一旦进入 URL,就等于每次访问都造出一个新地址,对抓取和缓存都不友好。
收敛手段各自能做到哪一步
- canonical 标签:把变体指向主版本,告诉搜索引擎哪个是规范地址。它不阻止抓取,只影响索引判断,适合内容相同但地址不同的情况。
- robots.txt 屏蔽:直接不让蜘蛛抓取带特定参数的路径,能省下抓取额度。但已经抓取并索引的地址不会因此自动消失,需要配合其他方式处理。
- 链接层面的控制:把筛选、排序等控件改成表单提交或按钮事件,而不是普通的可跟随链接;必须保留链接时,统一加上 canonical,或者用 nofollow 标记。
- Sitemap 只放规范版本:Sitemap 是站点主动提交的 URL 清单,里面出现什么,蜘蛛就更可能去抓什么。变体地址不应出现在这里。
- 参数顺序统一:如果确实需要保留带参数的地址,把参数顺序固定下来,避免 ?a=1&b=2 和 ?b=2&a=1 被当成两个 URL。
几个容易踩的坑
- 只加了 canonical,却在页面上保留大量可跟随的参数链接,抓取浪费依然存在;
- 用 robots.txt 屏蔽分页,导致深层商品页失去唯一的发现路径;
- 对全部筛选页一刀切屏蔽,把本来有搜索量的长尾页面也一起丢掉;
- Sitemap 里同时存在规范版本和变体版本,等于给蜘蛛两份互相矛盾的指引。
判断标准可以简单一些:这个地址如果被用户单独分享出去,是否值得打开?如果不值得,它大概也不需要被蜘蛛抓取。
回到抓取额度这件事
站点能获得的抓取次数不是无限的,服务器响应越慢、错误越多,蜘蛛愿意投入的并发就越少。参数 URL 的收敛,本质上是把这份额度从重复页面上收回来,交给真正需要更新的内容页和新上线的 URL。可以先从抓取日志里挑出被抓次数最多、但内容高度相似的地址,看看它们是从哪个链接进来的,再决定是改链接结构、加 canonical,还是直接屏蔽。
不需要一次改完。每隔一段时间看一次日志,把新增的参数类型收一收,抓取分布通常会慢慢朝着你希望的方向走。