很多站点的抓取问题不是出在重要页面抓不到,而是出在蜘蛛被大量无意义的地址带走。站内搜索结果页、日历页、排序与筛选参数,都能在很短时间里生成成千上万个地址。这些地址往往内容稀薄、互相重复,却和内链、Sitemap 处在同一层,蜘蛛很难自己判断哪个该放弃。
URL 陷阱是怎么形成的
常见的结构是:一个基础页加一组可选参数,参数可以任意组合,页面之间又互相链接。地址数量按组合数增长,而不是按内容量增长。几类典型情况:
- 站内搜索结果页可以被索引,而结果页里又带分页链接,形成自我循环;
- 日历控件每天都能生成一个新日期地址;
- 排序参数(按价格、按时间、按销量)各自成页,且都带完整内链;
- 会话 ID、来源追踪参数被写进链接,同一内容产生多个地址;
- 打印页、移动版、AMP 版没有做规范收敛,各自成为一套独立路径。
这些地址本身不一定错误,问题在于数量失控后会摊薄抓取资源,也让重要栏目和详情页的抓取间隔被拉长。
先确认蜘蛛是不是真的掉进去了
不要凭感觉判断,可以从抓取日志和站点工具里找证据:
- 统计一段时间内被抓取地址的分布,看带参数的地址占比是否明显高于内容页;
- 看抓取频次最高的目录是哪一个,是否集中在站内搜索、日历或标签页;
- 把 Sitemap 里的规范地址与日志里实际被抓的地址对照,差集有多大;
- 抽查这些地址返回的状态码与内容,是否存在大量近似重复的正文。
如果抓取量在涨、但新增收录的实质内容没涨,通常说明资源被低价值地址消耗了。
封堵手段的边界要清楚
几种常用做法效果不同,需要分清:
- robots.txt 的 Disallow:阻止抓取,但已收录或被外链指向的地址仍可能出现在结果里;
- noindex:必须允许抓取才能生效,和 Disallow 同时用会互相抵消;
- rel=canonical:用于合并近似页面,属于建议信号,不能替代入口收敛;
- nofollow 或直接移除链接:减少蜘蛛发现新组合地址的机会,通常是最直接的一步。
实践顺序一般是:先减少内链出口,再处理参数规则,最后才考虑屏蔽。只做屏蔽而不动内链,蜘蛛仍会反复尝试已经知道的地址。
给蜘蛛留下有用的出口
封堵的同时,要保证主路径依然通畅。可以按下面的做法自查:
- 分类页、分页、详情页保持普通 HTML 链接可达,不完全依赖脚本点击;
- Sitemap 只提交规范地址,不把筛选组合写进去;
- 分页使用可抓取的链接形式,并限制最大页数;
- 站内搜索页设 noindex 或禁止抓取,同时从主导航和正文区域移除入口;
- 排序、筛选默认走参数并做规范合并,避免每个组合生成独立静态地址。
改完之后看什么
调整不会立刻见效,通常要观察几周的抓取日志:带参数地址的抓取占比是否下降、重要目录的抓取频次是否回升、Sitemap 中包含的地址被抓取的比例是否提高。如果发现抓取总量整体下滑、而内容页的抓取并没有跟上,说明封堵过紧,需要把必要路径重新放出来。抓取结构的调整更像调阀门,需要边看日志边微调,而不是一次设置完就不再管。