很多人判断蜘蛛池有没有起作用,第一眼看的都是後台那個“抓取次數”。但那個數字通常经過統計工具過滤和聚合,未必等于搜尋蜘蛛真的来過。想確認入口頁有没有被爬,最直接的办法還是回到服務器原始日誌,一條一條核對。
先分清統計數字和訪問日誌
統計工具给出的抓取量,往往是按 User-Agent 關鍵詞匹配出来的结果,還可能受到采样、去重、时区對齐的影响。它适合看趋势,不适合当證據。原始訪問日誌則是服務器直接落盘的记錄,時間、IP、路径、狀態碼都在里面,出错的空間小得多。
如果你用的是 CDN 或反向代理,要注意日誌可能只记錄了回源請求,真實訪客 IP 被藏在 X-Forwarded-For 之類的头里。這種情况下先確認你打開的是哪一层日誌,否則很容易把 CDN 节点的 IP 当成搜尋蜘蛛。
一條請求记錄里要核對的字段
- 時間:用来判断抓取是否集中在某個时段,還是全天零散。
- 遠端 IP:配合官方的 IP 段名單核對,這一步比看 UA 更靠得住。
- User-Agent:能反映請求自称是谁,但不能單獨作為依據。
- 請求路径:確認命中的是入口頁本身,而不是 favicon、robots.txt 或某個静態资源。
- 返回狀態碼:200、301、304、403、503 的含义完全不同。
- 响應字节數:如果返回 200 但字节數只有几百,多半是被拦截頁或空壳頁。
三種常见的誤判
只認 User-Agent
UA 字符串是可以随便寫的。日誌里出現大量自称搜尋蜘蛛的請求,並不代表它們就是。稳妥的做法是做反向 DNS 校驗,或者至少把 IP 和官方公布的網段對一遍。如果两者對不上,這些請求大概率只是采集工具或者掃描器。
把非 200 的請求也算成抓取
入口頁返回 304 說明内容没變,蜘蛛只是来確認了一下;返回 301、302 說明發生了跳轉,要看它有没有跟下去;返回 403、503 則說明它根本没拿到内容。如果日誌里 403 占比很高,優先去查 WAF 或防火墙規則,而不是繼續加入口頁。
只看入口頁,不看目标 URL
入口頁被抓到,只能說明门被推開了。目标 URL 有没有在同一時間窗内出現抓取记錄,才是判断連結有没有被跟進的依據。如果只有入口頁的請求、始终没有目标 URL 的請求,問题通常出在連結形式、狀態碼或者 robots 規則上,而不是抓取量不够。
把两邊日誌對照着看
比較實用的做法是取一個時間窗口,把入口頁的訪問记錄和目标 URL 的訪問记錄並排放。重点看两件事:一是入口頁被抓之後,目标 URL 大概多久出現第一次請求;二是這個間隔是否稳定。如果偶尔出現一两次,可能是巧合;如果持續没有,就說明中間某一环断了。
還要留意目标 URL 的請求是不是来自同一個 IP 段。如果入口頁是 A 搜尋引擎来的,目标 URL 的請求却全是另一個爬虫,那說明你观察的並不是同一條鏈路。
一個简單的排查顺序
- 確認日誌层級,排除 CDN 节点 IP 的干扰。
- 用 IP 段核對 UA,筛掉伪造請求。
- 看入口頁的狀態碼和响應字节數,確認拿到的是完整頁面。
- 看入口頁抓取的時間分布,判断是稳定来訪還是偶然一次。
- 對照目标 URL 是否有對應抓取记錄。
- 检查 robots.txt、响應头、頁面内的連結寫法有没有挡住後續路径。
日誌能證明的是“来過”,不能證明“會收錄”。抓取和收錄是两件事,看到目标 URL 被抓了,不等于它一定會進索引。
與其盯着一個匯總數字,不如把 IP、狀態碼、目标 URL 這三條线串起来看。多數时候,問题並不是蜘蛛没来,而是它来了之後在路上被拦住了。