做蜘蛛池入口页时,不少人会给移动端和桌面端分别放一套链接:桌面端指向普通版目标页,移动端指向 m 版目标页,或者干脆只在桌面端放链接。等看日志时发现搜索蜘蛛来得不少,但目标 URL 的抓取记录总对不上,就会怀疑是不是“抓错版本”了。这个问题本质上属于移动端适配的范畴,和蜘蛛池本身的机制关系不大。
先分清入口页的三种做法
入口页区分终端,常见有三种实现方式,搜索蜘蛛的处理逻辑并不一样。
- 响应式同一 URL:桌面和移动访问同一个地址,HTML 基本一致,只有样式不同。这种情况下不存在“抓哪个版本”的问题。
- 独立移动域名:例如 m.example.com 与 www.example.com 两套地址,内容结构接近,但链接并不完全相同。
- 同一 URL 动态返回不同 HTML:根据 UA 或屏幕宽度判断,移动端返回带 m 版链接的 HTML,桌面端返回另一套。
搜索蜘蛛实际会看什么
与其猜它“应该”抓哪一版,不如看它实际请求了什么。判断依据主要来自服务器日志和入口页返回的 HTML 本身,而不是我们的预期。
独立移动域名的情况
多数搜索引擎以移动端为主索引,也就是主要用移动端 UA 抓取并评估页面。如果入口页在移动端 UA 下返回的 HTML 里没有目标链接,只在桌面端 HTML 里才有,那这条链接被发现的概率会明显下降。反过来,只给移动端放链接、桌面端不放,通常问题不大。
桌面端链接为什么更容易被漏
在移动端优先的前提下,桌面端 UA 的抓取频率往往会被压低。桌面入口页即使放了目标链接,被发现和跟进的速度也可能比移动端慢,在抓取配额有限时更明显。所以两版链接不一致时,优先保证移动端那一版是完整的。
同一 URL 返回两套 HTML
这种做法风险更高。搜索蜘蛛拿到的 HTML 取决于你判断 UA 的规则,一旦匹配逻辑写错,比如把某些移动 UA 判成桌面,它拿到的就是你意料之外的那一版,链接偏多、偏少甚至为空都可能出现。而且不同搜索引擎的 UA 字符串并不一致,很难保证每一条都命中。
怎么核对自己的入口页
- 用移动端 UA 和桌面端 UA 分别请求入口页的同一个地址,各保存一份返回的 HTML。
- 对比两份 HTML 里目标链接的数量和位置是否一致,重点看正文区域有没有链接。
- 检查是否存在依赖 JS 才出现的链接,服务端返回的源码里是否已经包含。
- 对照服务器日志,看搜索蜘蛛实际带的哪类 UA、请求的是哪个地址、返回状态码是多少。
- 把日志里蜘蛛抓到的 URL 和目标链接清单逐条对一遍,找出从未出现过的那些。
实践中的几条建议
- 入口页尽量用响应式或同一套 HTML,两端都放上目标链接,省去判断成本。
- 不要靠 UA 判断“只给搜索引擎看”某一版,返回内容差异过大容易被当作异常处理。
- 如果用独立移动域名,两套入口页都要能独立访问、状态码正常、链接可点。
- 移动端 HTML 里的链接尽量用普通 a 标签,避免必须点击或滚动后才加载出来。
- 核对以日志为准,第三方工具和主观猜测只能作为参考。
搜索蜘蛛并不“挑版本”,它只是按自己请求到的地址和 UA 拿返回内容。入口页两端内容一致、链接都写在服务端 HTML 里,这个问题基本不会出现;真正需要排查的,往往是 UA 判断规则和日志对不上。