搜尋抓取

移動優先與蜘蛛抓取:两套頁面對齐时要注意什么

移動優先环境下,蜘蛛更常以移動端 UA 抓取頁面。响應式、動態服務和獨立 m 站三種做法各有错位点,内容、内鏈、狀態碼、渲染资源都可能與桌面版不一致。本文梳理常见差异,並给出一套可执行的移動端抓取對齐检查清單。

搜尋抓取

移動優先與蜘蛛抓取:两套頁面對齐时要注意什么

移動優先索引已经執行多年,但對不少站点来说,“移動頁”和“桌面頁”仍然是两套東西。蜘蛛抓取时更倾向使用移動端 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,图片索引可能拿不到。

一套對齐检查清單

  1. 用移動端 UA 抓取几個典型頁面的原始 HTML,與桌面版逐項對比 title、H1、正文段落數、内鏈數量。
  2. 確認 robots.txt 没有针對移動 UA 的額外規則,也没有屏蔽渲染所需的 JS、CSS。
  3. 检查 WAF、CDN、防火墙規則是否對移動 UA 或爬虫 UA 有特殊拦截,避免返回驗證頁或 403。
  4. 检查是否存在按 UA 分流的狀態碼差异,比如移動端返回 302、桌面端返回 200。
  5. 抽查缓存层返回的 HTML,確認不會出現版本串号。
移動優先不是让桌面版随便做,而是意味着蜘蛛對頁面的判断更依赖移動版本。两版一致时這套机制几乎無感;一旦错位,問题往往出現在抓取阶段而不是展示阶段,排查顺序也應该從抓到的 HTML 開始。

最後提醒一点:不必追求两版像素級相同,重点是主体内容、可抓取連結和 HTTP 狀態保持一致。每次改版或調整導航结构後,用移動 UA 复抓一遍關键頁面,比等到日誌里出現異常再回头查要省事得多。