搜尋抓取

移動版和桌面版同时在线:蜘蛛到底抓哪一版,連結又该指向谁

站点同时存在移動版和桌面版时,蜘蛛預設带着移動 UA 抓取,它看到的是移動版返回的那份 HTML。本文對比响應式、動態服務、獨立移動 URL 三種方案在抓取上的差异,列出 UA 识別、缓存分层、alternate 标注等常见坑,並說明内鏈與 Sitemap 應当统一指向哪個版本,以及怎么用 UA 對比和日誌自查。

搜尋抓取

移動版和桌面版同时在线:蜘蛛到底抓哪一版,連結又该指向谁

不少站点會同时维護移動版和桌面版,或者用同一個 URL 返回两套 HTML。蜘蛛来的时候只带一個 UA,它看到的是其中一版。搞清楚它預設抓哪一版、站内連結又该指向哪一版,能省掉很多“明明有内容却抓不到”的麻烦。

蜘蛛預設带着移動 UA 来敲门

Google 已经切換到移動優先索引,主要抓取身份是智能手机 UA(Googlebot Smartphone),桌面 UA 的抓取占比在下降。Bing 也推出過類似的移動優先策略。這意味着:如果移動版内容比桌面版少、被 robots 挡住,或者干脆返回错誤,蜘蛛看到的就是這個残缺版本。

所以判断标准不是“桌面用戶看到什么”,而是“移動 UA 請求时服務器返回了什么”。

三種移動化方案,抓取表現不一样

响應式设計:最省事的一種

同一套 URL、同一份 HTML,靠 CSS 适配屏幕。蜘蛛無论带哪個 UA 拿到的都是同一份内容,不存在版本選擇的問题,也最不容易出错。

動態服務:同一個 URL 返回不同 HTML

服務器根據 UA 判断设备類型,返回不同的 HTML。這里的關键是让缓存层知道响應随 UA 變化,否則 CDN 可能把桌面版缓存下来返回给移動蜘蛛,或者反過来。响應头里的 Vary: User-Agent 是常见做法,但很多 CDN 預設不按它区分缓存键,需要額外配置。

另外,两個版本的正文、内鏈和结构化資料應保持一致,只改排版相關的部分。

獨立移動 URL:最容易出岔子

m.example.com 或 /m/ 這類獨立地址,需要成對的标注:移動頁用 link rel="canonical" 指向桌面版(或配合 alternate 指向自身),桌面頁用 link rel="alternate" media="only screen and (max-width: 640px)" 指向移動頁。两個方向只寫一邊、或者互相指错,蜘蛛就容易在两套地址之間反复横跳,把抓取预算花在確認版本上。

几個常见的走错路场景

  • 移動版 robots.txt 禁止抓取 CSS、JS 或某些目錄,導致移動版被判為内容稀疏。
  • 移動版缺少桌面版上的正文、内鏈或分頁入口,蜘蛛顺着移動版爬不到深层頁面。
  • 移動版返回 5xx 或長時間超时,桌面版正常,抓取統計里一半是失敗。
  • UA 识別寫得太粗,把 Googlebot Smartphone 当成普通手机用戶,重定向到精简頁面或 App 下载頁。
  • 站内連結一部分指向桌面版、一部分指向移動版,两套地址都在消耗抓取量。

内鏈和 Sitemap 應该指向哪一版

原則是只暴露一個規范版本。如果采用獨立移動地址,站内連結最好统一指向桌面版(或统一指向移動版),再用 alternate 與 canonical 声明對應關系,而不是让两種連結混在同一個頁面里。Sitemap 里同样只放規范版本,不必把 m 站地址再列一遍。

導航、面包屑、分頁、相關推荐這些承担爬取路径的模块,两個版本要么内容一致,要么至少保證移動版也能走通同一條路径,別让蜘蛛在移動版上走進断头路。

怎么自查

  1. 用移動 UA 和桌面 UA 分別請求同一個 URL,對比返回的 HTML,看正文、内鏈、canonical 是否一致。
  2. 在服務器日誌里按 UA 分组,看移動蜘蛛的抓取量、狀態碼分布,以及失敗集中在哪些目錄。
  3. 检查 CDN 缓存是否按 UA 区分,避免不同节点返回不同版本。
  4. 確認移動版没有在 robots.txt、meta robots 或登入墙後面被挡住。
移動優先不是“再做一個手机站”,而是让蜘蛛在移動身份下,看到和桌面等價的内容與連結。

把這两件事對齐之後,剩下的抓取問题通常就回到常規的内鏈、Sitemap 和服務器响應上了。