站内搜索页、标签聚合页、筛选排序页,往往不是运营手动做出来的,而是系统根据用户输入或内容分类自动开出来的地址。对访客来说方便,对蜘蛛来说却容易形成一条没有尽头的路径:每换一个关键词、每多勾一个筛选条件,就会多出一个新 URL。
蜘蛛为什么会在这里绕圈
蜘蛛沿着链接向前走,它不会判断某个链接看起来有没有价值,只要出现在 HTML 里,就进入待抓取队列。当页面之间互相链接,尤其是列表页链到筛选页、筛选页又链回列表页时,可抓 URL 的组合数量会快速膨胀。抓取预算有限,被这些地址占掉的部分,本该留给真正需要更新的内容页。
三类常见的抓取迷宫
站内搜索结果页
搜索框只要能被外部拼出参数,就能生成几乎无限的 URL。这类页面内容随关键词变化,蜘蛛可能把它当成独立内容页;同时它往往还包含大量指向站内其他页面的链接,相当于给蜘蛛开了一个可以不断自我繁殖的入口。
标签与聚合页
单个标签页通常没有问题,问题出在标签叠加:两个标签组合成一个地址,三个标签再组合一个。当聚合页本身还带分页时,地址数量会再乘一层。
分面导航与排序参数
颜色、尺码、价格区间、排序方式,每一项都是一个参数。用户勾选组合出来的地址,蜘蛛并不理解其中含义,只会照单抓取。如果分面选项是直接写在 HTML 里的 a 标签,情况会更明显。
先看看自己有没有这个问题
不用复杂工具,几个地方就能看出苗头:
- 服务器日志里,抓取次数排前几位的 URL,是不是集中带着同一类参数。
- 站内搜索结果页、筛选页被蜘蛛抓取的次数,是否明显高于内容页。
- Sitemap 里提交的 URL 总数,和内链实际能到达的 URL 总数差了多少。
- 日志中大量地址返回 200,但页面内容几乎相同。
常见的处理思路
处理的目标不是让蜘蛛抓到更多,而是让抓取落在你希望它抓的地址上。
- 参数拦截:在 robots.txt 中对带特定参数的路径做限制,例如筛选、排序参数。这只是减少抓取,已经进入索引的地址不会因此立刻消失,需要配合其他手段。
- 收敛可抓链接:分面导航的选项不出现在 a 标签里,改用表单或前端交互触发;标签叠加页不主动放出链接。
- 规范化地址:给筛选页、搜索结果页设置 canonical,指向对应的主列表页,让蜘蛛知道哪个地址更该被当作代表。
- Sitemap 只提交有代表性的地址:把组合参数页排除在外,避免 sitemap 反而成为这些地址的另一个入口来源。
- 内链有意识地绕开:列表页的“相关标签”“热门搜索”如果一定要放,尽量控制在少量、稳定的地址上。
顺带注意源站负载
搜索页和筛选页通常每次请求都要查数据库,比静态内容页更吃资源。蜘蛛集中抓这类地址时,源站响应时间容易拉长;一旦响应变慢甚至超时,蜘蛛的抓取节奏也会被拖住,这段时间里正常页面的更新可能被推迟。给这类路径单独限流,或者在缓存层做处理,通常比事后去日志里翻原因更省事。
抓取路径的设计,本质上是在回答一个问题:你希望蜘蛛把时间花在哪里。答案往往不是更多 URL,而是更明确的 URL。