同一個 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,它拿到的都是同一份信息。