常见问题

蜘蛛池入口页按 UA 给蜘蛛返回不同内容,搜索蜘蛛看到的不一样会怎样

蜘蛛池入口页按 UA 给搜索蜘蛛和普通用户返回不同内容,是不少人用过的做法,但风险不小。本文说明常见做法、搜索引擎比对不同 UA 返回结果的思路、哪些差异影响较小、哪些容易被判定为隐藏真实内容,并给出几条更稳妥的替代做法和自查清单。

常见问题

蜘蛛池入口页按 UA 给蜘蛛返回不同内容,搜索蜘蛛看到的不一样会怎样

蜘蛛池入口页的做法里,按 User-Agent(UA)返回不同内容是很常见的一类。思路通常很简单:识别到搜索蜘蛛的 UA,就返回一版纯链接列表,尽量多放目标 URL;识别到普通浏览器,就返回一版看起来正常的页面。这样做的人往往是想让蜘蛛看到更多链接,同时不想让访问者觉得页面奇怪。

常见的 UA 区分做法

  • 蜘蛛 UA 返回精简 HTML,普通用户返回带样式和正文的完整页面。
  • 蜘蛛 UA 返回的链接数量明显多于普通用户版本。
  • 非蜘蛛 UA 直接跳转到首页或其他页面,甚至返回空白。
  • 只允许特定 UA 访问,其他请求一律 403。

搜索蜘蛛看到的内容和别人不一样,会有什么后果

搜索引擎对这件事的容忍度很低。抓取系统通常不会只看一次请求,常见做法是拿不同 UA、不同来源去对比同一个 URL 的返回结果。如果普通用户看到的内容和蜘蛛看到的差异很大,而且差异正好体现在链接、正文这类会影响判断的部分,就可能被认定为隐藏真实内容,也就是常说的 cloaking。

一旦被这样判定,影响往往不只是入口页本身:入口页被抓取和信任的程度下降后,上面的目标 URL 被再次访问的概率也会跟着降低,之前积累的抓取路径可能慢慢失效。这里的因果关系不是必然的,不同搜索引擎的处理力度不一样,但风险方向是一致的。

判断标准大致可以概括为:用户看到的内容,和蜘蛛看到的内容,是不是同一份。差异越大、越针对搜索引擎,风险越高。

哪些差别影响较小,哪些风险明显

影响较小的情况

  • 两版内容主体相同,只是排版、CSS、脚本加载方式不同。
  • 因为缓存或 CDN 节点不同导致的轻微差异。
  • 根据语言或地区返回不同语言版本,并且对普通用户也是同样规则。

风险明显的情况

  • 蜘蛛版塞进大量用户看不到的链接,用户版几乎没有链接。
  • 用户版是正常文章,蜘蛛版却是纯链接列表。
  • 对非蜘蛛 UA 直接 403 或跳转,把入口页做成只对蜘蛛开放。

换句话说,问题不在于页面长得不一样,而在于入口页的主要用途是不是只服务搜索引擎。如果用户版本本身也有可读内容、也能点到这些链接,性质就完全不同。

如果确实需要控制蜘蛛看到的内容,可以怎么做

  1. 优先保证同一个 URL 对所有人返回同一份内容,链接放在页面里对用户也有意义。
  2. 需要控制抓取量时,用 robots.txt 的 Crawl-delay 或服务器限速,而不是砍掉用户可见的内容。
  3. 链接列表可以长,但让它对用户也是可用的,必要时做分页,而不是只对蜘蛛展开。
  4. 入口页不要只服务蜘蛛,保留最基本的导航和说明文字,页面本身才站得住。
  5. 用服务器日志观察蜘蛛实际拿到的返回内容,而不是只看自己设定的规则。

自查时重点看这几项

  • 用普通浏览器 UA 和蜘蛛 UA 各请求一次入口页,对比返回的 HTML 是否一致。
  • 确认用户版和蜘蛛版的链接集合相差多少条,差异是不是集中在链接上。
  • 检查有没有针对非蜘蛛 UA 的 403、302 或空白返回。
  • 看入口页被访问时的状态码是否稳定,避免正常限速被误判成异常。
  • 目标 URL 在普通访问下是否也能打开,而不是只在蜘蛛 UA 下才通。

总的来说,蜘蛛池入口页的价值在于让目标 URL 更容易被发现,而不是让蜘蛛单独看到一份用户看不到的页面。两个版本的差异越小,长期跑下去越省事,也越不容易在某个时间点突然失去抓取。