很多站长把蜘蛛来访看成一件越多越好的事,每天盯着日志里的抓取次数,数字一下降就着急。但蜘蛛的抓取能力是有限的:对同一个站点,它在一段时间内愿意发起的请求数量大致有个上限,这些请求怎么分配,取决于它判断哪些地址更值得爬。这就是常说的抓取预算(crawl budget)。
抓取预算不是发配额,更像做取舍
搜索引擎不会给每个站点发一张固定额度的票。它更像是在权衡:一边是站点体量、更新频率、服务器响应速度,另一边是历史抓取的效果——抓回去的页面有多少新内容、有多少是重复的、有多少根本打不开。当它发现某个目录翻来覆去都是相似的地址,或者经常返回 5xx,自然会把请求挪到别处去。
所以抓取量下滑往往不是惩罚,而是它在重新判断哪些地址有价值。想改善,重点不在于催它多来,而是把它从低价值路径上引开。
哪些页面最容易吃掉抓取
- 参数组合页:颜色、尺寸、排序、分页叠加出来的地址,数量可能是内容页的几十倍。
- 站内搜索结果页:几乎每个关键词都能生成一个页面,内容还高度重复。
- 空壳列表页:分页翻到后面只剩两三条内容,或者归档、日历翻到没有内容的月份。
- 重复内容页:同一篇文章因为不同入口生成了多个地址,蜘蛛逐个爬完,拿到的却是同样的信息。
- 埋得很深的页面:需要点十几次才能到达,未必爬不到,但排队位置会很靠后。
用日志做一次抓取分配自查
按目录统计抓取占比
把日志里蜘蛛的请求按路径前缀分组,看看请求量集中在哪些目录。如果绝大部分落在参数页、搜索页或历史归档上,就说明抓取方向偏了,真正需要更新的栏目反而没被覆盖到。
看状态码分布
统计 200、301、404、5xx 各自的比例。5xx 比例偏高时,先解决服务器稳定性和响应时间,再谈抓取分配——服务器抖动时,任何结构调整的效果都会被抵消。
看有没有反复爬同一批地址
如果一批地址在短时间内被多次抓取,而页面内容并没有变化,这些请求基本属于无效消耗。把它们列出来,通常就是下一步要处理的名单。
常见的几种处理方式
- 用 robots.txt 屏蔽整类地址:适合站内搜索页、内部接口、纯参数组合这类确定不需要被抓取的目录。
- 给留存页面加 noindex:页面还需要用户访问、但不希望它参与索引时使用,注意它挡的是索引而不是抓取。
- 合并或收敛重复地址:能统一的入口统一,能合并的页面合并,别让同一份内容散成十几个 URL。
- 减少入口链接:少在导航、侧栏、页脚里堆全量链接,尤其是标签、归档、排行榜这类大列表。
- Sitemap 只放需要发现的高价值地址:把地图当清单塞满低质页面,等于自己给蜘蛛指了错路。
- 控制分页深度:前几页给正常入口,后面的页码不要整片铺在页面上。
robots.txt 管的是抓取,noindex 管的是索引,两者不能互相替代。想减少抓取就用 robots.txt,但要确认这些地址以后确实不需要被爬;想保留页面但不让它参与索引,才用 noindex。用错方向,既省不下抓取,还可能把该保留的页面挡在门外。
抓取量突然下滑,先排查这几处
- 服务器近期是否频繁超时或返回 5xx。
- robots.txt 是否被误改,屏蔽了整站或大批目录。
- 是否上线了大量新地址,把抓取分散到了低质页面上。
- 是否新增了复杂参数或多层筛选,导致地址数量暴涨。
- 内链结构是否变动,主要栏目是否被移出了导航。
抓取预算这件事没有一次性解决方案,它更像定期体检:每隔一段时间翻翻日志,看蜘蛛把时间花在哪,然后做小幅调整。站点结构清晰、更新稳定、服务器可靠,抓取自然会往有价值的方向倾斜。