蜘蛛默认用移动端身份来抓取
过去搜索引擎的爬虫大多以桌面浏览器身份访问页面,站点给桌面端准备的那份 HTML 就是蜘蛛看到的内容。现在这个默认已经反过来了:主流搜索引擎以移动优先的方式建立索引,爬虫在大多数情况下会带着智能手机的 User-Agent 来抓取。这意味着,移动版页面才是蜘蛛真正读取的那份内容,桌面版更多只是给坐在电脑前的人看的。
这对抓取路径的影响很直接:蜘蛛能看到的正文长度、出链数量、以及顺着这些链接能走到的 URL,都取决于移动版怎么输出。
三种移动化做法,蜘蛛看到的东西不一样
响应式设计:一个 URL 一份 HTML
最简单也最省事。同一个 URL 返回同一份 HTML,只用 CSS 控制布局。蜘蛛拿到的 DOM 和桌面用户基本一致,内链数量、正文、canonical 都不用额外处理。只要注意别把关键内容塞进只在桌面断点显示的容器里,蜘蛛看到的就是完整的页面。
动态服务:同一个 URL,两套 HTML
服务器根据 User-Agent 返回不同的 HTML。这种做法本身可以接受,但要保证两套内容的主干一致:标题、正文、内链、结构化数据都要对得上。同时建议返回 Vary: User-Agent,让中间层缓存知道这份响应随 UA 变化,否则缓存可能把移动版发给桌面用户,或者反过来让蜘蛛长期拿到一份陈旧内容。
风险在于,维护两套模板时很容易只改一套。桌面版新增的栏目链接没有同步到移动版模板,蜘蛛就永远走不到那些新 URL,URL 发现的速度会明显慢下来。
独立移动 URL:m.example.com 或带参数版本
这种方式现在不适合新做,但如果是历史遗留就得处理好三件事:移动版页面的 canonical 指向桌面版 URL(或自指并做双向标注),桌面版页面加上指向移动版的 alternate 标注,移动版不要用 robots.txt 整站禁止。最后一条最容易被忽略:一旦移动子域被禁止抓取,蜘蛛就只能靠桌面版判断,而你偏偏把主要内容都放在移动版上,结果两边都拿不到完整信息。
移动版容易丢掉的几样东西
- 折叠内容:手风琴、标签页里默认收起的内容,如果只是用 CSS 隐藏通常还能被抓到;如果改成点击才异步加载,就可能抓不到。
- 内链数量:移动端导航常被收进汉堡菜单,页脚被精简,结果是移动版页面的出链明显少于桌面版,蜘蛛沿内链发现的 URL 也跟着变少。
- 分页与列表:移动端列表常改成无限滚动,蜘蛛滚不动,第二页之后的 URL 就可能不再进入抓取队列。
- 标注信息:移动版模板里漏掉或写错的 canonical、hreflang,会把蜘蛛对页面关系的判断带偏。
怎么自查蜘蛛看到的是哪一份
- 用移动端 User-Agent 请求页面,保存服务器返回的原始 HTML。
- 再换桌面 UA 请求同一 URL,两份 HTML 做对比,重点看正文长度、主标题、canonical 和内链数量。
- 在访问日志里按 User-Agent 分组,看搜索引擎爬虫的移动身份占比,以及它们实际抓到了哪些 URL。
- 把 Sitemap 里提交的 URL 和实际被抓的 URL 对照,找出只在桌面版出现、移动版没有任何入口的页面。
判断标准很简单:把移动版 HTML 当成蜘蛛唯一能看到的东西。如果某个 URL 在这份 HTML 里没有任何入口,它被发现的概率就很低。
让两条路径尽量重合
不管用哪种方案,目标都是让移动版和桌面版承载同样的信息与链接拓扑。移动端为了体验做减法可以理解,但减掉的部分不要恰好是蜘蛛用来发现新 URL 的那部分。导航可以折叠,链接要留在 HTML 里;列表可以无限滚动,前几页的分页链接最好保留;内容可以收起,别改成点击才加载。
服务器稳定性会放大这个问题:如果移动版和桌面版走的是不同渲染路径,任何一侧超时或报错,蜘蛛拿到的就是残缺页面,抓取路径也跟着断掉。把移动版的响应时间和错误率当成抓取健康的日常指标来盯,比事后排查索引缺失要省力得多。