後台的抓取統計通常只给结果:抓了多少、有多少错誤。但蜘蛛具体去了哪些 URL、在哪個目錄反复绕圈、哪些頁面從上线起就没被訪問過,這些细节大多藏在服務器的 access log 里。学會看日誌,比反复猜“蜘蛛喜不喜欢我的站”要實际得多。
先分辨清楚日誌里谁是谁
原始日誌每行通常包含訪問 IP、時間、請求方法、URL、狀態碼、返回字节數、User-Agent。先按 UA 過滤出搜尋引擎的抓取請求,再處理其余部分。
- Googlebot:UA 可以伪造,正式判断要做反向 DNS 驗證,或者用 Search Console 的抓取統計交叉比對。
- Bingbot、YandexBot 等:同样可以查官方 IP 段,避免把采集程序誤判成蜘蛛。
- 狀態碼字段:200、301、404、5xx、429 各自代表不同的問题,別只看總數。
三组對比,最快看出問题
被抓的 URL 與 Sitemap 提交的 URL
把日誌里的 URL 去重,和 Sitemap 里的條目對一遍。两邊差异大,通常說明两條路的信息没對齐:Sitemap 里有大量從没被抓過的低频頁,而蜘蛛每天在抓的却是一批没提交、也不打算收錄的地址。
高價值目錄與被反复抓的低價值 URL
按目錄聚合請求數,往往能看到某個篩選參數頁、排序頁或站内搜尋结果頁占了大部分抓取量,而商品詳情、文章正文這些真正需要被發現的頁面只占很小一部分。這類頁面本身不是错誤,但它們消耗的是同一份抓取能力。
抓取频率與时段分布
把請求按天、按小时画出来。如果某段時間抓取量突然掉到很低,同时 5xx 或 429 上升,問题通常出在服務器而不是内容;如果抓取量長期平稳但新 URL 迟迟不出現,問题更可能出在連結结构上——新頁面没有從任何被抓過的頁面連結過去。
几個值得警惕的信号
- 同一 URL 被高频重复抓取,狀態碼一直是 200 且内容没變,說明缓存头或參數寫法可能让蜘蛛認為它是新地址。
- 大量 200 却几乎零字节的响應,或者返回内容是“暂無内容”,容易被判定為软 404。
- 日誌里出現被 robots.txt 屏蔽的路径,多半是外鏈或舊連結留下的,需要判断是否要處理。
- 抓取深度停在第二、三层,再往下的詳情頁几乎没有請求,通常要從内鏈和列表分頁上找原因。
可以立刻做的自查步骤
- 導出最近 7 到 30 天的日誌,過滤出搜尋引擎 UA,去掉静態资源請求。
- 按 URL 去重,統計抓取次數、最近一次抓取時間、狀態碼分布。
- 把结果和 Sitemap、内鏈可達的 URL 集合做對比,列出“被抓但没價值”和“有價值但没被抓”两份清單。
- 優先處理 5xx、429 與重定向鏈,保證蜘蛛来的时候能顺利拿到内容。
- 针對没被抓的頁面,從最近的上級列表頁或相關推荐里补一條可点击的連結,而不是只丢進 Sitemap。
日誌反映的是過去一段時間的抓取行為,不能用来预测下一次抓取。它的價值在于把猜测換成可以核對的记錄。
把這件事做成定期動作,比如每月看一次日誌、每季度對比一次 Sitemap 與實际抓取,站点运营中很多關于“蜘蛛是不是不喜欢我”的争论,往往能在資料面前直接找到答案。