很多人在做完蜘蛛池入口頁或 URL 提交之後,最關心的問题是:蜘蛛到底来没来。提交接口返回成功、後台顯示已提交,這些只能說明請求發出去了,並不代表搜尋蜘蛛真的訪問過。能回答這個問题的,通常是服務器或 CDN 的訪問日誌。
先確認日誌本身是否完整
日誌不完整,後面所有判断都會偏。常见的情况有两種:一是站点走了 CDN,缓存命中的請求不會回源,源站日誌里自然看不到;二是日誌按天切割或只保留了错誤日誌,正常返回 200 的记錄被冲掉。
- 如果用了 CDN 或反向代理,優先看邊缘节点的訪問日誌,而不是只看源站日誌。
- 確認日誌是否记錄了完整 URL 和 User-Agent,有些預設配置會省略這两項。
- 確認采样策略,部分日誌服務會按比例采样,低频抓取很容易被漏掉。
日誌里该看哪几個字段
一條记錄里,和抓取是否發生直接相關的字段其實不多:
- 時間:用来對齐你提交 URL 的時間点,看抓取是否發生在提交之後。
- 請求方法:GET 是正常抓取,HEAD 多數只是探测,意义不同。
- 請求路径:先看入口頁,再找目标 URL,這能看出蜘蛛是否做了跟進。
- 狀態碼:200、304 属于正常;301、302 說明發生了跳轉;403、404、5xx 則要單獨排查。
- User-Agent 與来源 IP:两者要一起看,單看 UA 很容易被骗。
UA 不能作為唯一判断依據
UA 是一段可以随意伪造的字符串,用普通脚本伪装成搜尋蜘蛛的 UA 来刷日誌非常常见。更稳妥的做法是把 UA 和来源 IP 一起驗證,例如對 IP 做反向 DNS 解析,看解析结果是否落在搜尋官方的域名段内,再做正向解析確認;或者直接和官方公布的 IP 段列表比對。
如果只凭 UA 就認定蜘蛛来過,很容易把爬虫工具、监控探针甚至同行掃描都算進抓取量里。
哪些行為才算真的抓到了
判断标准可以分两层。第一层是入口頁是否被抓,第二层是目标 URL 是否被跟進。
- 入口頁出現 200 或 304,說明蜘蛛确實讀取了頁面。
- 在相近的時間窗口内,日誌里出現目标 URL 的請求。
- 目标 URL 的返回碼正常,没有持續 5xx 或跳轉異常。
如果只有第一层没有第二层,問题通常出在連結本身(不可见、被屏蔽、頁面上没有有效連結)或者抓取配額被分配到了別處,而不是蜘蛛完全没来。
几類容易誤判的情况
- 缓存命中当成没来:CDN 直接返回缓存,源站没有记錄,但蜘蛛其實来過。
- 预取和探测当成正式抓取:HEAD 請求、DNS 预解析、頁面预渲染产生的請求,和真正解析頁面内容是两回事。
- 只統計入口頁:入口頁被抓不代表目标 URL 被跟進,两者要分開看。
- 把第三方爬虫算成搜尋蜘蛛:SEO 工具、社交平台预览抓取都會产生類似 UA 的請求。
用日誌做决策,而不是靠感觉
日誌能回答的問题很具体:提交之後多久出現第一次抓取、抓的是哪個地址、返回碼是什么、目标 URL 有没有被带着抓。把這些事實记錄下来,再去調整入口頁结构、連結形式或提交节奏,比不断加大提交量更有意义。日誌里看不到抓取,先排查日誌采集和缓存鏈路,再考虑内容與連結层面的問题。