很多站点的 URL 并不是靠编辑一篇篇写出来的,而是由站内搜索、标签、专题聚合自动生成的。这类页面给用户提供了入口,也给蜘蛛提供了一条几乎没有尽头的爬行路径。问题不在于它们存在,而在于蜘蛛会不会把大量抓取时间耗在这些页面上。
蜘蛛是怎么找到这些页面的
最常见的情况是链接就摆在明面上:搜索框提交后的结果页、文章底部的标签云、侧栏的热门关键词、专题页里的“更多”按钮。只要这些链接是标准的 a 标签,蜘蛛顺着首页走两三层就能碰到。
另一条路是页面里的分页和排序。搜索结果的第二页、第三页,标签页的翻页,往往带参数拼接。如果这些链接互相串联,蜘蛛就会沿着一条链一直走下去。
还有一种是站点地图或者内链系统把标签页全量提交。数量一多,蜘蛛发现得很快,但抓取也会更集中地落在这些页面上。
为什么容易变成负担
- 组合数量不可控。多个标签叠加、关键词排序变化,都可能生成新的 URL。
- 内容重复度高。同一批文章换个顺序出现在多个列表里,页面主体差别不大。
- 对服务器有压力。站内搜索通常要查数据库,蜘蛛并发请求时的开销比静态页明显。
- 挤占抓取分配。真正需要更新的详情页,排在这些列表页后面。
这些影响不会立刻显现,通常在日志里表现为:某个参数页被反复抓取,而新发布的文章迟迟没有访问记录。
哪些留下,哪些收敛
值得保留的
有明确搜索需求、内容相对稳定、并且有真实内链指向的标签页,可以保留。比如固定的专题分类、和业务强相关的少数关键词页面。它们既是用户的入口,也是蜘蛛理解站点结构的线索。
建议收敛的
- 带任意关键词参数的搜索结果页,尤其是可以被外部构造成无限组合的。
- 标签交叉组合页,比如两个以上标签叠加生成的列表。
- 排序、视图切换、每页数量这类纯展示参数。
- 内容为空或者只有几条结果的低质聚合页。
处理方式可以按强度区分:robots.txt 禁止抓取带参数的路径,是对蜘蛛最直接的约束;页面内链接加 rel="nofollow",或者用 JS 触发而不给出可抓取的 a 标签,能减少发现;对仍需保留的页面加上规范的 canonical,把信号归到主列表页。需要注意的是,禁止抓取并不等于禁止收录,如果外部有链接指向这些 URL,它们仍可能出现在结果里,只是蜘蛛看不到内容。
几个容易踩的坑
- 一刀切把标签页全禁掉,结果蜘蛛失去了发现新文章的路径。
- 只在 robots 里写规则、不做内链收敛,蜘蛛仍在反复尝试被禁止的 URL。
- 搜索结果页对未登录用户可见,对蜘蛛也可见,却忘了加参数限制。
- 站内搜索接口没有做频率限制,蜘蛛密集请求时拖慢整站响应。
用日志确认效果
调整之后不要只看 robots 文件,打开服务器日志,按路径分组统计蜘蛛的访问次数和状态码。重点看两件事:参数页的请求量是否下降,详情页的抓取量是否相应上升。如果两周后抓取结构没有变化,可能是内链没有真正改掉,或者有外部链接持续把蜘蛛引向旧路径。
站内搜索和标签聚合页本身不是问题,问题在于它们是否占据了那些你希望蜘蛛优先走的路径。入口留几个够用的,剩下的交给规则去收敛,比全部开放或者全部封死都更稳。