很多人看服務器日誌时只盯着 HTML 請求,觉得蜘蛛来了一趟就是抓了一個頁面。實际上一次頁面訪問往往伴随一串附带請求:样式表、脚本、字体、图片,甚至頁面里引用的 JSON 接口。這些請求同样占用抓取配額,也會给服務器带来负载。理解這一点,有助于判断抓取预算到底花在了哪儿。
一次抓取不等于一個請求
蜘蛛拿到一個 URL 後,先取回 HTML,這一步是必须的。之後為了理解頁面结构、確認内容是否完整渲染,它可能繼續取回頁面里引用的外部资源。對以文本為主的站点,這部分開销不大;但對模板复杂、第三方脚本多的站点,一個頁面可能引出几十個资源請求。
需要說明的是,不同搜尋引擎對资源抓取的處理方式並不一致,有的會完整取回 CSS 與 JS 用于渲染,有的只做有限尝试。判断自己站点属于哪種情况,最直接的办法還是看訪問日誌里同一時間段的請求分布,而不是凭印象判断。
哪些资源請求属于無效消耗
- 返回 404 的脚本和样式:多半来自改版残留或错誤路径,蜘蛛每次走到頁面都會再撞一次。
- 带版本參數重复的资源:同一個文件因為參數不同被当成多個地址,抓取次數成倍增加。
- 未压缩的大图與封面图:几百 KB 的图片對判断頁面内容帮助有限,却要占用带宽和抓取時間。
- 被反复引用的第三方脚本:統計、客服、广告组件的域名不在你的控制范围内,抓取行為也难以预测。
减少無效资源抓取的做法
- 统一资源地址:去掉無意义的查询參數,用文件名或构建号管理版本,避免同一個文件存在多個地址。
- 修复 404:日誌里周期性出現的资源 404,值得單獨排查一次,收益往往比新增几個頁面更明顯。
- 让缓存层承担重复請求:静態资源交给 CDN 後,回源次數會明顯下降,蜘蛛重复取回的成本也随之降低。
- 合並與压缩:减少請求數量通常比压缩單個文件更直接。
- 谨慎使用 robots.txt 屏蔽资源:屏蔽 CSS 與 JS 可能让蜘蛛拿不到完整的頁面结构,反而影响它對頁面内容和連結的判断,渲染必需的资源一般不建议屏蔽。
屏蔽资源前先想清楚:你是想少让它抓几個文件,還是想让它看不清頁面。後者带来的损失通常更大。
体积和數量,哪個更值得管
從抓取节奏看,請求數量往往比單個体积影响更大。每個請求都要经歷解析、连接、等待响應,抓取時間被切成许多小段。压缩图片能省带宽,但把二十個請求並成三個,通常更快看到抓取节奏的變化。
從日誌里看资源抓取占比
在訪問日誌里按扩展名做一次粗筛:統計 CSS、JS、图片等後缀的請求量,再和 HTML 頁面請求量對比。如果资源請求占了大部分,且其中相当比例是 404 或重复地址,就說明抓取配額被消耗在了與内容無關的地方。這個動作不需要复杂工具,一次篩選或一條命令就能完成。
什么时候不用太在意
内容型小站、模板简單的站点,资源開销本来就低,不必為此专门調整架构。真正值得關注的是两種信号:资源請求數長期遠超 HTML 請求數;以及资源 404 長期存在,抓取時間集中在少數几個模板頁上。
抓取预算並不是一個固定數字,它随站点規模、更新频率、服務器响應速度變化。與其猜测額度,不如先把明顯的浪費止住:修掉 404,统一资源地址,把静態文件交给缓存层。做完這些再回头看日誌,蜘蛛花在 HTML 上的比例通常會有所變化。