搜尋抓取

同一個 URL 两套内容:给蜘蛛單獨開小灶的代價

同一網址返回两套内容,在動態渲染、地区跳轉、A/B 測試和登入墙等场景里很常见。蜘蛛抓到 A 版本、用戶看到 B 版本,URL 發現、索引版本和内鏈传递都會受影响。本文梳理几類典型场景的處理方式,並给出一份可执行的自查清單。

搜尋抓取

同一個 URL 两套内容:给蜘蛛單獨開小灶的代價

為什么會出現“同一個 URL 两套内容”

一個網址只對應一份内容,是抓取和索引能成立的前提。但在實际站点里,同一 URL 返回不同结果的情况很常见:

  • 用 UA 判断,遇到蜘蛛返回纯文本或预渲染版本,遇到用戶返回正常前端應用;
  • CDN 或 WAF 規則里给搜尋引擎 IP 段放行,普通訪問者却要先過驗證頁;
  • 根據 IP 或浏览器語言做地区跳轉,蜘蛛從海外机房訪問就落到另一個版本;
  • A/B 測試脚本在頁面加载时替換了标题、正文甚至連結,蜘蛛取到的 HTML 和用戶看到的不一致;
  • 内容被放在登入墙、付費墙或“点击展開”之後。

這些做法各有理由,但都會让蜘蛛拿到的頁面和用戶看到的頁面不是同一份。抓取环节一旦出現這種分裂,後面的解析、索引、展示都會跟着偏移。

對抓取路径的實际影响

URL 發現會變窄

蜘蛛沿連結前進。如果它拿到的版本里連結要靠 JS 渲染才有,或者被精简掉,它能發現的 URL 數量就會少一大截。尤其導航、分頁、相關推荐這些区域被替換掉时,深层内容可能長期得不到入口。

索引里的版本可能不是用戶看到的

蜘蛛抓走 A 版本,用戶訪問看到 B 版本,搜尋结果展示的摘要、标题可能對不上。這類不一致往往要靠人工排查才能發現,因為站内自查时看到的一直是用戶版本。

有被判定為作弊的風險

刻意给蜘蛛看一套、给用戶看另一套,属于典型的欺骗性做法。即便出發点只是“让蜘蛛能讀懂”,只要两套内容差异足够大,也可能被归到同一類問题里處理。区別只在意图,机器判断时未必分得清。

几類常见场景怎么處理

预渲染與動態渲染

如果站点是前端渲染,希望蜘蛛拿到可抓取的 HTML,正确做法是让返回给蜘蛛的版本包含與用戶版本一致的核心内容(标题、正文、主要連結),並且最终用戶訪問的 URL 不變。避免只渲染正文而丢掉内鏈,也避免给蜘蛛返回一個“简化到没有導航”的頁面。

地区與語言跳轉

按 IP 强制跳轉是最容易出問题的一類。更稳的做法是:每個語言或地区版本有獨立且可直達的 URL,用 hreflang 互相标注,跳轉只作為提示而不是唯一入口,同时保證預設版本可以直接訪問,不被自動跳轉拦住。

A/B 測試與個性化

測試尽量放在可区分的參數或临时路径上,結束後收敛回主 URL;不要让同一 URL 長期返回两套正文。個性化模块(推荐、價格、库存)如果只影响局部,尽量保留主体内容一致,避免整頁替換。

登入墙與付費墙

完全挡在登入之後的頁面,蜘蛛拿不到内容,也就很难參與索引。如果希望部分内容能被發現,可以放開首段或摘要,並把付費部分明确标注;不要一邊要求登入、一邊期待完整收錄。

判断标准很简單:關掉 JS、換一個陌生 UA、清空 Cookie,用普通請求抓一次,看拿到的 HTML 里有没有你想要蜘蛛看到的内容。如果答案不一致,問题就已经存在了。

自查清單

  1. 用命令行工具或抓取工具,分別以普通用戶 UA 和搜尋引擎 UA 請求同一 URL,對比返回的 HTML 差异。
  2. 關閉 JS 後查看源碼,確認标题、正文、主要内鏈是否還在。
  3. 检查 CDN、WAF、反爬規則里是否存在针對特定 UA 或 IP 段的差异化放行。
  4. 用不同地区的出口 IP 訪問,確認是否發生强制跳轉。
  5. 检查 robots.txt、meta robots 與 X-Robots-Tag 是否在不同版本下返回不同结果。
  6. 確認移動端與桌面端版本内容一致,不存在只给其中一端提供連結的情况。

小结

抓取路径要顺畅,前提是路径本身對蜘蛛可见且稳定。與其给蜘蛛單獨准备一份内容,不如让同一份内容同时對人和對机器可讀:連結寫在 HTML 里,正文不依赖点击才出現,地区版本各有固定地址。做到這一点,抓取、URL 發現和内鏈传递都會少很多说不清的麻烦。