移動優先索引已经執行多年,但對不少站点来说,“移動頁”和“桌面頁”仍然是两套東西。蜘蛛抓取时更倾向使用移動端 UA 訪問,也就是说它拿到的 HTML 很可能不是你在地脑浏览器里看到的那一份。如果两份頁面在正文、内鏈、狀態碼上出現错位,後續判断基本就按那台“手机”看到的结果来。
三種實現方式,各自的错位点
响應式:一份 HTML 走天下
结构最省心,桌面和移動看到的是同一個 URL、同一份源碼。要注意“视觉上隐藏”不等于“抓取不到”:用 CSS 隐藏的文本仍然留在 HTML 里,蜘蛛能看到;但如果菜單或内容要靠点击後才由 JS 注入,抓取时就未必存在。移動端把大段内容折叠起来通常不影响抓取,前提是折叠逻辑不是纯前端异步拉取。
動態服務:同一 URL 返回不同 HTML
服務器根據 UA 返回不同版本,URL 保持不變。這種模式要盯住缓存层:如果 CDN 或反向代理只按 URL 做缓存键,很可能把桌面版返回给移動 UA,或者反過来。配置 Vary: User-Agent 之類的响應头,並抽查缓存命中後的實际 HTML,是比較稳妥的做法。搜尋引擎一般能接受這種做法,前提是两版内容實质一致。
獨立 m 站:两套 URL
m.example.com 這類结构最容易出現分叉。常见問题包括:两個版本互相 canonical 指向混乱、移動頁整体被 robots.txt 屏蔽、移動頁缺少指向桌面頁的内鏈。比較清晰的做法是每個頁面 canonical 指向自身,同时保證移動版本本身能被正常抓取和渲染,而不是“先屏蔽掉,再指望主站被理解”。
移動端容易漏掉的内容與連結
- 汉堡菜單里的導航連結:如果是点击後才由 JS 注入 DOM,抓取时可能拿不到,主導航最好保留在初始 HTML 中。
- Tab 與轮播:只渲染第一屏,後面的内容對蜘蛛不可见。
- “加载更多”按钮:用 button 加异步請求代替 a 标簽时,後續列表頁就断在抓取路径上了,建议保留可点击的分頁 URL。
- APP 下载浮层與强制跳轉:有些移動頁會直接 302 到應用商店,蜘蛛跟過去只能看到一個無關頁面,主题内容就此丢失。
- 懒加载图片:不影响連結發現,但图片地址如果只在滚動後才寫入 src,图片索引可能拿不到。
一套對齐检查清單
- 用移動端 UA 抓取几個典型頁面的原始 HTML,與桌面版逐項對比 title、H1、正文段落數、内鏈數量。
- 確認 robots.txt 没有针對移動 UA 的額外規則,也没有屏蔽渲染所需的 JS、CSS。
- 检查 WAF、CDN、防火墙規則是否對移動 UA 或爬虫 UA 有特殊拦截,避免返回驗證頁或 403。
- 检查是否存在按 UA 分流的狀態碼差异,比如移動端返回 302、桌面端返回 200。
- 抽查缓存层返回的 HTML,確認不會出現版本串号。
移動優先不是让桌面版随便做,而是意味着蜘蛛對頁面的判断更依赖移動版本。两版一致时這套机制几乎無感;一旦错位,問题往往出現在抓取阶段而不是展示阶段,排查顺序也應该從抓到的 HTML 開始。
最後提醒一点:不必追求两版像素級相同,重点是主体内容、可抓取連結和 HTTP 狀態保持一致。每次改版或調整導航结构後,用移動 UA 复抓一遍關键頁面,比等到日誌里出現異常再回头查要省事得多。