本文约 3,438 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:桌面端排名很好,移动端一查却什么都没有
一个典型的求助场景:站点在桌面端搜索里能排到前三,用手机搜同样的词却找不到自己。站长反复检查标题、关键词密度、外链,都没问题。最后用 Search Console 的网址检查工具一看,「抓取方式」一栏写的是 Googlebot Smartphone——Google 从 2020 年起已对所有站点默认启用移动优先索引,2023 年后连最后一批桌面端专属抓取也停掉了。也就是说,Google 眼里根本没有「桌面版页面」这个东西,它索引的就是移动端渲染后的页面。如果你的移动端因为折叠、隐藏、懒加载或者主题适配,少输出了哪怕三分之一正文,那部分内容在 Google 那边就是不存在的。
原理分析:移动优先索引到底改了什么
移动优先索引(mobile-first indexing)改变的只有一件事:抓取和索引使用的 Googlebot 类型与渲染视口。排名算法本身没变,但输入端变了。由此产生三条硬规则:
| 检查项 | 移动端必须 | 常见不一致 |
|---|---|---|
| 正文内容 | 与桌面端完全相同的文字、链接、图片 | 「展开阅读全文」折叠、移动端隐藏侧栏内容、短代码在窄屏下不输出 |
| 元数据 | title、meta description、canonical 一致 | 移动端模板输出了不同的 canonical,或漏掉 meta description |
| 结构化数据 | 两套版本的 JSON-LD 数量与字段一致 | 移动端隐藏了评论区块,导致 AggregateRating 字段消失 |
| 图片 | 同一批图片,alt、标题、src 一致 | 移动端换成低清缩略图,图片 src 不同 |
| hreflang / 内链 | 与桌面端一致 | 移动端导航简化后丢掉了部分内链 |
判断标准很清晰:把浏览器 UA 切成 Googlebot Smartphone 抓一次页面,把结果与桌面 UA 的结果做 diff,只要正文、元数据、JSON-LD 三块有差异,就是风险点。注意不要用「响应式正常」来推断「内容一致」——响应式只保证布局自适应,很多主题仍然会在窄屏下用 display:none 隐藏模块,而隐藏的内容在 Google 看来权重极低甚至被直接忽略。
保姆级实操
步骤 1:确认抓取代理类型。 GSC 网址检查 → 「测试实际网页」→ 查看「抓取方式」。如果显示 Googlebot Smartphone,说明该 URL 已进入移动优先索引。
步骤 2:用命令行比对两套 HTML。 不用打开浏览器,直接用 Googlebot 的两套 UA 抓同一 URL:
#!/usr/bin/env bash
# 用 Googlebot 桌面端与移动端 UA 抓取同一 URL,比对元数据与结构化数据
URL="https://example.com/wordpress-seo-guide/"
DESKTOP_UA="Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
MOBILE_UA="Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
curl -sA "$DESKTOP_UA" "$URL" -o /tmp/desktop.html
curl -sA "$MOBILE_UA" "$URL" -o /tmp/mobile.html
for f in desktop mobile; do
grep -oE '<title>[^<]*</title>|<meta name="description"[^>]*>|<link rel="canonical"[^>]*>' "/tmp/$f.html" > "/tmp/$f.meta"
echo "$f: JSON-LD 块数量 = $(grep -c 'application/ld+json' /tmp/$f.html), 正文字符数 ≈ $(sed 's/<[^>]*>//g' /tmp/$f.html | wc -c)"
done
echo "== 元数据差异 =="
diff /tmp/desktop.meta /tmp/mobile.meta && echo "元数据一致"
步骤 3:检查结构化数据是否对等。 把两套 HTML 里的 application/ld+json 内容抽出来做对比,重点看 Article、FAQPage、Product 的字段是否都还在。移动端少一个 aggregateRating,富媒体结果就可能整体掉。
步骤 4:核对图片资源。 移动端模板若走了 wp_get_attachment_image( $id, 'medium' ),图片 src 会与桌面端不同。Google 图片的索引以移动端为准,低清图会直接拉低图片搜索表现,这部分做法见 图片 SEO 优化。
步骤 5:检查折叠内容。 搜索主题里的 display:none、accordion、read-more、.mobile-hide 类名,确认被隐藏的只有导航、侧栏这类非正文模块,正文必须完整输出在 HTML 里。
步骤 6:核对 hreflang 与内链。 多语言站尤其容易出问题,移动端模板漏输出 hreflang 会导致语言版本互相抢占,细节见 hreflang 多语言配置。
步骤 7:提交重新抓取。 全部修完后在网址检查里点「请求编入索引」,再在 GSC 的「网页抓取」统计里观察 Googlebot Smartphone 的请求量是否上升。
常见踩坑
- 用
wp_is_mobile()做差异化输出。这是移动优先索引下最危险的做法,属于明确的 cloaking 风险。 - 移动端把 FAQ 折叠起来,只留标题。虽然 HTML 里有文字,但 Google 对隐藏内容的处理是按「可见性折扣」来的,FAQPage 富媒体结果常常因此丢失。
- 移动端禁用评论,而
AggregateRating数据来自评论插件,导致结构化数据字段凭空消失。 - 把
meta description只写在桌面模板里,移动端模板漏输出,Google 只能从正文里抓一段,点击率明显下降。 - 案例:某主题在宽度小于 768px 时隐藏了
.entry-content里的第三个 H2 之后的所有内容,靠 JS 点击展开。桌面端文章 2400 字,移动端实际渲染只有 800 字。移动优先索引切换后,该站一批长尾词排名从第二页掉到第五页之后,排查了两周才定位到这段display:none。 - 只看首页不看模板,文章页、分类页、产品页各查一次,问题往往只出现在某一个模板上。
- 认为响应式等于一致,跳过了 diff 验证这一步。
- 改完后忘了请求重新抓取,等了一个月发现排名没回来。
总结
移动优先索引的自查标准只有一句话:Googlebot Smartphone 抓到的页面,必须包含你想被索引的全部正文、链接、图片与结构化数据。执行上先确认抓取代理类型,再用双 UA 抓取做元数据与 JSON-LD 的 diff,然后逐个模板排查折叠与隐藏,最后提交重新抓取并观察抓取量变化。不要依赖 CSS 断点做内容差异,也不要用 wp_is_mobile() 判断设备。移动端漏掉的内容在 Google 那边等于不存在,这一点与 移动端友好性修复 讲的布局问题是两回事,但同样致命。
