很多站点内容本身不算多,但搜索蜘蛛每天访问的 URL 数量却很夸张。排查下来,问题往往出在列表页:一个栏目页加上排序、筛选、分页之后,可以组合出成百上千个地址,而其中大部分内容高度重复。蜘蛛把时间花在这些地址上,真正需要更新的详情页反而等不到抓取。
先弄清抓取预算被谁吃掉了
抓取预算并不是一个官方公布的固定数值,可以粗略理解为:在服务器响应速度、站点规模、页面重要程度等条件不变时,搜索蜘蛛愿意并且能够在你的站点上访问的页面数量上限。它是相对的,不是绝对的额度。
当站内存在大量低价值或重复的地址时,蜘蛛仍需要逐个请求、下载、解析,这些动作会占用时间。结果就是新发布的页面收录变慢,或者老页面更新很久才被重新抓取。
分页自查:链接是否可抓、是否唯一
分页本身不是问题,问题在于分页的处理方式是否清晰。
- 分页链接是否使用可点击的 a 标签,而不是依赖 JS 点击后才生成。
- 每一页是否有独立且稳定的地址,例如 /list/page/2/ 这类固定形式,而不是带随机参数的地址。
- 第 1 页是否存在两个地址(栏目根地址和 page/1),如果存在,建议只保留根地址,另一个做跳转或规范。
- 分页地址的标题、描述是否做了区分,避免几十页共用同一个标题。
如果分页内容只是列表摘要,且详情页已经能被正常抓取,可以让分页继续开放;如果分页页面上并没有独立内容,只是重复排列,就需要考虑是否值得让蜘蛛逐页深入。
筛选参数自查:控制组合数量
筛选是参数膨胀的主要来源。常见的诱因包括:排序参数、价格区间、标签筛选、会话参数、推广跟踪参数。
- 把排序、视图切换这类只改变展示顺序的参数,统一指向默认视图的规范地址。
- 会话 ID、来源跟踪等对内容没有影响的参数,尽量用 robots.txt 的 Disallow 规则拦截,或在服务器层面直接忽略。
- 筛选组合如果确实有搜索需求,可以为少数几个高频组合保留独立页面,其余组合不做索引。
- 避免筛选结果页之间互相链接成网,形成蜘蛛难以走出的循环。
判断标准很简单:这个参数地址,用户会不会主动搜索并希望看到它?如果答案是否定的,那它大概率不值得占用抓取资源。
canonical 与 robots 的配合
拦截参数有两种常见做法,各有取舍。使用 robots.txt 拦截,蜘蛛不会抓取该地址,但也不会看到页面上的 canonical 提示;使用 canonical 指向规范地址,蜘蛛会抓取页面,但能读到你的合并意图。一般来说:
- 完全无价值、纯技术性的参数,适合用 robots.txt 拦截。
- 有一定价值但内容重复的筛选页,更适合保留抓取并用 canonical 归并。
两者混合使用时要注意,不要让被拦截的地址又出现在站内链接或 sitemap 中,否则信息会互相矛盾。
用日志验证效果
调整之后不要凭感觉判断。可以定期查看服务器日志,统计蜘蛛对列表页和参数页的访问次数占比,观察调整前后是否下降,同时看详情页的抓取频次有没有变化。日志需要保留足够长的时间,否则对比没有依据。
调整通常不会立刻见效,蜘蛛重新学习站内结构需要一定周期。建议一次只改一类问题,改完观察一段时间再动下一项,这样才分得清是哪一步起了作用。