為什么日誌里的蜘蛛记錄不一定可信
运营蜘蛛池或做 URL 發現时,很多人习惯直接看服務器日誌里的 User-Agent,只要出現 Googlebot、Baiduspider、bingbot 就当成搜尋蜘蛛来了。問题在于 UA 只是一段纯文本,任何人都能改。普通采集脚本、压测工具,只要把 UA 改成 Baiduspider,日誌里就會多出一條“百度蜘蛛”的记錄。
结果就是抓取量看着很漂亮,入口頁也确實被大量訪問,但目标 URL 迟迟不入库,排查半天才發現来的根本不是搜尋蜘蛛。
UA 能伪造,IP 很难伪造
判断抓取来源时,優先級大致是:IP 归属 > 反向 DNS > UA。UA 是請求头里的字符串,随便改;而来源 IP 属于 TCP 连接层面的事實,除非對方真的從搜尋引擎的出口 IP 發起請求,否則伪造不出来。
只看 UA 統計抓取量,等于把判断權交给了訪客自己。
主流搜尋蜘蛛的驗證思路
1. 反向 DNS 解析
拿日誌里的 IP 做一次反向解析,再對解析出来的域名做一次正向解析,看是否回到同一個 IP。以 Google 為例,官方给出的做法是:
- IP 反解應得到類似 crawl-xxx-xxx-xxx-xxx.googlebot.com 的域名;
- 再對该域名做正向解析,應返回原来的 IP;
- 域名需要归属 googlebot.com 或 google.com。
Bing 的 bingbot 也提供類似的反向解析校驗方式,域名通常落在 search.msn.com 一類。百度則更多依赖官方公布的 IP 段,配合 UA 一起判断。
2. 官方 IP 段比對
各家搜尋引擎會公布自己的抓取 IP 段,一般是 JSON 或文本文件形式。可以定期拉取,和日誌里的 IP 做匹配。這種做法比單看 UA 靠谱,但需要自己维護更新,IP 段變動後没同步就會誤判。
3. 站長平台里的抓取資料
Google Search Console、必應網站管理員工具、百度搜尋资源平台等,都能看到官方的抓取統計。如果日誌里“蜘蛛来了 500 次”,平台里只有几十次,差距過大,基本可以判断存在大量伪蜘蛛。
實操中最容易踩的坑
- 只按 UA 統計抓取量:报上去的數字和真實抓取能力對不上。
- 反向解析只查一次:有人會自己配置反解记錄,必须正反向都對得上才算數。
- 誤封真蜘蛛:為挡伪蜘蛛直接按 UA 全封,可能把驗證過的真蜘蛛也挡在外面,影响 URL 發現。
- 忽略 IPv6:只驗證 IPv4,日誌里的 IPv6 抓取记錄没纳入統計。
- 没记錄完整日誌:CDN 或反向代理没透传真實 IP,日誌里全是节点 IP,事後根本没法查。
一個简單的落地流程
- 確認 Nginx 或 CDN 已透传真實客戶端 IP(X-Forwarded-For 或 real_ip 模块)。
- 日誌中同时保留 IP、UA、請求路径、狀態碼和時間。
- 寫脚本或用現成工具,對高频 IP 做正反向解析校驗。
- 把校驗结果和站長平台資料交叉比對,確認抓取量口径一致。
- 定期复核,尤其是抓取量突然上涨或下跌的时候。
驗證抓取来源不是為了追求一個好看的抓取數字,而是為了確認入口頁到底有没有被搜尋蜘蛛真正訪問。如果来的大部分是伪蜘蛛,那么入口頁铺得再多、連結放得再密,對目标 URL 的發現也不會有實际帮助。