筛选、排序、分页参数在电商站和内容站几乎无处不在。对用户来说,点两下就能缩小范围;对蜘蛛来说,每一个参数组合都可能被当成一个新地址。如果不加约束,抓取时间会被大量相似页面占走,真正需要更新的详情页反而排在后面。
参数 URL 为什么容易变成抓取黑洞
一个列表页挂上品牌、价格区间、颜色、排序方式几个条件,组合数量很容易上千。这些页面的标题和正文往往只有细微差别,甚至主体内容完全一致。蜘蛛是按链接发现地址的,只要内链里存在入口,它就会顺着走。抓取额度有限,被低价值地址填满,详情页的新内容就可能延迟被发现。
先给参数分三类
- 功能型参数:排序方式、每页条数、会话跟踪(如 sid、from)。对用户操作有用,对蜘蛛几乎没有价值。
- 结果型参数:筛选后形成的独立需求页,比如“某品牌 + 某价位”。确实有搜索需求时,可以保留少量并让它们进入内链。
- 纯重复参数:大小写不同、空值参数、参数顺序不一致造成的同一页面。这类应当统一到单一地址形态。
处理顺序:内链、robots、canonical、Sitemap
内链只保留必要入口
蜘蛛主要靠链接发现地址,所以内链是最有效的一道闸。把筛选面板改成需要点击或由脚本触发才能生成链接的形式,默认列表页就只会输出一组干净地址。也可以在排序链接上加 nofollow,但要清楚它只是提示,不是禁止,长期依赖它并不稳妥。
robots 与 canonical 的分工
robots.txt 的 Disallow 只是阻止抓取,被拦下的地址不会因此获得整合信号;canonical 是页面级的整合建议,但对根本不抓的 URL 无法生效。两者不能互相替代。对“不想抓、也不需要索引”的参数,用 Disallow;对“可以抓、但希望归并到主地址”的,用 canonical 更合适。
Sitemap 只放真正想被抓的页面
Sitemap 里保留主列表页和详情页即可,不要把参数变体一并塞进去。它给出的是一份明确的候选清单,混入大量低价值地址只会稀释它的作用。
用日志验证是否有效
- 取一段时间的蜘蛛请求,按路径和参数归类,看参数化地址占全部抓取请求的比例。
- 观察这些请求是否集中在少数模板上,如果分散在几十种组合里,说明内链还没收住。
- 对比详情页从发布到首次被抓的间隔有没有缩短。
- 检查是否存在“参数页反复抓、详情页长期不动”的偏移。
服务器侧同样是前提
参数页多是动态渲染,数据库查询更重。如果这些地址响应慢或频繁返回 5xx,蜘蛛的重试会进一步挤占抓取额度,前面做的收口也会被打折扣。给参数页加缓存、限制过深的组合层级,比事后清理日志更省事。
抓取路径是可以设计的:想让蜘蛛走到哪里,就先从首页出发数一数,有多少条链接能指向那里。
参数治理不是一次性动作。每上线一个新筛选功能,就会带来一批新地址。把“上线前检查内链与参数形态”写进发布流程,比事后翻日志补救轻松得多。