常见問题

入口頁按 User-Agent 给搜尋蜘蛛和用戶返回不同連結,會有什么後果?

入口頁按 User-Agent 返回不同内容,看似能把連結集中喂给搜尋蜘蛛,實际會被归為伪装類做法。本文說明搜尋爬虫如何驗證身份、這種做法對目标 URL 發現的真實影响、几種常见實現方式的坑,以及可操作的排查清單和更稳定的替代思路。

常见問题

入口頁按 User-Agent 给搜尋蜘蛛和用戶返回不同連結,會有什么後果?

把入口頁做成“给搜尋蜘蛛看一份、给普通用戶看另一份”,在蜘蛛池里並不少见。有人是想把目标連結集中喂给爬虫,有人是想让用戶看到更干净的頁面。問题是,這種做法在抓取层面能走多遠,取决于搜尋引擎怎么识別爬虫,以及它怎么判断頁面内容是否一致。

UA 差异化輸出,本质上就是伪装

搜尋引擎把“依據 User-Agent 返回不同内容”归為 cloaking(伪装)。判定标准不是你有没有用 JS,而是同一個 URL 對不同訪問者呈現的内容是否明顯不同,尤其是這種差异是否只為了操纵抓取和排名。

所以讨论的重点不是“會不會被识破”,而是“這種做法能不能稳定地让目标 URL 被發現”。多數情况下答案是否定的。

搜尋蜘蛛到底會拿到哪一份内容

  • 只按 UA 字符串匹配:UA 可以随意伪造,任何人寫上 Googlebot 就能看到你的“蜘蛛版”。主流搜尋引擎也知道這一点,因此對主要爬虫會做 IP 反查加正向 DNS 驗證,而不是只看 UA 字符串。
  • 驗證通過後:它确實會拿到你专门准备的那份 HTML,也就是说“蜘蛛版”里的連結有机會被抓取。
  • 驗證不通過或已被标记:你准备的差异化逻辑基本失效,站点還多了一层被降權處理的風險。

對目标 URL 發現的三個直接影响

蜘蛛版里連結太少或没有連結

這是最常见的情况:為了“干净”,蜘蛛版只放少量連結,或者干脆返回一個說明頁。此时目标 URL 压根不會進入抓取队列,入口頁等于白做。

蜘蛛版連結遠多于用戶版

用戶看到 5 條,蜘蛛看到 300 條,這種量級差异是典型的作弊特征。即便連結被抓過一次,後續入口頁的抓取频次也很容易掉下来。

两份内容结构差太多

如果蜘蛛和用戶拿到的頁面结构差异過大,比如不同标题、不同主内容,即便連結能抓到,入口頁本身的信任度也會被拉低,進而影响它對外鏈的传递效果。

常见實現方式和各自的坑

  1. 服務端按 UA 判断,返回不同 HTML:最难解释,一旦被人工审核或算法标记,風險最高。
  2. 按 UA 做 302 跳到另一個頁面:爬虫拿到跳轉後最终 URL 變了,你原本想推的目标 URL 未必是最终落点,鏈路容易断。
  3. 在前端 JS 里讀取 navigator.userAgent 再插入連結:搜尋蜘蛛大多數情况下不會执行這段脚本,連結往往只出現在用戶侧,對發現目标 URL 帮助有限。
  4. 只用 UA 判断展示样式,比如隐藏導航,但連結集合一致:差异最小,風險相對低,但對“多喂連結”這個目的几乎没有帮助。

如果一定要用,先排查這几項

  • 用不带任何伪装头的請求抓一次入口頁,拿到的是哪一版?
  • 用常见的爬虫 UA 抓一次,差异具体出現在哪几行 HTML?
  • 服務器日誌里,爬虫 IP 反查後的域名和 UA 是否對得上?
  • 目标 URL 是否真的出現在爬虫實际拿到的那份 HTML 里?
  • 目标站自身有没有反過来拦爬虫,比如 CDN 規則、频率限制、robots?

更稳的做法

如果目的只是让目标 URL 被更早發現,與其在 UA 上做文章,不如把入口頁做成一份對所有人一致、结构清晰的頁面:連結是真實的 a 标簽,路径尽量用绝對地址,頁面有基本正文,加载速度正常。

爬虫看到什么,用戶看到什么,最好是一回事。任何只给爬虫看的内容,長期看都在给自己增加不确定性。

另外,入口頁只是發現渠道之一。把 URL 同时通過站内連結、sitemap 和站長平台提交等常規方式暴露出去,通常比做 UA 差异化更省事,也更容易让抓取長期维持在一個稳定水平。