搜尋抓取

移動版和 PC 版:蜘蛛抓取时看的是哪一個頁面

蜘蛛有桌面和移動两種身份,同一個 URL 可能返回两份不同的 HTML。移動适配做成响應式、動態服務還是獨立 m 站,抓取结果差別很大:移動版删掉的正文和内鏈,蜘蛛同样看不到;缓存配置不当還會让两個版本混着返回。本文梳理三種做法的抓取風險,並给出核對两版内容與連結是否一致的方法。

搜尋抓取

移動版和 PC 版:蜘蛛抓取时看的是哪一個頁面

同一個 URL,蜘蛛可能拿到两份不同的 HTML

現在的蜘蛛並不只有一種身份。搜尋引擎會派出带移動标识的抓取程序,也會派出桌面抓取程序,两者請求同一個地址时,站点很可能返回不同的 HTML。這意味着“蜘蛛抓到了什么”其實取决于它带着哪個 UA 来。

如果你的站点對移動端做過特殊處理,這件事就不只是适配問题,而是抓取問题:蜘蛛拿到的版本里有没有正文、有没有内鏈、有没有正确的 canonical,都會影响它對頁面的判断。

三種常见做法,抓取風險各不相同

响應式:一個 URL、一套 HTML

路径最简單。無论什么 UA 来,返回的都是同一份 HTML,CSS 负责在不同屏幕上表現不同。蜘蛛不需要判断版本,也不存在“哪一版更全”的問题,這是目前麻烦最少的方案。

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

服務端判断 UA,给移動蜘蛛返回移動版 HTML,给桌面蜘蛛返回桌面版。地址只有一個,内容却有两套。風險在于:两套内容差异越大,越容易被当成针對蜘蛛的特殊返回;同时 CDN 或缓存层如果只按 URL 做缓存键,就可能把移動版缓存下来發给桌面蜘蛛,或者反過来。如果确實要走這條路,Vary: User-Agent 要配置正确,缓存键要能区分 UA。

獨立移動域名:两套 URL、两套内鏈

m.example.com 和 www.example.com 各自有地址、各自有内鏈。這时要看两件事:一是两邊的地址關系有没有寫清楚,canonical 指向同一份内容,alternate 标注好對應版本;二是两邊的内鏈是否互相支撑。常见問题是移動版首頁只鏈向移動版頁面,桌面版只鏈桌面版,结果是两套站各自成為對方的孤岛,蜘蛛在其中一套里發現的 URL,在另一套里没有入口。

為了“移動体驗”删掉的正文,蜘蛛也看不到

不少移動版頁面為了加载速度,去掉了段落、表格、结构化資料,只保留标题和一小段摘要。用戶看到的是更轻的頁面,蜘蛛看到的則是一份内容更薄的 HTML。如果搜尋引擎以移動版為准来评估頁面,這些被删掉的内容就不會進入判断。

内鏈也是同样的道理。移動版常常把導航折叠、把相關阅讀砍掉,蜘蛛沿着移動版内鏈走,能到達的 URL 會明顯少于桌面版。做移動适配时,正文和主要内鏈建议保持一致,至少不要出現“桌面版有、移動版全無”的断裂。

移動站用 JS 跳轉,蜘蛛可能停在半路

有些站点用脚本判断屏幕宽度或 UA,然後跳轉到 m 域名。如果脚本执行失敗或被拦截,蜘蛛可能停在原頁面,也可能落在跳轉後的地址上,抓取路径就變得不稳定。相比之下,服務端的 301/302 跳轉對蜘蛛来说更明确,也更容易在日誌里记錄和排查。

怎么確認蜘蛛拿到的是對的那一版

  • 用工具或命令行分別以移動 UA 和桌面 UA 請求同一批代表頁面,對比狀態碼、title、canonical 和正文長度。
  • 检查缓存配置,確認移動版和桌面版不會被混着返回。
  • 翻服務器日誌,看不同 UA 的抓取比例是否和预期一致,有没有整批頁面只被一種 UA 抓過。
  • 抽查移動版的内鏈,看主要栏目和詳情頁是否都能從移動版入口走到。
與其纠结蜘蛛“更喜欢”哪一版,不如让两個版本的内容和連結關系保持一致,把地址之間的對應關系寫清楚。這样無论来的是哪種 UA,它拿到的都是同一份信息。