不少人會在蜘蛛池入口頁上做一件事:根據訪問者 User-Agent 判断来的是哪家蜘蛛,然後返回不同的連結列表——给百度蜘蛛一套,给 Googlebot 另一套,给普通用戶又是第三套。理由通常是想让每家搜尋引擎都抓到指定的那几個 URL。這個思路值不值得做?它對 URL 發現到底是帮忙還是帮倒忙?下面把技術事實拆開讲。
一、先说清楚這属于什么行為
按 UA 返回不同内容,本质上就是内容伪装(cloaking)。区別只在于伪装的對象是“搜尋蜘蛛對比普通用戶”,還是“這家蜘蛛對比那家蜘蛛”。前者是绝大多數搜尋引擎寫進质量指南的违規行為;後者虽然不常被單獨点名,但同样属于可疑信号。
所以真正的問题不是“能不能被發現”,而是“被發現之後值不值得”。URL 發現只是第一步,被發現了却带着负面信号,對站点运营没有實际好處。
二、搜尋蜘蛛實际會怎么處理
- 常規抓取走的是同一套 UA 池。百度、Google、必應的主抓取爬虫都使用固定的 UA 字符串,頁面按 UA 分流在技術上确實能命中。
- 但蜘蛛身份是可以被校驗的。主流搜尋引擎會做反向 DNS 或 IP 段校驗,入口頁無法伪造蜘蛛身份;反過来,蜘蛛也能识別出“你只對我特殊對待”。
- 多身份抽样會暴露差异。搜尋引擎會同时用桌面 UA、移動 UA 以及不带 UA 的普通客戶端訪問同一地址,几次對比就能看出内容不一致。
- 發現不等于收錄。即使目标 URL 被這個入口頁带到了爬虫面前,爬虫依然會獨立评估目标頁本身的质量。
三、什么情况下目标 URL 會被漏掉
- UA 判断寫得過窄。例如只匹配包含固定字符串的 UA,而新版爬虫的 UA 有變化,命中失敗就直接返回空頁面或跳首頁。
- 分流逻辑出错,返回给蜘蛛的那個分支根本不含連結。這類 bug 在自建程序里非常常见,而且不容易被人工訪問發現。
- 同一 URL 多次抓取结果不一致,爬虫會降低對该入口頁的信任,後續可能减少回訪频率。
- 移動端 UA 返回的連結和桌面端完全不同,導致其中一方的目标 URL 長期得不到發現机會。
四、更稳妥的做法
如果目标是让更多目标 URL 被搜尋蜘蛛看到,不需要靠 UA 分流。下面這些做法更省事,也更安全:
- 所有訪問者看到同一份連結列表。連結寫在 HTML 里,使用普通的 a 标簽,href 寫完整的绝對地址。
- 入口頁本身能被正常抓取:返回 200,没有被 robots.txt 屏蔽,頁面头部没有 noindex。
- 連結數量保持稳定,不要今天 20 條、明天 2000 條。
- 定期检查目标 URL 是否可訪問,避免入口頁大量指向 404 或跳轉鏈。
- 确實需要区分移動端和桌面端时,用响應式頁面呈現同一批連結,而不是维護两套不同的連結集合。
發現机會是爬虫给的,收錄结果是頁面自己挣的。入口頁能做的只是把门打開,没法替目标頁回答“我值不值得被收錄”。
五、自查清單
- 用不同 UA(包括不带 UA 的普通請求)訪問入口頁,對比返回的 HTML 是否一致。
- 查看服務器日誌,確認同一 URL 在不同 UA 下的响應狀態碼和内容長度是否一致。
- 確認入口頁在關閉 JavaScript 後仍然能看到連結。
- 抽查目标 URL 的狀態碼、canonical 與 robots 設定是否正常。
六、结论
按 UA 给不同搜尋蜘蛛返回不同連結,短期看起来像是“精准投放”,實际上是在给自己制造風險。URL 發現依赖的是入口頁被稳定、可重复地抓取,而不是给爬虫開小灶。把入口頁做成所有訪問者都能看到同一份連結、结构稳定、可正常抓取的普通頁面,才是更長期有效的選擇。