常见問题

蜘蛛池入口頁按 UA 给蜘蛛返回不同内容,搜尋蜘蛛看到的不一样會怎样

蜘蛛池入口頁按 UA 给搜尋蜘蛛和普通用戶返回不同内容,是不少人用過的做法,但風險不小。本文說明常见做法、搜尋引擎比對不同 UA 返回结果的思路、哪些差异影响較小、哪些容易被判定為隐藏真實内容,並给出几條更稳妥的替代做法和自查清單。

常见問题

蜘蛛池入口頁按 UA 给蜘蛛返回不同内容,搜尋蜘蛛看到的不一样會怎样

蜘蛛池入口頁的做法里,按 User-Agent(UA)返回不同内容是很常见的一類。思路通常很简單:识別到搜尋蜘蛛的 UA,就返回一版纯連結列表,尽量多放目标 URL;识別到普通浏览器,就返回一版看起来正常的頁面。這样做的人往往是想让蜘蛛看到更多連結,同时不想让訪問者觉得頁面奇怪。

常见的 UA 区分做法

  • 蜘蛛 UA 返回精简 HTML,普通用戶返回带样式和正文的完整頁面。
  • 蜘蛛 UA 返回的連結數量明顯多于普通用戶版本。
  • 非蜘蛛 UA 直接跳轉到首頁或其他頁面,甚至返回空白。
  • 只允许特定 UA 訪問,其他請求一律 403。

搜尋蜘蛛看到的内容和別人不一样,會有什么後果

搜尋引擎對這件事的容忍度很低。抓取系統通常不會只看一次請求,常见做法是拿不同 UA、不同来源去對比同一個 URL 的返回结果。如果普通用戶看到的内容和蜘蛛看到的差异很大,而且差异正好体現在連結、正文這類會影响判断的部分,就可能被認定為隐藏真實内容,也就是常说的 cloaking。

一旦被這样判定,影响往往不只是入口頁本身:入口頁被抓取和信任的程度下降後,上面的目标 URL 被再次訪問的概率也會跟着降低,之前积累的抓取路径可能慢慢失效。這里的因果關系不是必然的,不同搜尋引擎的處理力度不一样,但風險方向是一致的。

判断标准大致可以概括為:用戶看到的内容,和蜘蛛看到的内容,是不是同一份。差异越大、越针對搜尋引擎,風險越高。

哪些差別影响較小,哪些風險明顯

影响較小的情况

  • 两版内容主体相同,只是排版、CSS、脚本加载方式不同。
  • 因為缓存或 CDN 节点不同導致的轻微差异。
  • 根據語言或地区返回不同語言版本,並且對普通用戶也是同样規則。

風險明顯的情况

  • 蜘蛛版塞進大量用戶看不到的連結,用戶版几乎没有連結。
  • 用戶版是正常文章,蜘蛛版却是纯連結列表。
  • 對非蜘蛛 UA 直接 403 或跳轉,把入口頁做成只對蜘蛛開放。

換句话说,問题不在于頁面長得不一样,而在于入口頁的主要用途是不是只服務搜尋引擎。如果用戶版本本身也有可讀内容、也能点到這些連結,性质就完全不同。

如果确實需要控制蜘蛛看到的内容,可以怎么做

  1. 優先保證同一個 URL 對所有人返回同一份内容,連結放在頁面里對用戶也有意义。
  2. 需要控制抓取量时,用 robots.txt 的 Crawl-delay 或服務器限速,而不是砍掉用戶可见的内容。
  3. 連結列表可以長,但让它對用戶也是可用的,必要时做分頁,而不是只對蜘蛛展開。
  4. 入口頁不要只服務蜘蛛,保留最基本的導航和說明文字,頁面本身才站得住。
  5. 用服務器日誌观察蜘蛛實际拿到的返回内容,而不是只看自己设定的規則。

自查时重点看這几項

  • 用普通浏览器 UA 和蜘蛛 UA 各請求一次入口頁,對比返回的 HTML 是否一致。
  • 確認用戶版和蜘蛛版的連結集合相差多少條,差异是不是集中在連結上。
  • 检查有没有针對非蜘蛛 UA 的 403、302 或空白返回。
  • 看入口頁被訪問时的狀態碼是否稳定,避免正常限速被誤判成異常。
  • 目标 URL 在普通訪問下是否也能打開,而不是只在蜘蛛 UA 下才通。

總的来说,蜘蛛池入口頁的價值在于让目标 URL 更容易被發現,而不是让蜘蛛單獨看到一份用戶看不到的頁面。两個版本的差异越小,長期跑下去越省事,也越不容易在某個時間点突然失去抓取。