常见問题

入口頁被 CDN 或 WAF 拦住:搜尋蜘蛛看到的内容可能和你不一样

入口頁在浏览器里一切正常,搜尋蜘蛛却抓不到目标連結,問题常出在 CDN、WAF 或缓存這一层。本文說明誤拦的常见表現、如何通過源站日誌與中間层日誌定位原因,以及放行規則、缓存策略調整时需要注意的几点。

常见問题

入口頁被 CDN 或 WAF 拦住:搜尋蜘蛛看到的内容可能和你不一样

做蜘蛛池和站点运营时,经常遇到一種情况:自己用浏览器打開入口頁,目标連結整整齐齐;但搜尋蜘蛛的抓取日誌里,這個頁面要么返回 403、503,要么返回一個内容完全不同、里面没有任何目标連結的頁面。多數时候問题不在入口頁本身,而在它前面那一层——CDN、WAF、防火墙或安全插件。

為什么會出現“你看到 A,蜘蛛看到 B”

CDN 和 WAF 的判断依據通常是 IP 归属、ASN、UA、請求频率、請求头完整度、Cookie 有無等。搜尋蜘蛛的 IP 段是公開的,但這些中間层如果規則配得比較粗,很容易把它們当成可疑的自動化流量處理。常见表現包括:

  • 直接返回 403、406 或 503,蜘蛛拿不到任何 HTML;
  • 返回一個人机校驗頁或等待跳轉頁,里面没有目标連結;
  • 返回 200,但内容是精简版或缓存舊版本,目标連結被裁掉;
  • 只放行部分 IP 段,其他蜘蛛节点被拦,抓取时有时無。

還有一種情况是回源失敗:CDN 缓存里存的是错誤頁,你本地刷新看到的是新版本,蜘蛛拿到的却是那份舊的缓存副本。

怎么確認是不是中間层的問题

  1. 先看原始服務器日誌。如果源站日誌里根本没有蜘蛛的請求记錄,說明請求在到達源站之前就被拦掉了,問题大概率在 CDN/WAF 這一层。
  2. 對比 CDN 後台的訪問日誌和源站日誌,看两邊记錄的搜尋蜘蛛請求數量是否對得上。
  3. 確認蜘蛛来源的真實性。不要只看 UA,UA 可以随意伪造;用反向解析或官方公布的 IP 段核對来源 IP,再判断是不是被誤拦。
  4. 检查缓存策略。入口頁這類需要及时反映連結變化的頁面,缓存時間過長,就會把舊版本反复喂给蜘蛛。
  5. 用搜尋平台自带的抓取測試工具查看“實际返回”的 HTML,而不是你自己浏览器里看到的 HTML。

調整时的几個注意点

  • 別整站無條件放行。按 IP 段放行通常比按 UA 放行更可靠,但建议保留基本的频率限制,別為了放行把防護完全關掉。
  • 给入口頁單獨设缓存規則。可以短缓存甚至不缓存,其余静態资源照舊處理。
  • 別用 JS 校驗後再放行。多數搜尋蜘蛛不执行這類校驗,结果就是永遠看不到内容。
  • 不要對不同来源返回差异過大的頁面。即使出于防護目的,也要保證蜘蛛拿到的是包含目标連結的正常頁面。
判断标准可以很简單:把蜘蛛当成普通訪客對待。它拿到的 HTML,應该和你自己訪問时基本一致。

小结

入口頁“蜘蛛看不到”,未必是連結寫法的問题,先確認請求有没有顺利穿過 CDN、WAF 這一层。排查顺序建议是:源站日誌 → 中間层日誌 → 缓存版本 → 放行與限速規則。把中間层的誤拦和舊缓存處理掉之後,再去看 URL 發現和抓取量的變化,才不容易被错誤的排查方向带偏。