把入口页做成“给搜索蜘蛛看一份、给普通用户看另一份”,在蜘蛛池里并不少见。有人是想把目标链接集中喂给爬虫,有人是想让用户看到更干净的页面。问题是,这种做法在抓取层面能走多远,取决于搜索引擎怎么识别爬虫,以及它怎么判断页面内容是否一致。
UA 差异化输出,本质上就是伪装
搜索引擎把“依据 User-Agent 返回不同内容”归为 cloaking(伪装)。判定标准不是你有没有用 JS,而是同一个 URL 对不同访问者呈现的内容是否明显不同,尤其是这种差异是否只为了操纵抓取和排名。
所以讨论的重点不是“会不会被识破”,而是“这种做法能不能稳定地让目标 URL 被发现”。多数情况下答案是否定的。
搜索蜘蛛到底会拿到哪一份内容
- 只按 UA 字符串匹配:UA 可以随意伪造,任何人写上 Googlebot 就能看到你的“蜘蛛版”。主流搜索引擎也知道这一点,因此对主要爬虫会做 IP 反查加正向 DNS 验证,而不是只看 UA 字符串。
- 验证通过后:它确实会拿到你专门准备的那份 HTML,也就是说“蜘蛛版”里的链接有机会被抓取。
- 验证不通过或已被标记:你准备的差异化逻辑基本失效,站点还多了一层被降权处理的风险。
对目标 URL 发现的三个直接影响
蜘蛛版里链接太少或没有链接
这是最常见的情况:为了“干净”,蜘蛛版只放少量链接,或者干脆返回一个说明页。此时目标 URL 压根不会进入抓取队列,入口页等于白做。
蜘蛛版链接远多于用户版
用户看到 5 条,蜘蛛看到 300 条,这种量级差异是典型的作弊特征。即便链接被抓过一次,后续入口页的抓取频次也很容易掉下来。
两份内容结构差太多
如果蜘蛛和用户拿到的页面结构差异过大,比如不同标题、不同主内容,即便链接能抓到,入口页本身的信任度也会被拉低,进而影响它对外链的传递效果。
常见实现方式和各自的坑
- 服务端按 UA 判断,返回不同 HTML:最难解释,一旦被人工审核或算法标记,风险最高。
- 按 UA 做 302 跳到另一个页面:爬虫拿到跳转后最终 URL 变了,你原本想推的目标 URL 未必是最终落点,链路容易断。
- 在前端 JS 里读取 navigator.userAgent 再插入链接:搜索蜘蛛大多数情况下不会执行这段脚本,链接往往只出现在用户侧,对发现目标 URL 帮助有限。
- 只用 UA 判断展示样式,比如隐藏导航,但链接集合一致:差异最小,风险相对低,但对“多喂链接”这个目的几乎没有帮助。
如果一定要用,先排查这几项
- 用不带任何伪装头的请求抓一次入口页,拿到的是哪一版?
- 用常见的爬虫 UA 抓一次,差异具体出现在哪几行 HTML?
- 服务器日志里,爬虫 IP 反查后的域名和 UA 是否对得上?
- 目标 URL 是否真的出现在爬虫实际拿到的那份 HTML 里?
- 目标站自身有没有反过来拦爬虫,比如 CDN 规则、频率限制、robots?
更稳的做法
如果目的只是让目标 URL 被更早发现,与其在 UA 上做文章,不如把入口页做成一份对所有人一致、结构清晰的页面:链接是真实的 a 标签,路径尽量用绝对地址,页面有基本正文,加载速度正常。
爬虫看到什么,用户看到什么,最好是一回事。任何只给爬虫看的内容,长期看都在给自己增加不确定性。
另外,入口页只是发现渠道之一。把 URL 同时通过站内链接、sitemap 和站长平台提交等常规方式暴露出去,通常比做 UA 差异化更省事,也更容易让抓取长期维持在一个稳定水平。