蜘蛛池跑一段時間後,日誌里几乎每天都能看到自称是 Googlebot、Bingbot、百度蜘蛛的請求。數量看着热闹,但其中相当一部分並不是搜尋引擎派来的。把這些請求当成真蜘蛛去調優,很容易得出错誤结论:以為某個入口頁很受欢迎,實际只是被采集器掃了一遍。
為什么要在蜘蛛池里做身份核驗
蜘蛛池的入口頁數量多、结构相似,本来就是各類爬虫喜欢光顾的對象。如果不做区分,會带来几個直接問题:
- 更新节奏被假蜘蛛带偏,看到抓取變多就加量,實际對收錄毫無帮助;
- 日誌統計失真,判断不出哪些入口頁真的被搜尋引擎訪問過;
- 把采集流量誤当成索引信号,誤判某批资源或某個模板的效果。
需要說明的是,驗證身份只能帮你把谁来過看清楚,它不解决頁面是否被收錄的問题,這两件事是分開的。
三层驗證:從最弱到最强
User-Agent:只做初筛
UA 是最容易伪造的一层,浏览器插件和脚本都能随手改成 Googlebot。把 UA 当作唯一标准,等于没有标准。它的合理用途是快速分流:先按 UA 把疑似蜘蛛的請求單獨归一類,再去核驗其余信息。
反向 DNS:最常用的一层
對請求来源 IP 做反向解析,看解析出的域名是否落在搜尋引擎官方域名下,例如 Googlebot 常见的 googlebot.com、google.com。關键点是還要再做一次正向解析確認:把反向解析得到的域名重新解析一遍,看结果是否回到原来的 IP。只做反向不做正向,同样會被伪造的解析记錄骗到。
IP 段與官方列表
Google 會公布它的抓取 IP 段,Bing 也有類似做法。把這些段维護成一份本地列表,用請求 IP 去比對,比逐個做 DNS 查询更快,适合請求量大的蜘蛛池。缺点是列表需要定期更新,搜尋引擎會調整段位。
三種手段叠起来用,誤判會明顯减少。實际运营中,UA 初筛加 IP 段比對能覆盖大多數情况,對可疑請求再做一次反向與正向 DNS 校驗即可。
假蜘蛛通常在做什么
识別出来之後會發現,非搜尋引擎的蜘蛛大致有几類:内容采集器、SEO 工具的反鏈检查、漏洞掃描,以及部分統計或监控服務。它們的行為特征和真蜘蛛不太一样,比如:
- 短時間内集中請求大量入口頁,間隔几乎没有;
- 只抓列表頁或只抓目标頁,不跟随頁面内的連結结构;
- 對 robots.txt 不理會,或者請求一遍就走;
- 不請求静態资源,也不带 referer。
這些特征不能單獨当作判定标准,但可以作為辅助參考,和 IP 核驗的结论互相印證。
在蜘蛛池里的落地做法
- 在服務器或 CDN 日誌里保留完整 UA 與来源 IP,不要只存聚合資料;
- 寫一個简單的离线任務,每天把日誌里的来源 IP 過一遍 IP 段列表,打上已確認或未確認的标记;
- 對未確認但 UA 自称蜘蛛的 IP,做反向 DNS 加正向回查,结果單獨记錄;
- 把確認過的真蜘蛛請求按入口頁分组統計,再和你的更新节奏對照;
- 對持續的假蜘蛛流量用限速或拦截處理,但注意不要誤伤正常用戶和真蜘蛛。
几個容易踩的坑
- 把 UA 当结论:改 UA 的成本几乎為零,它只能用于初筛。
- 只做反向不做正向:反向解析记錄可以人為配置,正向回查才是閉环。
- IP 段列表長期不更新:搜尋引擎的抓取段會變,三個月不更新就開始漏判。
- 拦得太狠:有些真蜘蛛来自你没想到的段,一刀切拦截會让抓取變少,還查不出原因。
最後提醒一句:確認了真蜘蛛来訪,只說明發現和抓取這一环在動,和頁面最终是否被索引是两回事。核驗身份的價值在于让日誌資料可信、让調整有依據,而不是制造一個蜘蛛很多的错觉。