做蜘蛛池和站点运营时,日誌里出現大量带搜尋引擎 UA 的請求,很多人會直接当成搜尋蜘蛛来了。但如果這些請求里混着采集器、掃描器或伪装爬虫,你據此判断入口頁是否健康、調整抓取节奏,方向就會偏。下面把常见的核對方法按顺序理一遍,都是可以在自己服務器上复現的操作。
為什么不能只看 UA
User-Agent 是請求头里最容易伪造的一段字符串,改起来几乎没有成本。所以“UA 寫的是 Googlebot、Bingbot、Baiduspider”只能說明對方愿意這么寫,不能說明它真是搜尋蜘蛛。反過来,真正的蜘蛛偶尔也會因為代理、版本升級出現看起来不常见的 UA,所以也不能只靠關鍵詞一刀切。
三层核對,從便宜到嚴格
第一层:UA 加 IP 归属
先用 UA 做初步篩選,再看這個 IP 的归属地和 ASN。搜尋引擎的抓取 IP 通常来自固定的机房與網段,如果 UA 寫着搜尋蜘蛛,IP 却来自家用宽带、VPS 商家,基本可以先打個問号。這一层只能過滤明顯不合理的請求,不能作為最终结论。
第二层:反向 DNS 看域名後缀
對来訪 IP 做一次反向解析(PTR),命令层面就是 host IP 或 dig -x IP。以 Googlebot 為例,官方给出的驗證方式是:反向解析得到的域名應以 googlebot.com 或 google.com 结尾。Bingbot 類似,通常會落在 search.msn.com 一類的域名下。解析不出来,或者解析出的域名後缀對不上,就可以判為伪造。
第三层:正向解析回驗
拿到反向解析出的域名後,再把這個域名做一次正向解析,看返回的 IP 里是否包含最初那個来訪 IP。如果對不上,同样不可信。這一步很關键,因為 PTR 记錄本身是可以被配置的——只要你控制那段 IP,就能把反向域名寫成任何样子。只有反向、正向能互相印證,才算比較可靠的證據。
官方 IP 段列表更省事
部分搜尋引擎會公布自己的抓取 IP 段或提供可定期拉取的 JSON 文件。對于量大的站点,把這些網段做成白名單並定期更新,比每條日誌都手算一遍要實用。注意列表會變動,更新频率要跟上,否則新網段會被你誤判成假蜘蛛。
几種容易誤判的情况
- 经過 CDN 或反向代理:日誌里记錄的可能是节点 IP,真實来源要看你自己的接入方式。X-Forwarded-For 可以被伪造,只應在可信代理层之後采信。
- IPv6 請求:驗證逻辑和 IPv4 一样,但很多脚本只寫了 IPv4 的匹配規則,會把真蜘蛛漏掉。
- 官方網段更新:新增或調整網段是常態,白名單要有更新机制。
- 特殊抓取程序:图片、移動端、站点驗證類抓取可能使用不同的 UA 标识,不要一概当作假蜘蛛。
- 你自己或第三方工具的請求:监控、拨测、SEO 工具的訪問也可能带類似 UA,先排除掉再下结论。
核對完之後,日誌能用来做什么
真蜘蛛的抓取频次、狀態碼分布、抓取到的 URL 范围,可以用来判断入口頁是否正常、有没有被拦截、連結是否被讀到。伪蜘蛛的請求則往往表現為高频、集中在少數 URL、忽略 robots.txt,這類流量可以單獨統計或限速,避免混進你的抓取資料里干扰判断。
需要說明的是,這些核對解决的是“資料准不准”的問题,属于排查和观测手段,並不代表清理掉假蜘蛛後收錄或排名就會有什么變化。真正影响抓取的,還是入口頁可訪問性、响應速度和連結结构本身。
建议把核對逻辑寫成一個固定脚本,按天跑一次日誌样本,比每次凭印象判断要稳得多。