带参数的 URL 是怎么被蜘蛛抓到的
站内 URL 里出现问号很常见:分页、筛选、排序、来源标记、会话都可能往地址后面加参数。蜘蛛解析页面链接时看到的是完整的 href,只要链接可抓取,这个带参数的地址就会进入待抓队列。问题在于,同一个内容可能因此生成几十上百个地址,蜘蛛把时间花在这些地址上,真正需要更新的页面反而被推后。
参数 URL 常见的三类麻烦
- 地址数量膨胀:筛选条件可以自由组合,每多一个维度,地址数量就成倍增长。
- 内容重复:多个地址返回几乎相同的正文,蜘蛛难以判断哪个是主版本。
- 抓取浪费:大量参数页内容稀薄,却占用了服务器响应和蜘蛛的抓取时间。
先分清参数的类型
不是所有参数都要处理,先按作用分类:
- 影响内容的参数:分页 page=2、分类筛选、商品规格等,这类地址通常有独立内容,值得保留并让蜘蛛抓取。
- 不影响内容的参数:utm_ 系列、sessionid、来源标记之类,同一内容换参数不换结果。
- 排序类参数:排序方式不同但内容集合相同,容易和主版本形成重复。
把这三类分清楚,处理方式才有依据。全都拦截会丢掉分页和筛选页,全都不管则会让蜘蛛陷进参数组合里。
处理思路:先给规范版本,再收口入口
第一步是给出规范版本。页面里用 canonical 指向不带追踪参数的主地址,让蜘蛛知道哪个版本是代表。链接层面也尽量统一:站内导航、内链、分享按钮都输出干净的地址,不要一上来就带一堆标记参数。
第二步是控制入口。真正需要被蜘蛛发现的多维筛选页,可以只保留用户常用的几组组合,其余减少暴露;但要注意 robots.txt 只是阻止抓取,并不等于阻止地址被收录,如果地址已经从外链被发现,最好用其他方式处理。
第三步是让参数页给蜘蛛一点回报。分页写清页码和前后关系,筛选页在标题与正文里体现筛选条件,避免出现几十个几乎一模一样的空壳页面。
内链与服务器层面的配合
- 内链尽量指向规范地址,减少同一内容的多个入口。
- 筛选和排序页不要塞进主导航,避免蜘蛛每次抓取都先走一遍。
- 筛选结果页在服务端生成时注意响应时间稳定,不要让组合查询拖慢整站。
- 分页的第一页与带参数的第一页,保持一致的规范指向。
怎么验证处理是否有效
看服务器日志里带参数请求的占比,如果长期居高不下,说明还有大量参数地址在吸引抓取。再看抓取统计中这些地址返回的内容是否重复、状态码是否正常。对比处理前后,重点观察有效内容页的抓取次数有没有变化,而不是只看总抓取量。
参数本身不是问题,失控的参数组合才是。目标不是把所有问号地址都拦掉,而是让蜘蛛把时间花在有内容的地址上。