很多站点在優化抓取时,會把注意力放在 Sitemap、内鏈和服務器响應上,却忽略了一個基础事實:搜尋引擎蜘蛛請求頁面时,通常不會携带你的用戶 Cookie,也不會经歷登入、選擇地域或參與 A/B 測試。它拿到的是一份“冷啟動”的 HTML。如果頁面内容依赖這些狀態才出現,蜘蛛看到的可能是空壳、預設版本,或者被反复重定向到另一個地址。
蜘蛛請求和你看到的頁面不是一回事
你浏览器里打開的頁面,背後有一串狀態:登入票據、地域偏好、设备類型、實驗分组、推荐画像。蜘蛛没有這些。它更像一個第一次訪問、未登入、未選擇地域的普通訪客。很多前端框架在無狀態时返回骨架屏,内容由接口异步填充;如果接口又依赖 Cookie 或 Token,蜘蛛最终拿到的連結和正文都會缩水。
這不一定導致抓取失敗,但會改變抓取路径:本来應该從列表頁進入詳情頁的連結,可能因為無 Cookie 而消失;本来應该展示 A 版本的頁面,可能把蜘蛛送去 B 版本或登入頁。
登入態與付費墙:蜘蛛看到的是空壳還是公開頁
把核心内容放在登入後,是抓取路径最容易断裂的场景之一。蜘蛛無法登入,如果未登入狀態下頁面只返回“請登入”或空白容器,那么该 URL 對蜘蛛而言几乎没有可提取的連結和文本。
常见的几種處理方式
- 完全拦截:未登入返回 302 到登入頁。蜘蛛會跟着重定向走,最终可能把登入頁当成目标,或者放弃该路径。
- 空壳渲染:頁面返回 200,但正文由登入後的接口填充。蜘蛛拿到的是空 HTML,容易被当成低质量頁面。
- 部分公開:未登入展示摘要、前几段和部分内鏈。蜘蛛至少能讀到 URL 和上下文,抓取路径可以繼續。
如果内容必须登入,建议至少给蜘蛛(以及未登入用戶)一個稳定的公開摘要頁,並在其中保留指向其他公開頁面的連結。不要用 JavaScript 在登入後才插入主導航和正文連結。
地域跳轉與語言版本:蜘蛛從哪個入口進来
按 IP 或浏览器語言自動跳轉,是另一種常见的路径干扰。蜘蛛的出口 IP 可能来自你無法控制的地域,語言头也不一定符合预期。结果可能是:
- 蜘蛛請求 A 地区 URL,被 302 到 B 地区首頁;
- 多語言站点没有 hreflang 或静態入口,蜘蛛只發現了預設語言版本;
- 跳轉鏈過長,每一跳都在消耗抓取预算。
更稳妥的做法是让每個語言或地区版本都有獨立、可直達的 URL,不要只靠自動跳轉。預設版本保持稳定,地区切換用連結而不是强制重定向。這样蜘蛛可以從任意入口進入,並按連結發現其他版本。
個性化推荐與 A/B 測試:蜘蛛看到的版本可能和你不一样
個性化推荐模块通常依赖 Cookie 或用戶画像。蜘蛛没有画像,可能看到空模块、預設推荐或热门列表。A/B 測試則會把不同訪客分到不同分支,蜘蛛可能被分到對照组,看到的是没有實驗内鏈的版本。
這本身不一定是問题,但如果推荐模块或實驗分支承担了重要的 URL 發現职责,就要确保蜘蛛進入的那條分支仍然包含必要的連結。可以把核心導航和分類入口做成静態或服務端渲染,不依赖實驗分组。
抓取路径的稳定性,往往不是由蜘蛛决定,而是由站点在“無狀態”下的表現决定。
怎么排查和收敛
- 用無 Cookie 环境抓取:關閉 Cookie,清空本地存储,用蜘蛛 UA 或普通 UA 請求几個關键頁面,看返回的 HTML 里有没有正文和連結。
- 检查重定向:看未登入、無地域偏好时,頁面是否被 302 到登入頁、首頁或错誤頁。重定向鏈越短越好。
- 確認預設版本:每個重要 URL 都應该有一個不依赖 Cookie 的預設版本,並且這個版本能被連結到。
- 保留静態入口:主導航、面包屑、分類頁和 Sitemap 中的連結,尽量不经過登入或實驗逻辑。
- 观察日誌:如果蜘蛛大量訪問登入頁或某個預設首頁,而深层頁很少,通常說明入口被狀態判断挡住了。
小结
蜘蛛抓取时没有登入態、没有地域偏好、没有推荐画像,這既是限制,也是机會。把核心 URL 和連結放在無狀態也能訪問的位置,抓取路径會更清晰,蜘蛛也更容易沿着你设計的方向走。個性化可以留给用戶,但 URL 發現的基础设施最好保持公開和稳定。