蜘蛛池知识

蜘蛛池入口頁的 Cookie 與會话:別让 Set-Cookie 把蜘蛛挡在门外

接入蜘蛛池後,入口頁能被抓取却抓不深,很多时候問题出在 Cookie 上。本文說明搜尋引擎蜘蛛對 Cookie 的處理方式和浏览器的差异,梳理首次訪問種 Cookie 再跳轉、Cookie 墙、會话 ID 進 URL、按 Cookie 差异化返回等常见干扰,並给出排查步骤與配置建议。

蜘蛛池知识

蜘蛛池入口頁的 Cookie 與會话:別让 Set-Cookie 把蜘蛛挡在门外

很多站点接入蜘蛛池後會發現一個現象:入口頁日誌里能看到蜘蛛来過,但只抓了一個 URL 就再没動静,或者每次抓取都被当成“新訪客”,反复請求同一個地址。排除服務器响應慢、robots 拦截這些常见原因後,還有一個经常被忽略的變量——Cookie。

蜘蛛對 Cookie 的處理和浏览器不一样

搜尋引擎蜘蛛通常不會像浏览器那样長期儲存 Cookie。多數情况下,它對 Cookie 的態度是“這次請求带上一次响應里给的 Set-Cookie,但換一個抓取批次或換一個出口 IP,這些 Cookie 就丢了”。如果入口頁的逻辑依赖 Cookie 判断“你是不是已经来過”,蜘蛛就可能永遠停留在第一步。

更麻烦的是,部分站点把會话狀態寫進了 URL 參數,比如 jsessionid=xxx。蜘蛛抓到的每一個連結都带一個随机串,會被当成成千上萬個不同頁面,既浪費抓取预算,也容易形成大量近似重复的内容。

几種常见的 Cookie 干扰形式

1. 首次訪問先種 Cookie 再跳轉

入口頁打開後不是直接輸出内容,而是先 Set-Cookie,再通過 JS 或 302 跳到带參數的地址,真正的正文在第二跳。這類做法在防采集场景里很常见,但用在蜘蛛池入口頁上,等于给蜘蛛加了一道门。

2. Cookie 墙與彈层

合規提示、年龄確認、地区選擇這類彈层,如果需要点击才能繼續並且挡住了正文,蜘蛛拿到的就是没有内容的頁面。較稳妥的做法是把這類逻辑放在首屏渲染之後,或者對無 Cookie 的請求直接放行正文。

3. 按 Cookie 返回不同内容

登入用戶看到 A 版,未登入看到 B 版。如果 B 版是登入引導頁,蜘蛛拿到的就是無内容頁面。接入前要確認未登入狀態下的輸出版本本身是完整、可抓取的。

4. Cookie 影响缓存命中

CDN 或反向代理如果按 Cookie 做缓存键,蜘蛛每次請求都會回源,TTFB 變高,抓取效率下降。可以考虑配置“無 Cookie 請求走缓存”的規則,让入口頁的静態部分尽量命中缓存。

怎么排查

  • 用 curl 或搜尋引擎提供的抓取測試工具,不带任何 Cookie 請求入口頁,看返回的 HTML 里有没有正文。
  • 對比带 Cookie 和不带 Cookie 两次請求的响應体差异,差异越大風險越高。
  • 检查日誌里的 URL 是否出現 jsessionid、PHPSESSID 之類的會话串。
  • 看同一個入口 URL 在不同時間被抓取时,返回的内容是否稳定。

配置上的几條建议

  1. 入口頁尽量無狀態,正文直接輸出,不依赖任何 Cookie 判断。
  2. 會话 ID 不要拼進 URL,用 Cookie 承载或者干脆不用。
  3. Set-Cookie 加上合理的 Path 和 SameSite,避免污染整個域名下的其他路径。
  4. 對静態入口頁,考虑让無 Cookie 的請求直接命中缓存。
  5. 如果业務上确實需要 Cookie,就给蜘蛛一個明确的放行分支,而不是让它自己猜。
提示:Cookie 只是影响抓取的一個环节,調整之後還需要结合日誌观察一段時間,看抓取深度和入口頁覆盖有没有變化,不要只看單次請求的结果。

把 Cookie 這條线理顺,蜘蛛在入口頁上的“第一步”才走得下去,後面的内鏈分發、目标頁引導才有實际意义。