做蜘蛛池的人常常会想一个问题:入口页只给搜索蜘蛛看链接,普通访客打开是一个正常页面或者直接跳走,这样是不是既能被蜘蛛抓到目标 URL,又不会被人看到?这个思路就是典型的按 UA 展示不同内容,也就是常说的伪装(cloaking)。它技术上不难实现,但风险往往比想象中大。
搜索蜘蛛看到的版本,可能和浏览器里完全不一样
搜索蜘蛛抓取时会带自己的 UA,但现在的抓取流程并不只靠 UA 字符串判断。很多搜索引擎会对比不同 UA、不同来源拿到的 HTML 内容,也会用渲染服务执行页面脚本。如果服务端根据 UA 返回完全不同的结构,差异很容易被放大记录,影响的不只是这一个入口页。
入口页上常见的 UA 判断做法
- 服务端根据 User-Agent 返回不同的 HTML,对蜘蛛输出链接列表,对访客输出普通页面。
- 用 JavaScript 判断 navigator.userAgent,再动态写入目标链接。
- 对非蜘蛛 UA 直接 302 跳到一个与入口页无关的页面。
- 用 IP 段判断,配合反向 DNS 校验来识别蜘蛛来源。
这些做法在技术上都跑得通,但它们都在同一条线上:蜘蛛看到的内容和用户看到的内容不一致。
搜索蜘蛛为什么对“看人下菜碟”比较敏感
搜索引擎的基本立场是:蜘蛛看到的内容应与用户看到的实质一致。如果蜘蛛拿到的是链接列表,用户拿到的是另一套页面甚至空页面,这种差异一旦被识别,轻则这段内容不被信任,重则入口页整体抓取频率下降,连带的域名也可能被降权。这里说的是风险概率,不是必然结果,但代价通常不小。
蜘蛛看到什么、用户看到什么,两者差得越大,入口页能稳定贡献 URL 发现的时间就越短。
真要做差异化展示,边界在哪里
- 差异只体现在样式、排版、模块顺序上,链接结构保持一致。
- 对无 JS 或无登录环境给出可读的降级内容,而不是空白页。
- 不因 UA 改变核心链接,至少保证普通访客也能正常点到目标地址。
- 避免用 JS 判断 UA 后再注入链接,这种方式既不可靠,也更容易被归入伪装。
更稳妥的做法
- 入口页就做成一个能正常打开的普通页面,目标链接用可点击的超链接直接写在 HTML 里,不依赖脚本。
- 不想被同行或访客注意到,可以用 robots.txt 控制抓取范围,但要清楚它只影响抓取行为,不等于这个 URL 不会被别人知道或引用。
- 把入口页放在不参与主体收录的独立域名或子域上,和主站保持区隔。
- 控制入口页数量与更新节奏,把主要精力放回目标站的内容质量上,URL 发现才更容易持续。
几个常见疑问
入口页对普通访客直接返回 404,会影响蜘蛛抓取吗?
可能会出现影响。入口页只对蜘蛛返回 200、对访客返回 404,这种状态不一致本身就是一种信号。入口页长期状态混乱,抓取频率和稳定性都容易变差。
用 JS 判断 UA 再写入链接,搜索蜘蛛会执行吗?
主流搜索蜘蛛大多具备渲染能力,但渲染有延迟、有配额,也不是所有页面都会被完整渲染。即便能渲染出来,用 UA 做开关依然属于伪装思路,不建议把它当成安全通道。
入口页内容对蜘蛛和访客一致,就绝对安全吗?
不能这么说。入口页的作用是提供链接路径,如果页面本身没有实质内容、链接指向的站点质量又一般,仍然可能被按低质页面处理。
小结
入口页的核心目标,是让目标 URL 被稳定地发现,而不是短期内骗过某一次抓取。与其在 UA 判断上做文章,不如把入口页做得普通一些:能正常打开、链接是真实超链接、内容与目标站不冲突。伪装换来的抓取量往往不持久,反而会让入口页更早失效。