很多站点做蜘蛛池时,注意力都放在“怎么让搜尋蜘蛛發現目标 URL”,却忽略了另一面:入口頁可能根本没让搜尋蜘蛛進来。抓取日誌一片空白,有人以為是自己入口頁质量太差,實际上是被自己的 robots.txt、防火墙或频率限制拦在了门外。
一、先分清是“被拦住”還是“没来過”
這两種情况的處理方向完全不同。日誌里完全没有搜尋蜘蛛的請求,可能是它压根没發現入口頁,也可能是請求在到達應用之前就被挡掉了。比較稳妥的做法是同时看三個地方:Web 服務器的訪問日誌、CDN 或 WAF 的拦截日誌,以及服務器出口的網絡层记錄。如果 WAF 日誌里有大量来自搜尋引擎 IP 段的 403、405 或 406,那基本可以判断是拦截問题,而不是内容問题。
反過来,如果连 WAF 日誌里都没有對應记錄,說明請求连邊缘节点都没到,就要往域名解析、入口頁是否被搜尋蜘蛛發現這些方向去查。
二、robots.txt 是最常见的“自我阻断”
robots.txt 一行寫错,整站都可能被拒绝抓取,而很多人只在改版时顺手寫了一次,之後再没看過。
几種典型寫法
- Disallow: / 寫在入口頁所在目錄或整站上,等于告诉搜尋蜘蛛全都別来。
- 把測試环境的 robots.txt 直接同步到线上,而測試环境里往往寫了全站禁止。
- 只對部分蜘蛛寫規則,结果把真正想放行的那個也排除了。
- 返回 404 一般會被视為允许抓取,但持續返回 500 會让部分蜘蛛降低抓取意愿。
robots.txt 是约定不是命令。遵守它的蜘蛛會离開,不遵守的照样抓;所以指望用它挡垃圾流量,往往先誤伤的是正常抓取。
三、防火墙和 WAF:只看 UA 的規則最危險
不少防護規則的做法是“UA 里没有常见浏览器标识就拦”,或者“空 UA 直接拉黑”。而搜尋蜘蛛的 UA 往往不含浏览器特征串,正好命中規則。更麻烦的是,有些蜘蛛首次訪問时 UA 會比較简單,後續才带上完整标识。
相對稳妥一些的判断方式是反向解析 IP 归属:確認来源 IP 的 PTR 记錄属于對應搜尋引擎,再做正向解析核對。只看 UA,几乎等于把判断權交给任何會改 UA 的人。
還要注意這几類規則
- 直接拉黑整個資料中心 IP 段,而部分抓取节点就在云机房里。
- 地区限制:入口頁只對某些國家或地区開放,抓取节点不在范围内就被挡。
- 强制 HTTPS 跳轉或强制 Cookie、JS 驗證,蜘蛛拿不到跳轉後的内容。
四、频率限制把搜尋蜘蛛当成攻击流量
入口頁的目标本来就是让蜘蛛多看几個 URL,所以它的請求频率天然比普通訪客高。如果按“單 IP 每分钟請求數”做硬限速,很容易在蜘蛛刚進入抓取狀態时就把它限掉。
可以留意的几点:
- 限速阈值按 IP 段 而不是單 IP 設定,搜尋抓取往往来自同一段内的多個 IP。
- 被限速时返回 429 比直接返回 403 更友好,至少明确告知是频率問题。
- 在服務器压力允许的前提下,對已校驗過的搜尋引擎 IP 段适当放宽限速。
- 入口頁大多是小文件、静態頁,做好缓存即可,不必動用過于复杂的動態防護。
五、一套简單的自查顺序
- 直接訪問入口頁,確認能正常返回 200,且内容不是驗證頁或跳轉頁。
- 查看 robots.txt 是否可正常訪問、是否有针對入口頁的 Disallow。
- 翻 WAF、CDN 日誌,按狀態碼筛 403、405、429,看拦截是否集中在搜尋引擎 IP 段。
- 临时對已校驗的 IP 段放宽規則,观察訪問日誌里是否出現蜘蛛請求。
- 把日誌中的 UA 與真實 IP 反查结果交叉驗證,確認来訪的确實是搜尋蜘蛛。
六、別把“屏蔽”当成常規手段
用拦截来解决抓取問题,本质上是先把入口堵上,再抱怨没人来。入口頁该做的是保持稳定可訪問、结构清晰、更新有节奏,而不是靠一堆隐蔽規則去篩選来訪者。如果确實需要防刷,建议把規則做细:按行為特征判断,而不是按 UA 或整段 IP 一刀切。
最後提醒一句:拦截策略和抓取策略最好由同一拨人一起讨论,否則很容易出現“运营改了連結、运维加了規則”這種互相抵消的情况,排查起来也更費時間。