不少站点會同时维護移動版和桌面版,或者用同一個 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 站地址再列一遍。
導航、面包屑、分頁、相關推荐這些承担爬取路径的模块,两個版本要么内容一致,要么至少保證移動版也能走通同一條路径,別让蜘蛛在移動版上走進断头路。
怎么自查
- 用移動 UA 和桌面 UA 分別請求同一個 URL,對比返回的 HTML,看正文、内鏈、canonical 是否一致。
- 在服務器日誌里按 UA 分组,看移動蜘蛛的抓取量、狀態碼分布,以及失敗集中在哪些目錄。
- 检查 CDN 缓存是否按 UA 区分,避免不同节点返回不同版本。
- 確認移動版没有在 robots.txt、meta robots 或登入墙後面被挡住。
移動優先不是“再做一個手机站”,而是让蜘蛛在移動身份下,看到和桌面等價的内容與連結。
把這两件事對齐之後,剩下的抓取問题通常就回到常規的内鏈、Sitemap 和服務器响應上了。