很多做站点运营的人會有一個模糊的印象:蜘蛛每天来抓多少次,好像是它自己决定的,站点只能被動等待。實际情况介于两者之間——蜘蛛的抓取量确實没有官方给出的固定配額,但它受两件事共同约束:一是蜘蛛愿意在這個站点上花多少時間,二是服務器能在不崩溃的前提下承受多少次請求。這两者的交集,通常被叫做抓取预算。
抓取预算不是一個可以查看的數字,而是一種结果。当它被大量低價值地址消耗掉时,真正需要更新的内容往往要排在後面才被訪問到。
抓取预算通常被消耗在哪里
先別急着優化,先想清楚哪些地址在反复占用請求。常见的情况大致有這么几類:
- 參數與篩選地址:同一批内容通過排序、篩選、跟踪參數生成大量可訪問地址,蜘蛛會顺着連結一個個试。
- 重复内容頁:列表頁的多頁翻頁、打印頁、移動版镜像,内容高度相似却各有獨立地址。
- 失效與软 404 頁面:返回 200 但内容為空,或長期 404 却仍被内鏈指向的地址。
- 慢响應頁面:單個頁面响應越久,蜘蛛在同样的時間窗口里能抓的數量就越少。
- 深层無用頁面:归档頁、搜尋结果的空结果頁、用戶中心里的無意义頁面。
這些問题單獨看都不算嚴重,但它們叠加在一起,會把抓取時間切得七零八落。
先看日誌,再動手改
判断抓取预算有没有被浪費,最直接的办法還是看服務器日誌。不需要复杂工具,把一周左右的訪問记錄導出来,篩選出蜘蛛的 User-Agent,然後按下面几個维度分類:
- 蜘蛛抓取的地址里,有多少是真正有内容價值的頁面。
- 有多少請求落在參數頁、分頁、标簽聚合頁上。
- 有多少請求返回了 404、301、302 或 5xx。
- 重要栏目頁和新發布内容的被抓次數,與低價值地址相比是什么比例。
如果發現某一類低價值地址的抓取次數遠超内容頁,那基本可以判断抓取预算在這里被明顯消耗了。
把額度让给重要頁面
調整的方向不是去限制蜘蛛,而是减少無效地址、降低單次抓取成本。可以按顺序做這几件事:
- 收敛參數地址:對篩選、排序類參數,確認是否真的需要被收錄。不需要的用 robots.txt 或規范标簽處理,避免生成可無限扩展的地址。
- 梳理内鏈入口:把指向空结果頁、失效頁的連結清理掉,减少蜘蛛顺着連結走進死胡同的概率。
- 處理重复頁面:列表翻頁、镜像頁面用 canonical 指明主版本,让蜘蛛不必反复抓取相似内容。
- 控制單頁体积:把首屏不必要的大图、脚本延後加载,缩短响應時間,同样的抓取窗口能覆盖更多頁面。
- 给重要頁面稳定入口:栏目頁、核心内容頁放在主干導航和列表第一頁,別让它們只靠深层連結被發現。
抓取预算的優化,本质上不是让蜘蛛多来,而是让它来的时候別白跑。
更新节奏也要配合
站点更新忽快忽慢,同样會影响抓取效率。長期不更新的栏目,蜘蛛来過几次發現没變化,訪問频率自然會下降;突然一次性發布几十篇内容,又可能因為入口和連結结构没跟上,只被抓到其中一小部分。
比較稳妥的做法是保持相對稳定的更新频率,新内容上线後確認它在栏目列表、相關推荐、Sitemap 里都有入口,让蜘蛛下一次来訪时能顺着已有路径找到它。
几個容易走偏的地方
- 把抓取预算当成一個可以手動調大的開關,實际上它只能通過减少浪費来相對提升。
- 為了省预算,把有價值的栏目頁也屏蔽掉,结果重要内容失去了被抓路径。
- 只盯着抓取次數,不看抓取到的頁面质量,次數多但都在空轉没有意义。
抓取预算這件事没有一次到位的方案,站点结构在變,内容在增,需要定期回看日誌,確認蜘蛛的訪問有没有落在该落的頁面上。把它当成一項日常的运营习惯,比临时排查要省力得多。