很多站長把蜘蛛来訪看成一件越多越好的事,每天盯着日誌里的抓取次數,數字一下降就着急。但蜘蛛的抓取能力是有限的:對同一個站点,它在一段時間内愿意發起的請求數量大致有個上限,這些請求怎么分配,取决于它判断哪些地址更值得爬。這就是常说的抓取预算(crawl budget)。
抓取预算不是發配額,更像做取舍
搜尋引擎不會给每個站点發一張固定額度的票。它更像是在權衡:一邊是站点体量、更新频率、服務器响應速度,另一邊是歷史抓取的效果——抓回去的頁面有多少新内容、有多少是重复的、有多少根本打不開。当它發現某個目錄翻来覆去都是相似的地址,或者经常返回 5xx,自然會把請求挪到別處去。
所以抓取量下滑往往不是惩罚,而是它在重新判断哪些地址有價值。想改善,重点不在于催它多来,而是把它從低價值路径上引開。
哪些頁面最容易吃掉抓取
- 參數组合頁:颜色、尺寸、排序、分頁叠加出来的地址,數量可能是内容頁的几十倍。
- 站内搜尋结果頁:几乎每個關鍵詞都能生成一個頁面,内容還高度重复。
- 空壳列表頁:分頁翻到後面只剩两三條内容,或者归档、日歷翻到没有内容的月份。
- 重复内容頁:同一篇文章因為不同入口生成了多個地址,蜘蛛逐個爬完,拿到的却是同样的信息。
- 埋得很深的頁面:需要点十几次才能到達,未必爬不到,但排队位置會很靠後。
用日誌做一次抓取分配自查
按目錄統計抓取占比
把日誌里蜘蛛的請求按路径前缀分组,看看請求量集中在哪些目錄。如果绝大部分落在參數頁、搜尋頁或歷史归档上,就說明抓取方向偏了,真正需要更新的栏目反而没被覆盖到。
看狀態碼分布
統計 200、301、404、5xx 各自的比例。5xx 比例偏高时,先解决服務器稳定性和响應時間,再谈抓取分配——服務器抖動时,任何结构調整的效果都會被抵消。
看有没有反复爬同一批地址
如果一批地址在短時間内被多次抓取,而頁面内容並没有變化,這些請求基本属于無效消耗。把它們列出来,通常就是下一步要處理的名單。
常见的几種處理方式
- 用 robots.txt 屏蔽整類地址:适合站内搜尋頁、内部接口、纯參數组合這類确定不需要被抓取的目錄。
- 给留存頁面加 noindex:頁面還需要用戶訪問、但不希望它參與索引时使用,注意它挡的是索引而不是抓取。
- 合並或收敛重复地址:能统一的入口统一,能合並的頁面合並,別让同一份内容散成十几個 URL。
- 减少入口連結:少在導航、侧栏、頁脚里堆全量連結,尤其是标簽、归档、排行榜這類大列表。
- Sitemap 只放需要發現的高價值地址:把地图当清單塞满低质頁面,等于自己给蜘蛛指了错路。
- 控制分頁深度:前几頁给正常入口,後面的頁碼不要整片铺在頁面上。
robots.txt 管的是抓取,noindex 管的是索引,两者不能互相替代。想减少抓取就用 robots.txt,但要確認這些地址以後确實不需要被爬;想保留頁面但不让它參與索引,才用 noindex。用错方向,既省不下抓取,還可能把该保留的頁面挡在门外。
抓取量突然下滑,先排查這几處
- 服務器近期是否频繁超时或返回 5xx。
- robots.txt 是否被誤改,屏蔽了整站或大批目錄。
- 是否上线了大量新地址,把抓取分散到了低质頁面上。
- 是否新增了复杂參數或多层篩選,導致地址數量暴涨。
- 内鏈结构是否變動,主要栏目是否被移出了導航。
抓取预算這件事没有一次性解决方案,它更像定期体检:每隔一段時間翻翻日誌,看蜘蛛把時間花在哪,然後做小幅調整。站点结构清晰、更新稳定、服務器可靠,抓取自然會往有價值的方向倾斜。