常见问题

入口页对搜索蜘蛛和普通用户返回不同内容,会有什么风险?

有些站点为了让链接“只给搜索蜘蛛看”,会在入口页按 User-Agent 返回不同 HTML。这属于典型的隐藏内容做法,短期看似有效,长期可能影响入口页本身的抓取与信任度。本文说明风险来源、常见的几种误判形式,以及不改 UA 判断也能让链接被发现的做法。

常见问题

入口页对搜索蜘蛛和普通用户返回不同内容,会有什么风险?

做 URL 发现时,经常会遇到一个看似聪明的做法:在入口页里判断 User-Agent,搜索蜘蛛来的时候输出一大串目标链接,普通用户来的时候只显示“页面维护中”或者干脆一片空白。从数据上看,蜘蛛确实抓到了链接,似乎成本最低。但从搜索引擎的规则角度看,这是在给用户和爬虫返回不同内容,属于隐藏内容的范畴,风险比很多人想的要大。

按 UA 返回不同内容,本质是什么

搜索引擎对“隐藏内容”的判定核心很简单:用户看到的和爬虫看到的是不是同一份内容。如果入口页对搜索蜘蛛输出一批链接,对普通访客输出完全不同的页面,那么这些链接对用户没有实际价值,只是为爬虫准备的。这类做法通常被归入 cloaking(伪装),不管你是用服务端判断 UA、判断 IP 段,还是用前端 JS 判断后动态插入 DOM,性质都一样。

并不是所有差异都算问题

需要区分的是,设备适配、语言切换、登录状态不同导致的页面差异,通常有明确的用户收益,也有对应的技术说明,这类差异一般不会被视为作弊。问题出在差异的目的:如果差异只是为了“让蜘蛛看到用户看不到的东西”,那就踩线了。

具体会带来哪些风险

  • 入口页本身的信任度下降。一旦被判定为隐藏内容,页面可能被降权甚至从索引中移除,之后从这个入口发现的链接也会随之失去通道。
  • 抓取频次可能被削减。搜索引擎会把抓取资源重新分配到它更信任的站点上,入口页回访间隔被拉长,URL 发现的节奏直接变慢。
  • 影响面会扩散到整个域名。入口页往往和主站、其他入口页共用域名,处理范围不一定只限单个 URL。
  • 收益不稳定。靠欺骗换来的发现,随时可能因为一次算法更新或人工复核而归零,前期投入的入口页基本作废。

几种常被忽略的变形

  • 把链接用 display:none、字体颜色与背景相同、字号设为 1px 等方式藏起来,只有用户看不到。这同样属于隐藏内容。
  • 入口页正常展示,但把目标链接集中塞进一个默认折叠、用户几乎不会展开的区块,且内容全是无关文本。折叠本身不是问题,问题是内容对用户没有意义。
  • CDN 或 WAF 对疑似爬虫的请求返回验证页。这不是你主动做的,但结果一样:蜘蛛拿到的 HTML 和用户不同。需要单独排查。

不用 UA 判断,也能让入口页被稳定发现

  1. 直接输出静态 HTML,链接对所有人可见。入口页只要结构清晰、正文里有真实可点的超链接,本身就能被正常抓取,没有必要做差异化。
  2. 如果链接数量多、影响阅读,可以用分页或原生展开控件,但链接要写在 HTML 里,而不是等用户交互后才由 JS 插入。
  3. 必须用 JS 渲染时,尽量做服务端渲染或预渲染,保证首屏 HTML 里就包含目标链接。爬虫能不能等到脚本执行完,不同引擎表现并不一致。
  4. 确实不希望被索引的链接,就用 noindex、robots 或权限控制,不要指望“只给蜘蛛看”这条路,它既不稳定也不安全。

怎么自查有没有踩线

  • 用不同的 User-Agent 请求同一个入口页,比如用 curl 分别模拟百度蜘蛛和普通浏览器,对比返回的 HTML 是否一致。
  • 用无痕窗口打开入口页,确认你肉眼看到的链接和日志里蜘蛛抓到的链接是同一批。
  • 检查服务器日志中蜘蛛请求的响应码和响应大小,如果明显小于普通用户,说明返回内容不同。
  • 检查 CDN、WAF 的安全策略,确认没有对搜索蜘蛛返回验证码页或拦截页。
搜索引擎需要的是“用户能看到的链接”,而不是“只有蜘蛛能看到的链接”。前者的发现是可持续的,后者只是在赌没有被发现。

如果已经在用 UA 判断,怎么收尾

把入口页改回统一返回,让链接对用户和爬虫同时可见,然后观察一段时间日志里的抓取频次和响应大小是否恢复正常。不要一边改一边继续上线新的 UA 判断页面,那样很难判断问题是否真的解决。入口页的价值在于让目标 URL 被稳定发现,而不是一次性骗过某次抓取。