拦截發生在哪一层,先分清楚
入口頁打不開,未必是服務器挂了。CDN、WAF、云防火墙、源站自己寫的防護規則,都可能在搜尋蜘蛛到達頁面之前把請求挡掉。表現出来往往是几種固定形態:403、429,或者返回一個狀態碼 200、但内容是驗證頁或空壳的响應。對站点运营来说,先確認是谁在拦,比急着改連結更重要。
拦截對 URL 發現意味着什么
搜尋蜘蛛發現新連結,主要依赖讀取頁面里的 a 标簽。如果它拿到的是拦截頁,頁面中没有你希望被發現的連結,後續的解析和排队就都不會發生。损失是双份的:入口頁這次抓取白跑,它承载的那一批目标 URL 也整体缺席。
三種常见拦截形態
- 硬拦截:直接返回 403、404 或 503。蜘蛛拿不到内容,也無法解析任何連結。
- 驗證頁:狀態碼是 200,正文却是一段 JS 挑战或“請稍候”。蜘蛛一般不會执行這類脚本,頁面里没有真實連結。
- 限速:返回 429 或直接断连。抓取成功率下降,連結时有时無,日誌上看起来像“偶尔能抓”。
三種形態的後果都是連結没被發現,但處理方式不一样,混在一起排查容易走弯路。
怎么確認是不是被拦了
- 看日誌。統計入口頁對搜尋蜘蛛 UA 的响應碼分布,403、429 各占多少。注意 UA 字符串可以伪造,單獨看 UA 容易誤判。
- 核對来源 IP。按搜尋引擎官方公布的蜘蛛 IP 段去比對訪問来源,比只看 UA 可靠得多。
- 從外部實际請求一次入口頁。观察响應头、正文長度和内容,確認返回的是正常 HTML,還是一個不含連結的挑战頁。
處理思路
- 把搜尋引擎官方蜘蛛 IP 段加入 CDN 或 WAF 白名單。按 IP 放行通常比按 UA 放行稳定,因為 UA 可以随意伪造。
- 检查規則里有没有“非浏览器 UA 一律拦截”“机房 IP 一律拦截”這類條款,它們最容易誤伤搜尋蜘蛛。
- 给入口頁單獨配一套策略,不要和主站共用同一套嚴格防護規則。
- 适当放宽入口頁的速率限制,允许短時間内的连續抓取,避免批量訪問被当作攻击。
- 如果入口頁必须经過驗證才能訪問,考虑換一個不依赖 JS 的静態頁作為入口。
几個容易忽略的细节
放行只是让蜘蛛能讀到頁面,並不代表目标 URL 會被收錄。收錄還取决于内容质量、重复度、站点整体狀態等很多因素,两者不要混為一谈。
另外,本地用伪装 UA 測試能通過,不等于官方蜘蛛 IP 能通;拦截解除之後,蜘蛛重新抓取還需要一段時間,日誌不會立刻變好。
入口頁的职责很简單:被抓取、被解析。一旦它被拦在门外,後面所有關于連結位置、锚文本、連結數量的讨论都没有落脚点。
遇到抓取異常时,先確認入口頁對搜尋蜘蛛返回的是不是正常頁面,再去看連結层面的問题,顺序反了會浪費很多時間。