很多站点的抓取问题不是出在首页或栏目页,而是出在筛选、排序、分页这些带参数的链接上。运营一上线筛选功能,蜘蛛很快就能顺着这些链接发现几十上百个变体地址,抓取日志里的 URL 数量在几天内翻倍。这些地址大多内容相近,却各自占用一次抓取机会。
参数 URL 是怎么被蜘蛛看到的
常见入口有三类。一是页面上的筛选链接本身就是可点击的 a 标签,蜘蛛顺着 DOM 就能拿到;二是站点地图或分页聚合页里列出了带参数的地址;三是内容由脚本渲染,脚本请求接口后生成链接,蜘蛛在渲染阶段同样可能拿到。三类入口叠加,参数 URL 的发现速度往往比新文章还快。
组合爆炸:几条参数就能撑出上千个地址
假设一个列表页有 5 个筛选项、3 种排序、每页 20 条共 30 页,理论上可以拼出 5×3×30 的地址组合。实际数量往往更多,因为参数顺序不同又被当成不同 URL。蜘蛛会把这些地址一个一个放进待抓队列,站点的抓取资源被大量消耗在内容几乎一样的页面上,真正需要更新的详情页反而排在后面。
蜘蛛对这类地址的常见反应
- 首次抓取大多返回 200,内容与主列表高度相似;
- 重复抓取多次后,部分地址会被降低抓取频次;
- 如果参数地址返回空结果页,容易被当成低质页面;
- 如果筛选页触发大量数据库查询,响应变慢,抓取超时会增多。
比较稳妥的处理方式
- 固定一个规范版本。只让一组参数组合可以被抓取,其余组合用 rel=canonical 指回主列表,或在服务端统一重定向。
- 控制可抓取的维度。把筛选维度分成有搜索需求和纯浏览两类,只放行前者,后者用 robots.txt 或页面级 noindex 收住。
- 排序参数不参与抓取。排序通常对用户有用,对蜘蛛意义不大,可以在链接上加 nofollow,或让排序地址指向不带排序参数的规范地址。
- Sitemap 只放规范 URL。不要把带参数的地址写进站点地图,否则等于主动给蜘蛛指路。
- 分页保持可抓取,但限制深度。前几页放行,后面的分页用“查看更多”或按需加载,避免无限翻页。
顺带影响:抓取压力会传导到服务器
参数页通常不走缓存,每次请求都要查一次数据库或做一次聚合计算。当蜘蛛在短时间内集中抓取这类地址,服务器负载上升,正常用户的访问速度也会受影响。把参数地址收敛掉,既省抓取预算,也减轻服务器在抓取高峰期的压力。
怎么验证处理有没有效果
处理之后,重点看抓取日志里参数 URL 的占比是否下降、状态码分布是否更集中、详情页的抓取次数是否回升。如果日志里参数地址仍然很多,需要回头检查内链、站点地图和脚本渲染三条路径,找出还在持续输出这些链接的位置。
参数 URL 不是不能存在,而是要有边界。把有限的抓取机会留给真正有内容差异的地址,是站点运营里成本较低、见效相对可控的一步。