很多入口頁在浏览器里看起来正常,連結齐全、内容完整,但蜘蛛来的时候看到的却是另一個版本:連結没有、内容空白、甚至直接被跳轉到登入頁。原因往往不在服務器,而在 cookie 和登入態。
蜘蛛的請求預設是“陌生人”
搜尋引擎蜘蛛抓取頁面时,一般不會携带你浏览器里的 cookie,也不會替你完成登入、点击、勾選同意框這些動作。它發出的是一個相對干净的 HTTP 請求,然後讀取服務器返回的 HTML。
這意味着,任何依赖“先有 cookie 才輸出内容”的逻辑,對蜘蛛都可能不成立。蜘蛛看到的可能是未登入狀態、預設語言、預設地区,或者一個被彈窗遮住的頁面。
入口頁常见的 cookie 依赖
- 登入後才顯示連結:導航、列表或推荐位只在 session 有效时渲染。
- 地区或語言 cookie:没有 cookie 时回落到空狀態或错誤頁。
- AB 測試 cookie:不同分组看到不同連結,蜘蛛可能只拿到其中一個版本。
- 同意彈窗:内容被遮罩层挡住,蜘蛛仍讀到源碼,但真實用戶可能看不到,体驗不一致。
- 會員可见内容:入口連結放在付費墙之後。
為什么這對蜘蛛池入口頁很關键
蜘蛛池入口頁的主要任務不是把用戶留在頁面,而是让蜘蛛顺着連結繼續走。如果核心連結被登入態或 cookie 判断挡住,蜘蛛能讀到的可能只是一個空壳頁。它不會為了你“登入一下”,也不會帮你点開折叠菜單。
有些站点用 JavaScript 在頁面加载後讀取 cookie,再動態插入連結。蜘蛛是否执行脚本、执行到什么程度,各搜尋引擎並不完全一致。把連結發現完全押在脚本和 cookie 上,稳定性會差很多。
怎么检查蜘蛛视角
- 用不带 cookie 的請求訪問入口頁,例如用 curl 或浏览器的無痕窗口,並禁用 JavaScript。
- 查看返回的 HTML 源碼里,是否已经包含你想让蜘蛛發現的連結。
- 检查服務器日誌中蜘蛛的請求,看看它拿到的狀態碼和响應長度是否正常。
- 對比登入前後、有無 cookie 时頁面輸出的連結差异。
- 如果用了 CDN 或缓存,確認缓存版本不是登入用戶专属版本。
cookie 可以用,但別把它当门槛
cookie 本身不是問题。用 cookie 做個性化推荐、记住語言偏好,都可以。問题在于把 cookie 当作“是否輸出入口連結”的開關。更稳妥的做法是:核心連結預設輸出,cookie 只用来做附加調整。
如果頁面确實需要登入才能看到完整内容,至少把入口頁和登入後頁面分開。入口頁负责暴露可公開訪問的連結,登入頁负责用戶功能。
蜘蛛不是你的用戶,它是一個不带身份、不点按钮、不勾選同意框的訪客。
常见誤区
- 以為蜘蛛會执行 JS 並自動設定 cookie。
- 以為登入墙只影响用戶,不影响抓取。
- 以為彈窗遮罩只是前端問题,蜘蛛會“点掉”。
- 把入口連結放在登入後才能渲染的组件里。
- 用 cookie 做全站跳轉,未登入直接跳到首頁或登入頁。
使用建议
- 入口頁預設輸出核心連結,不依赖 cookie 判断。
- 需要登入的内容和入口頁分离,別混在同一個 URL。
- 用服務端渲染或静態 HTML 兜底,避免連結只存在于 JS 执行之後。
- 定期用無 cookie、無 JS 的方式抽查入口頁源碼。
- 如果使用地区或語言判断,给蜘蛛一個稳定的預設版本,而不是空白頁。
- 检查缓存配置,避免把登入態頁面缓存後返回给蜘蛛。
把入口頁做成“谁来都能看到連結”的頁面,通常比事後猜蜘蛛看到了什么更省事。cookie 和登入態可以服務用戶体驗,但不應该成為蜘蛛發現連結的障碍。