搜尋抓取

日誌里的抓取覆盖:哪些 URL 被蜘蛛翻過,哪些一直没動静

判断抓取情况不能靠感觉。把站点期望被發現的 URL 整理成清單,再和服務器日誌做差集,就能看出哪些頁面被蜘蛛翻過、哪些一直没動静。文章讲清清單怎么建、日誌看哪几列、漏抓的常见原因,以及补漏的先後顺序。

搜尋抓取

日誌里的抓取覆盖:哪些 URL 被蜘蛛翻過,哪些一直没動静

很多站点的抓取情况是靠感觉判断的:最近好像抓得挺勤,或者感觉新頁面一直没動静。感觉容易骗人。真正能回答“蜘蛛翻過哪些 URL”的,只有服務器訪問日誌,加上一份你自己维護的 URL 清單。把這两份東西對起来,抓取覆盖才從印象變成可以核對的事實。

先有一份“期望被發現的 URL”清單

没有清單,日誌就只是一堆路径。清單的来源可以有几個:Sitemap 里提交的地址、栏目頁和列表頁能点到的地址、資料库或後台導出的公開内容地址。合並之後做去重和归一化,把大小寫、结尾斜杠、常见跟踪參數统一成一種寫法,否則同一頁會以多個样子出現,差集算不准。

清單里要先剔除本来就不该被抓的:後台、登入、购物车、批量導出、測試目錄、纯參數篩選頁。這些抓不到是正常的,混在清單里只會制造假問题。

日誌里需要看哪几列

至少保留時間、請求路径、狀態碼、UA、IP、响應字节數和 Referer。只看總量没有意义,一天十萬次請求,可能九萬次都落在几個列表頁和參數頁上,真正的新内容一次没碰。

  • 時間:看新頁面發布之後多久出現第一次抓取,而不是看全天總量。
  • 路径:確認被抓的是内容頁,還是被篩選參數、分頁、站内搜尋占满了。
  • 狀態碼:200 是正常,3xx 看跳轉鏈,4xx 和 5xx 要單獨拉出来。
  • 响應字节數:明顯偏小的 200 往往是空壳頁或错誤頁。
  • Referer:能大致看出蜘蛛是從哪個入口頁走過来的,對判断内鏈路径有帮助。

UA 只能作為初筛,不能当唯一依據。伪造 UA 的情况不少,结合 IP 段、抓取行為和官方驗證方式一起看更稳妥,這一步不必在本文展開。

做一次差集,看漏掉的 URL 長什么样

把清單里的 URL 和日誌中真實出現過的路径對齐,剩下的就是没有被抓到的部分。這部分通常不是铁板一块,可以分成几類:

  • 完全没出現:大概率是没有入口,或者入口藏得太深。
  • 只出現一次就再没来過:可能是首轮抓取失敗,或者頁面被判定價值不高。
  • 出現過但狀態碼不對:5xx、403、软 404 都會让這一趟白跑。
  • 只抓到了參數變体:同一頁有多個地址寫法,被抓的是不是你希望的那個。

漏抓的常见原因

按经驗,原因往往集中在下面几處,而不是“蜘蛛不喜欢這個站”這種说法。

  • 内鏈没有指向,Sitemap 里也漏了,頁面等于没有對外通道。
  • 連結由脚本渲染後才出現,首轮取到的 HTML 里根本没有這個地址。
  • 层級太深,要经過四五层列表才点得到。
  • robots.txt、noindex、canonical 設定时誤伤了自己的正常頁面。
  • 服務器不稳定,抓几次超时或 5xx 之後,抓取节奏明顯放慢。
  • 參數頁太多,把抓取額度大量消耗在低價值地址上。

补漏的先後顺序

补漏不建议從“再多提交几次”開始,先處理會反複製造問题的环节。

  1. 把服務器和响應狀態稳定下来,5xx、超时、连接重置先解决。
  2. 检查 robots 和頁面級指令,確認没有誤拦正常内容。
  3. 给缺入口的頁面补内鏈,從相關栏目頁或正文里自然指向。
  4. 更新 Sitemap,让清單和站点實际结构保持一致。
  5. 收敛低價值 URL,减少無效抓取對正常頁面的挤占。

這几步做完再观察日誌,通常能看到原先“完全没出現”的路径開始出現。出現之後還要繼續看第二趟、第三趟,確認不是抓一次就走。

多久核對一次比較合适

内容更新频繁的站点,半個月到一個月核對一次就够,重点是看趋势而不是單次快照。更新慢的站点可以拉長到季度。每次记錄三類數字:清單總量、日誌中出現過的比例、狀態碼異常的比例。连續几次對比,比一次性的结论可靠得多。

抓取覆盖不是一次性驗收,而是持續维護的事。清單、日誌、内鏈、Sitemap 四样東西保持同步,蜘蛛的訪問记錄才有參考價值。