搜尋抓取

蜘蛛不带 Cookie:會话、登入墙與它實际看到的頁面版本

搜尋蜘蛛訪問頁面时通常不携带 Cookie,也不维持登入會话。這意味着需要登入才能看到的内容、依赖會话判断的地区版本,對蜘蛛来说可能是另一幅样子。本文說明會话參數、登入墙和個性化頁面會怎样影响抓取,並给出几條自查與調整思路。

搜尋抓取

蜘蛛不带 Cookie:會话、登入墙與它實际看到的頁面版本

做站点运营时,很多人习惯先登入後台、選好地区、接受一遍 Cookie,再去看頁面,看到的是“自己那一份”頁面。而搜尋蜘蛛来的时候,情况往往不一样:它的每一次請求通常是獨立的,不带着網站之前發给它的 Cookie,也不维持登入狀態。換句话说,你熟悉的那個已登入、已選地区的頁面,對蜘蛛来说,是一個第一次到訪的陌生訪客看到的版本。

蜘蛛的請求為什么是“干净”的

抓取是分批、分請求進行的,同一個 URL 可能在几天後再被訪問一次,中間不保證保持任何會话。除非你在服務端主動做了對蜘蛛的识別和放行,否則它拿到的就是没有任何歷史的响應。理解這一点,很多抓取上的“異常”就能解释得通:蜘蛛看到的和你看到的不一样,不是它出错,而是它本来就没带那些狀態。

會话 ID 寫進 URL 會带来什么

部分老系統會把會话标识拼在地址里,例如 jsessionid=XXXX,或者用 sid= 這類參數。每次會话不同,URL 就不同,蜘蛛容易把同一個頁面当成多個地址反复抓取,抓取額度被平白消耗,頁面本身的信号也被分散。

  • 會话狀態尽量放在 Cookie 里,不要放進 URL;
  • 如果短期改不了,至少在服務端對携带會话參數的請求做規范化處理;
  • 检查 Sitemap 和内鏈里有没有带會话參數的地址。

登入墙與付費墙:蜘蛛能看到多少

如果頁面的主要内容要求登入才能看,蜘蛛基本拿不到這些内容。它可能只看到一個标题、一個登入表單,或者干脆被重定向走。這不代表網站一定有問题,但要清楚:内容對蜘蛛不可见时,它判断頁面的依據也就只剩下很少的信息。

  • 全部内容需要登入:蜘蛛看到的接近空壳,頁面價值难以体現;
  • 部分内容需要登入:尽量让标题、導语、核心段落的前一部分保持可见;
  • 未登入自動跳轉到登入頁:注意返回的响應碼,避免让蜘蛛一直停在跳轉鏈里。
如果业務上必须设登入墙,至少让蜘蛛能看到頁面的主题描述,而不是一個只有表單的空頁面。

用 Cookie 判断地区、語言时要注意

用 Cookie 记住用戶選擇的語言或地区很常见。但蜘蛛没有這個 Cookie,它會拿到預設版本。這时候要確認一件事:預設版本是不是内容最完整的那一版,而不是“請選擇你所在的地区”這類中間頁。如果預設版本本身就是一個跳轉頁,蜘蛛很大可能就停在那里了。

自查的几步

  1. 用浏览器的無痕模式,或清空 Cookie 後再訪問目标頁面;
  2. 查看網頁源代碼,確認首屏 HTML 里是否已经包含主要正文;
  3. 留意訪問时是否被重定向到登入頁或其他中間頁;
  4. 用抓取或調试工具發起一次不带 Cookie 的請求,對比返回的内容與狀態碼。

可以顺手調整的几点

  • 核心内容不依赖會话狀態即可訪問;
  • 會话标识不出現在 URL 中;
  • 登入相關跳轉使用合适的响應碼,避免把蜘蛛卡在循环里;
  • 預設版本保持可訪問、内容完整。

抓取不會因為你登入了就把内容一起带走。把“不登入、不带 Cookie 的訪問者能看到什么”当成一個常規检查項,往往能提前發現一批抓取上的問题。