日誌里出現带 Googlebot 字样的請求,並不等于蜘蛛真的来了。User-Agent 是一段客戶端自报的字符串,任何脚本都能照抄。把假蜘蛛当成真蜘蛛,會浪費服務器资源;把真蜘蛛当成假蜘蛛挡掉,則可能让 URL 發現變慢,新頁面迟迟不被抓取。下面這套流程,目的是在不誤伤的前提下把两類請求分開。
一、先明确要解决什么問题
- 服務器资源被盗刷:假蜘蛛高频抓取,尤其是搜尋頁、篩選參數頁這類動態地址。
- 真蜘蛛被誤封:防火墙按 UA 關键字拦截,或按频率限速過嚴,導致整体抓取量下降。
- 資料判断失真:把假蜘蛛寫進抓取频次报表,得出的结论是错的。
- 放行規則失效:robots.txt 和 WAF 白名單本来是给真蜘蛛配的,来源認错了,整套策略都會偏。
二、User-Agent 只能当第一道筛子
UA 是請求头里的自述信息,伪造成本极低,可以用来快速分流,但不能單獨作為判定依據。常见的寫法包括 Googlebot、bingbot、Baiduspider 等,但版本号和平台部分會變,不建议寫一段固定字符串做精确匹配,也不要用 bot 這種宽泛關鍵詞一刀切,會誤伤正常工具和訪客。
更稳的做法是:先按 UA 把請求分成“需要進一步驗證”的一堆,再用下面的方法確認。
三、反向 DNS 驗證
主流搜尋引擎都公開了驗證方法,核心是双向解析,顺序不能反。
- 反向解析:拿請求来源 IP 做 PTR 查询,得到主机名。
- 检查域名後缀:Google 的應以 googlebot.com 或 google.com 结尾,Bing 的為 search.msn.com。
- 正向解析:把上一步得到的主机名再做一次 A/AAAA 查询,看是否解析回原始 IP。
- 两者一致才認;不一致时再用原 IP 去比對官方 IP 段。
先看正向再看反向,容易被伪造的域名绕過去,因此顺序很重要。
四、官方 IP 段列表做兜底
Google、Bing 等會發布可下载的 IP 段文件,格式常见為 JSON 或纯文本。把這些列表定期同步到服務器或 CDN 的規則里,可以在反向解析失敗(例如 DNS 超时)时提供第二层判断。列表會更新,建议按天或按周自動拉取,不要手工维護一份静態清單。
五、用日誌和行為特征交叉驗證
- 請求节奏:真蜘蛛频率相對稳定,並受抓取预算约束;假蜘蛛常表現為突發高频或固定間隔的机械請求。
- 路径分布:真蜘蛛會按連結關系走,同时請求 robots.txt、Sitemap;假蜘蛛往往只盯少數頁面,比如價格頁或搜尋接口。
- 請求头:真蜘蛛一般不携带来源頁 Referer,伪造者常留下浏览器風格的完整头部组合。
- 對响應碼的反應:遇到 5xx,真蜘蛛會退避,假蜘蛛通常照抓不誤。
六、確認之後怎么用
分清真伪之後,才能决定放行與拦截。真蜘蛛给稳定带宽和正常响應速度,Sitemap 與内鏈保持可訪問;假蜘蛛按普通訪客或黑名單處理。需要注意,對真蜘蛛返回 403、429 或長時間 5xx,會直接影响後續抓取频次,而且恢复通常比降速更慢。
落地检查清單
- 按 UA 統計日誌中的 Top IP,人工抽查几條做反向 DNS。
- 把官方 IP 段接入防火墙或 CDN 白名單,並設定自動更新。
- 對可疑高频 IP 做限速,而不是直接封掉整個 UA 關键字。
- 定期查看蜘蛛的响應碼分布,確認没有大面积 403、5xx。
- 保持 robots.txt 和 Sitemap 可公開訪問,避免驗證規則把真蜘蛛挡在外面。
判断蜘蛛真假的目的,不是做一份完美名單,而是让真蜘蛛顺畅走完發現和抓取流程,同时不让伪造流量掏空服務器。
這套流程不需要很复杂的基础设施,一段脚本加一份定期同步的 IP 列表通常就够了。關键是別把 UA 当成唯一證據,也別在没驗證之前就把带 bot 字样的請求全部拒掉。