站点改移動端的时候,多數人只關心用戶看到什么,容易忽略一件事:蜘蛛拿到的 HTML 可能是另一個版本。移動優先索引之下,抓取與评估主要以智能手机 UA 為主,桌面版更像补充。两個版本的内容、連結一旦不一致,URL 發現、内鏈權重和索引判断都會跟着跑偏。
蜘蛛用哪個 UA 抓,就决定了它看到什么
搜尋引擎的抓取以移動 UA 為主,這一点在服務器日誌里能直接看到。如果服務器按 UA 返回不同 HTML,也就是常说的動態服務,就必须保證两種版本在核心内容上一致:标题、H1、正文主体、主要内鏈、图片的 alt 属性。
常见的事故有這么几類:
- 移動版為了省流量只輸出正文摘要,後半段内容根本没進 HTML
- 桌面版導航在移動版被折叠進 JS,蜘蛛第一轮抓不到深层連結
- 移動版列表頁只渲染首屏几條,翻頁入口丢失
- 两個版本各自的 canonical 都指向自己,互不承認
這些問题不會让頁面立刻掉出索引,但會让蜘蛛對同一份内容做出两套判断,原本一條抓取路径被拆成两條。
三種部署方式,抓取表現並不一样
响應式:同一套 HTML 加 CSS
最省心的做法。URL 唯一,HTML 唯一,蜘蛛不需要在不同版本之間做選擇。要做的主要是控制移動端首屏体积,別把正文推到很後面。
動態服務:同一 URL 按 UA 返回不同 HTML
風險最高的一種。要点有两個:一是响應头里要有 Vary: User-Agent,二是 CDN 的缓存键要包含 UA。缓存键不含 UA 时,移動版 HTML 被缓存後可能發给桌面蜘蛛,或者反過来,两邊拿到的都是错的版本。這種問题在日誌里不容易看出来,需要用不同 UA 各請求一次,對比响應体。
獨立移動站:m. 子域或單獨域名
两版之間要做對應的双向标注,同时確認移動版自身可被抓取:robots.txt 没拦、服務器可達、没被 noindex。移動版的連結结构要能回到桌面版,否則蜘蛛容易停在 m 站里,走不回主站的其他入口。
判断版本是否一致,最快的办法不是讀文档,而是用移動 UA 把响應体抓下来,和桌面版逐項對比。
抓取路径可能被拆成两條
如果两版的連結结构不同,蜘蛛實际會走两條不同的路。日誌里的表現是:同一批内容被两套 URL 或两套目錄反复抓到,重复發現和重复抓取同时增加,能用在別處的抓取预算被摊薄。
- 移動版少了深层入口,深层頁面的發現時間明顯變長
- 移動版把連結放在 JS 里,第一轮抓取讀不到
- 桌面版有某個聚合頁,移動版没有,反向也存在同样情况
還有一種隐蔽情况:桌面 URL 跳到移動 URL,移動 URL 又跳回桌面 URL,形成循环。蜘蛛遇到循环跳轉通常會放弃這條鏈,结果是這個入口彻底失效。
自查清單
- 用移動 UA 請求几個代表性 URL,儲存完整 HTML
- 逐項對比 title、H1、正文長度、主要内鏈數量
- 確認 canonical 在两版中指向同一個首選 URL
- 检查 Vary 头與 CDN 缓存键是否包含 UA
- 看日誌里移動 UA 與桌面 UA 的抓取比例是否合理,有没有異常的重定向鏈
- 獨立移動站確認未被 robots.txt 或 meta 标簽屏蔽
- Sitemap 里只列 canonical 的那個版本,與頁面标注保持一致
服務器层面的两個细节
一是首字节時間。移動 UA 的請求如果多走了一层轉碼或重定向,TTFB 會明顯變長,蜘蛛放弃的概率上升。二是跳轉類型,桌面到移動的對應關系應当是永久的、可逆的,別用临时跳轉或 JS 跳轉来替代。
内容一致比版本數量更重要
不必强求全站只有一種部署方式,但同一份内容對蜘蛛只應该呈現一個完整版本。内容、内鏈、canonical 三者對齐之後,抓取路径才會收敛成一條,URL 發現和重訪节奏也才稳定。改完移動版之後,隔一两周回到日誌里看一眼移動 UA 的抓取占比和抓取到的 URL 形態,比在後台猜要可靠得多。