不少人会在蜘蛛池入口页上做一件事:根据访问者 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 发现依赖的是入口页被稳定、可重复地抓取,而不是给爬虫开小灶。把入口页做成所有访问者都能看到同一份链接、结构稳定、可正常抓取的普通页面,才是更长期有效的选择。