搜尋抓取

日誌里的蜘蛛足迹:哪些 URL 在被反复抓,哪些一直没動静

後台統計只给出抓取结果,具体去了哪些 URL、在哪個目錄反复绕圈、哪些頁面從未被訪問,往往藏在服務器日誌里。本文讲清如何從 access log 里分辨搜尋引擎請求、做三组對比找出抓取浪費,並给出一份可执行的自查清單,把猜测換成可以核對的记錄。

搜尋抓取

日誌里的蜘蛛足迹:哪些 URL 在被反复抓,哪些一直没動静

後台的抓取統計通常只给结果:抓了多少、有多少错誤。但蜘蛛具体去了哪些 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 屏蔽的路径,多半是外鏈或舊連結留下的,需要判断是否要處理。
  • 抓取深度停在第二、三层,再往下的詳情頁几乎没有請求,通常要從内鏈和列表分頁上找原因。

可以立刻做的自查步骤

  1. 導出最近 7 到 30 天的日誌,過滤出搜尋引擎 UA,去掉静態资源請求。
  2. 按 URL 去重,統計抓取次數、最近一次抓取時間、狀態碼分布。
  3. 把结果和 Sitemap、内鏈可達的 URL 集合做對比,列出“被抓但没價值”和“有價值但没被抓”两份清單。
  4. 優先處理 5xx、429 與重定向鏈,保證蜘蛛来的时候能顺利拿到内容。
  5. 针對没被抓的頁面,從最近的上級列表頁或相關推荐里补一條可点击的連結,而不是只丢進 Sitemap。
日誌反映的是過去一段時間的抓取行為,不能用来预测下一次抓取。它的價值在于把猜测換成可以核對的记錄。

把這件事做成定期動作,比如每月看一次日誌、每季度對比一次 Sitemap 與實际抓取,站点运营中很多關于“蜘蛛是不是不喜欢我”的争论,往往能在資料面前直接找到答案。