入口頁的訪問日誌里,“Baiduspider”“Googlebot”這類字样每天可能刷出几萬條,但其中相当一部分並不是搜尋引擎派来的。有人用脚本伪造 UA 抓取内容,有人做批量掃描,也有人只是把你的入口頁当成免費的測試点。如果不做甄別,這些流量會挤占带宽和连接數,也會让日誌統計失真,让你誤判入口頁的真實抓取情况。
為什么甄別要在入口頁做
蜘蛛池的入口頁承担的是“被看见”的职责,對外可见度越高,被伪造 UA 试探的概率也越大。入口頁請求量本来就不小,一旦混入伪装流量,容易出現几種典型偏差:
- 日誌里的“抓取量”虚高,真正来自搜尋引擎的請求被稀释;
- 连接被占满,真蜘蛛反而拿到超时或 5xx;
- 按错誤的資料調整内容更新节奏,方向越走越偏。
所以在入口頁层面做一次基础甄別,比事後在报表里反复猜要省事得多。
三层交叉驗證的思路
1. UA 只能当线索,不能当證據
UA 是最容易伪造的東西,改一個字符串的成本几乎為零。把 UA 当作第一层過滤可以,但只靠它做封禁,誤伤概率很高——搜尋引擎自身在某些场景下也會使用不带明顯标识的客戶端。
更稳的做法是:UA 命中已知蜘蛛标识时,進入第二层驗證;UA 不匹配但請求行為明顯異常的,先限速观察,而不是立刻拦截。
2. 看 IP 归属與網段
主流搜尋引擎的爬虫 IP 通常来自相對固定的網段或云服務商,而不是家用宽带、住宅代理或大量分散的廉價 VPS。如果日誌里某個“Googlebot”長期来自住宅 IP 段,基本可以先按伪造處理。
實操中值得记錄的字段包括:来源 IP、IP 所属 ASN 與地区、同一 IP 的請求频率、以及该 IP 首次出現的時間。把這些和 UA 放在一起看,伪装流量往往會露出破绽。
3. 反向解析加正向確認
只看反向解析(PTR)同样不够,因為 PTR 记錄本身可以被伪造。相對可靠的顺序是:
- 對来源 IP 做反向解析,得到主机名;
- 再對该主机名做正向解析,確認解析回来的 IP 與原始来源 IP 一致;
- 最後確認主机名落在搜尋引擎官方公布的域名後缀内。
這三步都通過,才可以比較放心地認定是真蜘蛛。缺任何一步,都建议按“待观察”處理,而不是直接放行或直接封禁。
常见的伪装流量特征
- UA 拼寫有细微错誤,比如多一個字母、少一個斜杠;
- 同一 IP 在极短時間内請求大量 URL,顺序接近字典遍歷;
- 只請求入口頁和少數几個固定路径,不跟随站内連結;
- 請求头缺少搜尋引擎爬虫常见的字段组合;
- 集中在少數几個網段,且该網段與官方公布范围明顯不符。
甄別之後怎么處理
不建议一刀切,可以按三档處理:
- 確認是真蜘蛛:正常放行,並记錄其抓取频率,作為後續調整入口頁更新节奏的參考。
- 無法確認但行為温和:放行,單獨打标记錄,观察一段時間再判断。
- 明顯伪造或高频掃描:先降速,仍不收敛再在入口层拦截,同时保留日誌便于复核。
拦截手段的優先級建议是:限速 → 返回轻量响應 → 断開连接。尽量不要在入口頁直接返回体积很大的 403 頁面,或者重定向到驗證頁,那只會額外消耗资源。
別把甄別做過头
過于激進的封禁會誤伤搜尋引擎的正常抓取,尤其是新出現的爬虫 IP 段,往往在官方文档更新之前就已经投入使用。比較稳妥的原則是:宁可從宽放行並观察,也不要因為一次異常就永久拉黑整個網段。甄別的目标是让資料可信、资源不被浪費,而不是把入口頁變成一道攻击性防线。
把真伪甄別当成日誌清洗的一部分,而不是安全對抗。資料干净了,後面關于入口頁更新與内容調整的判断才有依據。