为什么同一地址会出现两套页面
移动优先索引普及之后,抓取程序主要以移动端 UA 来读取和评估页面。如果你的站点在手机和电脑上返回的 HTML 差别很大,那么真正被用来判断页面价值的那一版,往往是内容更少、内链更少、甚至正文残缺的那一版。这不是危言耸听,不少“桌面端看着挺完整”的页面,在移动 UA 下确实只剩一个标题加几张图。
问题通常不在于“做了移动适配”,而在于适配方式留下的缝隙。
三种常见做法与各自的坑
独立移动域或 m 子域
把移动流量导向 m 开头的子域是最老的做法,至今仍有站点在用。方案本身可行,但依赖几个前提:
- 桌面页与移动页要互相标注对应关系,让抓取程序知道两者是同一内容的不同版本。
- 移动页上的 canonical 要么指向自身,要么指向桌面页,两边不能互相矛盾。
- 桌面 UA 访问时的跳转要稳定,不要因为判断条件写得含糊,让蜘蛛在两边来回弹。
实践中常见的失误是:只给用户做了跳转,没有补对应标注,结果两套地址各自积累信号,谁也没能集中起来。
响应式布局里隐藏内容
用 CSS 把一部分内容在窄屏下藏起来,是很多响应式站点的默认操作。问题在于,被隐藏的如果正好是正文主体、面包屑或主要内链,移动 UA 拿到的就是一份骨架。搜索引擎对刻意隐藏的内容有自己的判断逻辑,大量正文级内容被藏,容易让页面被当作内容稀薄处理。
折中做法是:交互性、辅助性内容可以按屏幕收折;正文、标题、关键内链、结构化信息尽量保持可见,或者改用 DOM 中存在、只是视觉上可展开的方式呈现。
按 UA 返回不同 HTML
动态服务(同一 URL,根据请求头返回不同 HTML)技术上完全可行,但需要明确告诉缓存层:这个地址的响应会随 UA 而变。否则中间缓存很可能把移动版发给桌面用户,或者反过来。
这类方案还要注意别让两个版本的内容量差太多。移动版砍掉一半正文、去掉全部相关阅读,等于主动把可评估的信息减半。
自查清单
不需要复杂工具,拿几组 UA 分别请求同一批地址,对比返回内容即可。重点看这几项:
- 正文是否完整。移动 UA 下正文段落数、字数、关键小节标题是否与桌面版基本一致。
- 内链是否保留。导航、面包屑、正文内链、相关阅读是否在移动版里同样存在。
- canonical 与对应标注是否自洽。移动域与桌面域之间是否互相指向,有没有指向无关地址或空值。
- 跳转是否稳定。同一 UA 多次请求,跳转目标是否始终一致,有没有出现循环。
- 状态码是否一致。同一地址在两种 UA 下是否都返回 200,而不是一边 200 一边 302 到首页。
- 结构化数据是否一致。移动版是否漏掉了标题、时间、作者等字段。
- 缓存头是否合理。动态分流时是否带了区分 UA 的信号,避免不同版本互相串味。
- 移动端浮层。是否有一个遮挡大半屏、关闭按钮极小的弹窗,压住正文可见性。
发现不一致之后怎么处理
优先级从高到低:先保证正文和内链在移动版完整可见,这一项影响最大也最容易改;其次理顺 canonical 与对应标注,让两个版本表达同一个意思;最后再处理缓存、跳转稳定性这类偏工程的问题。
改完不必急着反复验证,给抓取和缓存留一点更新时间,再回到日志里看移动 UA 的抓取结果是否符合预期。
一句话原则:同一份内容,不管访问者用什么设备,都应该能读到大致相同的信息。差异可以体现在交互和排版上,不要体现在“能读到什么”上。