站点日誌里突然多出一批“搜尋蜘蛛”的訪問,先別急着在 robots.txt 里放行或封禁,需要先回答一個更基础的問题:来的是不是真的搜尋蜘蛛。UA 字符串可以随手伪造,不少采集程序、监控工具、甚至一些蜘蛛池服務都會把 UA 寫成 Googlebot 或 Bingbot。只看 UA 做判断,很容易一邊把真蜘蛛挡在外面,一邊给假蜘蛛開了绿灯。
只看 UA 會踩的两個坑
第一個坑是誤伤。把 UA 里带 bot 的請求一律拦截,可能顺手拦掉真蜘蛛的部分 IP,随後出現抓取量下降、缓存内容變舊。第二個坑是誤放。把寫着 Googlebot 的請求全部当成真蜘蛛,等于给任意来源的爬虫開了後门,它們可以顶着這個身份高频抓取,服務器负载被悄悄吃掉。
几個比較典型的可疑信号:
- UA 寫着主流搜尋引擎,但来源 IP 不在该引擎公布的網段里。
- 請求频率遠高于日誌里真蜘蛛的常態,且集中在少數接口或列表頁。
- 只抓带參數的 URL,或只抓某個目錄,不請求 robots.txt 與常见静態资源。
- 反向 DNS 查不到记錄,或主机名與该搜尋引擎的官方域名後缀無關。
核對顺序:先 IP,再反向 DNS,最後正向解析
判断身份的顺序不能倒過来。UA 放在最後看,前面两步才是硬證據。
- 比對 IP 網段。主流搜尋引擎都會公布自己的爬虫 IP 段或 JSON 列表,把日誌里的来源 IP 和這份名單對照,不在名單里的先归為待核實。
- 做反向 DNS 查询。對 IP 反查得到主机名,再看主机名是否以官方域名结尾,例如以 googlebot.com、search.msn.com 這類後缀收尾。名字看起来像還不够,後缀必须對得上。
- 做正向解析回查。拿上一步得到的主机名再解析一次,確認返回的 IP 與最初记錄的 IP 是同一個。只有這一步也對上,反向 DNS 才真正可信。
- 定期更新名單。IP 段會變,把比對規則做成定期拉取,比手工维護一份静態清單可靠。
反向 DNS 與正向解析互相印證,才算比較硬的證據;只對得上 UA,不构成判断依據。
驗明身份之後:真蜘蛛放行,假蜘蛛按普通訪客處理
對真蜘蛛
真蜘蛛要的不是特殊照顾,而是稳定和可预期:响應時間別忽高忽低,別让 WAF、驗證碼、Cookie 同意彈窗挡在抓取路径上,需要渲染的頁面要保證 CSS、JS 可訪問。如果站点压力确實大,優先在站長平台調整抓取速率,而不是直接在服務器上返回 403 或 429,後者可能让蜘蛛在之後一段時間里降低對整站的抓取。
對假蜘蛛
假蜘蛛不必單獨设計策略,按普通訪客的規則處理即可:按 IP 與路径限速,對異常高频的 UA 加 IP 组合做临时封禁,必要时上驗證。要注意的是,不要因為某個 UA 被滥用過就全局拉黑這個 UA,真蜘蛛也會用同样的字符串。
限流要落在具体的维度上
服務器稳定性直接影响抓取,但限流不能一刀切。按 IP 限並發、按路径限频率、按连接數设上限,比按 UA 全站拦截更精准。观察几個指标:單 IP 的並發连接數、單位時間請求數、5xx 比例、平均响應時間。真蜘蛛的高频通常伴随正常的路径分布;伪装的爬虫往往集中在少數 URL 上,這两個特征比 UA 更能說明問题。
日誌里至少要留下這几列
- 来源 IP 與完整 UA 字符串。
- 請求路径、狀態碼、响應時間、返回字节數。
- Referer 與請求方法,便于识別非正常抓取。
- 保留足够的日誌周期,覆盖蜘蛛一轮抓取的間隔。
把身份核對做成固定動作之後,再谈 robots.txt、Sitemap 和抓取速率才有意义。否則一套针對“蜘蛛”的策略,可能作用在了一批並不是蜘蛛的請求上。