網站後台的訪問統計通常只保留一部分样本,而且经過聚合處理,很多细节已经看不到了。服務器日誌不一样,它是原始记錄:搜尋蜘蛛每一次請求都會留下時間、URL、狀態碼、响應大小和 User-Agent。把日誌按蜘蛛篩選出来看一遍,抓取上的問题往往不需要猜,直接就能對上位置。
日誌里先看哪些字段
不同服務器的日誌格式略有差別,但下面這些字段基本都有,而且足够支撑大部分排查:
- 時間戳:判断抓取集中在白天還是凌晨,是否與站点负载高峰重叠。
- 請求方法:GET 占绝大多數,出現大量 HEAD 請求时值得留意。
- 完整 URL:包含參數,用来判断蜘蛛是否在抓篩選頁、跟踪參數頁。
- HTTP 狀態碼:200、301、404、500 的分布是最直接的线索。
- 响應体大小:狀態碼 200 但字节數長期很小,可能是空壳或占位頁面。
- User-Agent:用来区分不同搜尋引擎的蜘蛛,以及被伪装的采集請求。
先把蜘蛛請求單獨筛出来
用 User-Agent 關键字過滤一次,把正常用戶訪問和蜘蛛訪問分開。這样做的意义在于,两類流量的問题往往不是一回事:用戶訪問少但蜘蛛訪問多的頁面,通常是列表頁或聚合頁;蜘蛛訪問少但用戶訪問多的頁面,可能是入口藏得太深。
篩選时不要只看單一關键字,把主流搜尋引擎的 UA 都列進来,同时留意同一 IP 段高频請求却带着蜘蛛 UA 的记錄——這類請求不會遵守抓取規則,處理方式應该和真正的蜘蛛区分開。
狀態碼分布能說明什么
把日誌按狀態碼分组統計,通常會看到几種典型情况。
5xx 集中出現
如果 500、502、503 集中在一個時間段,先查那段時間的服務器狀態:是不是發布導致進程重啟、資料库连接被占满、或者是某個接口超时拖垮了响應。蜘蛛连續拿到几次 5xx 之後,往往會降低抓取频率,恢复需要時間。
404 堆积在某個目錄
零散的 404 很正常,但如果某個目錄下的 404 數量明顯突出,通常意味着站内還有舊連結指向已被刪除的地址,或者 sitemap 里残留了失效 URL。這两個来源都要回去检查,而不是只盯着日誌。
重定向被反复請求
301 出現次數多不一定是坏事,說明舊地址在被逐步替換。但如果同一個舊 URL 長期反复出現 301,說明内鏈里還在用它,應该把連結直接改成最终地址。
抓取频次與目錄分布
把日誌里蜘蛛請求的 URL 按一級目錄归並,統計每類目錄占了多少請求,再對照站点的真實重点。常见的情况是:内容頁被訪問的次數,遠少于篩選頁、标簽頁、分頁列表和站内搜尋结果頁。這些地址由系統自動生成,數量可以無限扩張,很容易占掉大部分抓取請求。
處理思路是先看這些頁面有没有獨立價值,没有的做合並或屏蔽入口,有價值的补上 canonical 指向主地址,同时把内鏈從這些頁面引回真正需要被看到的内容。
几個常见現象與處理方向
- 某個頁面被抓了上千次:一般是列表頁每有新内容就更新一次,先確認是否真的需要這么高的更新频率。
- 响應大小長期為 0:检查是否返回了空模板,或者内容由脚本加载,首次响應几乎没有正文。
- 抓取集中在深夜而白天几乎不来:可能是白天响應慢,或者有临时性的屏蔽規則在起作用。
- 重要栏目几乎没有抓取记錄:多半是没有内鏈入口,先把它接回導航或相關推荐里。
日誌要按時間留存
單次分析只能看到一個切面。建议按月保留原始日誌文件,至少保留半年,這样改版、調整结构、上线新栏目之後,可以拿前後两段時間做對比,看抓取结构有没有朝预期的方向變化。對比的重点不是請求總量的涨跌,而是目錄占比、狀態碼分布和核心頁面的抓取次數。
日誌分析的價值在于定位問题,不在于追求某個數字好看。抓住關键頁面的抓取是否稳定、異常狀態碼是否在减少,比盯着訪問總量更有意义。
养成定期看日誌的习惯,把它和站点结构、栏目規划放在一起考虑,很多抓取上的疑問會在记錄里找到答案。