做蜘蛛池和站点运营时,经常遇到一種情况:自己用浏览器打開入口頁,目标連結整整齐齐;但搜尋蜘蛛的抓取日誌里,這個頁面要么返回 403、503,要么返回一個内容完全不同、里面没有任何目标連結的頁面。多數时候問题不在入口頁本身,而在它前面那一层——CDN、WAF、防火墙或安全插件。
為什么會出現“你看到 A,蜘蛛看到 B”
CDN 和 WAF 的判断依據通常是 IP 归属、ASN、UA、請求频率、請求头完整度、Cookie 有無等。搜尋蜘蛛的 IP 段是公開的,但這些中間层如果規則配得比較粗,很容易把它們当成可疑的自動化流量處理。常见表現包括:
- 直接返回 403、406 或 503,蜘蛛拿不到任何 HTML;
- 返回一個人机校驗頁或等待跳轉頁,里面没有目标連結;
- 返回 200,但内容是精简版或缓存舊版本,目标連結被裁掉;
- 只放行部分 IP 段,其他蜘蛛节点被拦,抓取时有时無。
還有一種情况是回源失敗:CDN 缓存里存的是错誤頁,你本地刷新看到的是新版本,蜘蛛拿到的却是那份舊的缓存副本。
怎么確認是不是中間层的問题
- 先看原始服務器日誌。如果源站日誌里根本没有蜘蛛的請求记錄,說明請求在到達源站之前就被拦掉了,問题大概率在 CDN/WAF 這一层。
- 對比 CDN 後台的訪問日誌和源站日誌,看两邊记錄的搜尋蜘蛛請求數量是否對得上。
- 確認蜘蛛来源的真實性。不要只看 UA,UA 可以随意伪造;用反向解析或官方公布的 IP 段核對来源 IP,再判断是不是被誤拦。
- 检查缓存策略。入口頁這類需要及时反映連結變化的頁面,缓存時間過長,就會把舊版本反复喂给蜘蛛。
- 用搜尋平台自带的抓取測試工具查看“實际返回”的 HTML,而不是你自己浏览器里看到的 HTML。
調整时的几個注意点
- 別整站無條件放行。按 IP 段放行通常比按 UA 放行更可靠,但建议保留基本的频率限制,別為了放行把防護完全關掉。
- 给入口頁單獨设缓存規則。可以短缓存甚至不缓存,其余静態资源照舊處理。
- 別用 JS 校驗後再放行。多數搜尋蜘蛛不执行這類校驗,结果就是永遠看不到内容。
- 不要對不同来源返回差异過大的頁面。即使出于防護目的,也要保證蜘蛛拿到的是包含目标連結的正常頁面。
判断标准可以很简單:把蜘蛛当成普通訪客對待。它拿到的 HTML,應该和你自己訪問时基本一致。
小结
入口頁“蜘蛛看不到”,未必是連結寫法的問题,先確認請求有没有顺利穿過 CDN、WAF 這一层。排查顺序建议是:源站日誌 → 中間层日誌 → 缓存版本 → 放行與限速規則。把中間层的誤拦和舊缓存處理掉之後,再去看 URL 發現和抓取量的變化,才不容易被错誤的排查方向带偏。