常见問题

怎么從服務器日誌判断搜尋蜘蛛是否真的發現了入口頁里的目标 URL

入口頁被爬不等于目标 URL 被發現。本文给出一套基于服務器日誌的排查方法:先核對爬虫身份,再观察入口頁之後的訪問序列與 Referer 關联,排除歷史记錄、CDN 日誌缺失等常见誤判,最後與站長平台資料相互印證。

常见問题

怎么從服務器日誌判断搜尋蜘蛛是否真的發現了入口頁里的目标 URL

不少人做蜘蛛池,判断目标 URL 有没有被發現的方法很简單:看入口頁有没有被搜尋蜘蛛抓過。入口頁被爬了,就認為目标 URL 已经進入發現队列。這個推断经常不成立,因為爬取入口頁和解析頁面里的連結、把新 URL 放進待抓列表,是两個环节,中間任何一步出問题,日誌上都不會有明顯提示。

更可靠的办法是回到服務器日誌,逐條核對爬虫的訪問轨迹。下面是一套在實际运维中比較常用的判断思路。

第一步:確認日誌里的訪問者是真的搜尋蜘蛛

UA 字符串是最容易伪造的部分,僅凭“Baiduspider”或“Googlebot”字样就下结论,很容易被第三方抓取程序誤導。比較稳妥的做法是:

  • 對訪問 IP 做反向 DNS 解析,確認域名归属與官方一致,再正向解析回同一個 IP;
  • 或直接比對搜尋引擎官方公布的 IP 段列表;
  • 看狀態碼分布,正常抓取以 200 為主,長期只有 403、404、5xx 的訪問记錄參考價值有限。

第二步:看入口頁之後的訪問序列

当搜尋蜘蛛真正解析了入口頁里的連結,通常會留下几個可辨認的痕迹:

  • 入口頁被抓取後的短時間内(几分钟到几小时),日誌里出現目标 URL 的請求;
  • 這些目标 URL 請求的 Referer 字段指向入口頁地址;
  • 同一個爬虫 IP 段在入口頁之後连續請求多條目标連結,而不是只挑一條;
  • 目标 URL 的首次抓取時間,和入口頁被抓的時間形成明顯的前後關系,並且能重复出現。

反過来,如果入口頁被反复抓取,但目标 URL 從来没出現過,或者出現的都是很久以前的舊记錄,那大概率只是爬了入口頁,連結並没有被有效發現。

第三步:排除几種常见誤判

  • 目标 URL 早就被抓過。如果這些 URL 之前通過站点地图、外鏈或站内導航被抓取過,日誌里当然有记錄,但它證明不了入口頁的作用。
  • Referer 被中間层抹掉。经過 CDN、反向代理或跳轉鏈後,Referer 可能丢失,此时看不出關联,不等于没有發現。
  • 日誌本身不完整。部分 CDN 預設只保留抽样日誌,或者只记錄静態资源請求,入口頁級別的訪問可能缺失。
  • 入口頁連結由 JavaScript 生成。這種情况下爬虫是否會跟進,取决于它是否执行脚本,日誌上没有目标 URL 請求,並不代表入口頁有問题。
  • 目标 URL 被 robots.txt 或頁面級規則拦住。發現和抓取是两件事,被規則限制的 URL 可能出現在日誌里也可能不出現,需要單獨核對。

第四步:和平台侧資料相互印證

服務器日誌只反映請求過什么,不反映是否進入索引。建议把日誌和站長平台的抓取統計、URL 提交工具的反馈、以及站点地图的抓取情况對照来看:

  1. 先在日誌中筛出目标 URL 的首次訪問時間和来源 Referer;
  2. 再去站長平台看這段時間的抓取量、抓取频次是否有對應波動;
  3. 最後看這些 URL 的索引狀態是否正常。

三者能對上,說明入口頁的發現鏈路基本是通的;對不上,就要回到入口頁本身检查連結寫法、响應狀態和可訪問性。

日誌能告诉你搜尋蜘蛛来過、請求了什么,但它不能保證抓取频率,也不能保證收錄。把日誌当作排查工具,而不是效果指标,判断會更稳。

小结

判断入口頁的目标 URL 有没有被發現,核心是两件事:確認訪問者身份,確認訪問序列的關联性。只看入口頁有没有被爬,结论往往過于乐观;只看目标 URL 有没有出現在日誌里,又容易被歷史记錄和第三方抓取干扰。把這两步做扎實,再配合平台資料,排查效率會明顯提升。