同一個 URL,蜘蛛用桌面 UA 和移動 UA 各来一次,拿到的可能是两份不一样的東西。响應式站点看起来只有一個地址,但只要頁面里存在按屏幕宽度或 UA 判断的渲染逻辑,两條抓取路径就會分叉。运营侧要做的,是確認分叉之後蜘蛛還能不能走到你想让它走的頁面。
两套 UA 對應的抓取行為
主流搜尋引擎都會区分桌面與移動抓取代理,比如 Googlebot 與 Googlebot Smartphone、Bingbot 下的移動标识。UA 字符串本身只是身份說明,真正影响抓取的是配套逻辑:移動代理通常按移動優先的規則取頁面,桌面代理仍會訪問一部分地址。两者請求的 URL 集合並不完全重合,在獨立移動站上尤其明顯。
响應式站点:同一個地址,两套渲染结果
响應式站点服務器返回的 HTML 通常一致,差异發生在渲染阶段。常见情况有几類:
- 移動端用 display:none 隐藏了導航或相關推荐,而 DOM 里其實還有連結,這類連結一般仍可被讀到,但要確認没有被 JS 在渲染後移除。
- 用 JS 按 UA 或视口宽度動態插入模块,移動端不加载某些组件,連結自然不出現,渲染型蜘蛛可能讀不全。
- 移動端單獨精简了正文,只留标题和摘要,正文里的内鏈一起消失。
判断方法很直接:用移動 UA 抓一次頁面,看渲染後的 DOM 里還剩多少 a 标簽,和桌面版對比一下。
獨立移動站:多一跳,就多一個可能断的位置
m. 域名或 /m/ 目錄的结构里,蜘蛛先訪問桌面地址,再通過重定向或 alternate 标注找到移動版本。重定向鏈條越短越好,一跳能到就別做两跳。需要重点確認的地方:
- 移動 UA 訪問桌面 URL 时返回 302 到移動版,移動版再 302 回来,形成循环;
- 移動版没有 canonical 指回桌面版,或者指错;
- 桌面上标注的 alternate 地址本身已经 404,蜘蛛從這里拿不到有效入口。
入口少一跳,抓取路径就少一個失敗点。移動站的問题往往不是内容不行,而是跳轉鏈中間断了一环。
服務器按 UA 差异响應的風險
有些站点在防火墙或 CDN 层對移動 UA 做了額外判断,這會直接影响抓取:
- 對移動 UA 返回 403、429 或驗證碼頁,蜘蛛在日誌里表現為大量異常狀態碼;
- CDN 缓存按 UA 分桶,但缓存键設定不当,移動版頁面被缓存後返回给桌面 UA,反之亦然;
- 移動端专属模板返回空壳 HTML,正文靠 JS 拉取,抓取时只看到空白。
從日誌里對照两條抓取路径
- 按 UA 分组,分別統計一周内的請求量與獨立 URL 數,看两個數字是否差距過大。
- 抽取同一批目錄,對比两種 UA 覆盖到的 URL 數量,看差距集中在哪些栏目。
- 按狀態碼分列,移動 UA 下 4xx、5xx 的比例是否明顯偏高。
- 找出只被移動 UA 訪問、從未被桌面 UA 訪問的 URL,確認它們是否應该存在。
- 找出連結只出現在移動模板里的頁面,检查這些連結在桌面版或 Sitemap 里是否也有入口。
日常检查清單
- 移動版與桌面版的主要導航連結集合是否一致。
- 移動 UA 訪問核心頁面返回 200,且首屏 HTML 里含有正文與内鏈。
- alternate 與 canonical 双向标注正确,重定向不超過一跳。
- CDN 缓存键包含 UA,或 Vary 头設定正确。
- Sitemap 中的 URL 在两種 UA 下都能正常打開。
两套 UA 的抓取路径不需要完全一样,但入口和關键連結不该出現單邊缺失。把日誌按 UA 拆開看一遍,通常就能判断問题出在模板、跳轉還是服務器策略上,再针對性修,比反复提交 URL 更有用。