搜尋抓取

搜尋蜘蛛抓取:會话 Cookie 與登入態跳轉造成的路径偏移排查

蜘蛛大量落在登入頁或带會话參數的地址上,往往不是連結寫错,而是服務端用 Cookie 判断身份的規則把自然抓取一並拦下。本文梳理路径偏移的常见表現、用無 Cookie 請求的排查顺序、會话串與登入跳轉的處理方式,以及調整後需要持續观察的指标。

搜尋抓取

搜尋蜘蛛抓取:會话 Cookie 與登入態跳轉造成的路径偏移排查

有些站点在浏览器里訪問一切正常,但從抓取日誌看,蜘蛛大量落在 /login、/verify 這類地址上,目标内容頁的抓取量始终上不去。這種“路径偏移”很多时候不是連結寫错,而是會话狀態在作怪。

一、常见的偏移表現

  • 蜘蛛請求内容頁,返回 302 或 307,最终落到登入頁、驗證頁或地区選擇頁;
  • 同一個内容地址每次被抓取都带上不同的會话參數,一個入口被拆成很多份;
  • 目錄頁對未登入用戶開放,但列表與分頁連結只在登入後才輸出,蜘蛛看不到後續入口。

二、為什么會發生

服務端若用 Cookie 判断訪問者身份,而蜘蛛通常不携带站点 Cookie,就會被当成“未登入訪客”。如果規則寫得過粗,比如“未登入訪問内容目錄一律跳登入”,自然抓取也會被一並拦下。另一種情况是框架在首次响應时下發 Set-Cookie,並把會话号寫進 URL;這些带參數的連結一旦被複製到頁面里,就會形成一批带會话串的入口,既浪費抓取量,也让入口归並變得混乱。

三、排查顺序

  1. 用不带 Cookie 的請求訪問几個典型内容頁,记錄狀態碼與最终地址;
  2. 在抓取日誌里筛 3xx,統計 Location 指向的域名與路径分布,確認是否集中指向登入或驗證頁;
  3. 检查頁面中出現的連結,是否带 sid、jsessionid、token 一類參數;
  4. 確認 CDN、WAF、反向代理层是否也存在基于 Cookie 的跳轉或人机校驗規則;
  5. 對比登入前後的 HTML,判断分頁與列表連結是否属于登入後才渲染的部分。

四、處理方式

  • 把公開内容頁從“必须登入”的規則里摘出来;确需權限的内容用明确的 403 回應,而不是跳轉登入頁;
  • 關閉 URL 重寫中的會话串附加,避免带參數連結被複製扩散;
  • 分頁與列表尽量在未登入狀態下輸出可抓取的連結,需要交互的部分再交给脚本;
  • 确實不想被抓取的路径,用 robots 規則明确排除,减少無效請求占用。
跳轉到登入頁並不會隐藏内容,只會让抓取预算花在一個没有正文的地址上。

五、驗證與持續观察

調整後不要只看一天的資料。观察目标目錄的狀態碼分布是否從 3xx 轉為 200,落到登入頁的請求占比是否下降,带會话參數的 URL 數量是否收敛,以及内容頁的單日抓取次數是否回到合理区間。同时留意新上线的功能是否又引入了 Cookie 判断,把“無 Cookie 訪問内容頁返回 200”作為上线前的固定自检項,會比事後翻日誌省事得多。