很多站点在响應式改版之外,仍保留着一套獨立的移動端 URL,比如 m.example.com 或另一個短域名。對用戶来说,這是歷史遗留或业務需要;對搜尋蜘蛛来说,這等于同站点存在两套入口。蜘蛛並不會自動理解哪套是“主站”,它主要看你给出的信号和實际跳轉。
蜘蛛先用移動 UA 敲门
現在多數搜尋引擎以移動端爬虫為主。它請求一個 URL 时,會带上移動设备的 User-Agent。如果你的服務器在入口處做判断,看到移動 UA 就直接 302 到 m 站,那么蜘蛛拿到的第一份响應通常不是頁面内容,而是一次跳轉。跳轉本身不是問题,但每多一次跨主机跳轉,URL 發現和内容確認都會多一步。
更麻烦的是,有些站点只在根路径做 UA 判断,内頁却不做。蜘蛛從 m 站首頁走到内頁时,可能又被带回 PC 站,形成来回切換。
跳轉、canonical 與 alternate 的分工
canonical 是告诉蜘蛛哪套 URL 是主版本;alternate 則說明存在另一個设备版本。两者要成對出現:PC 頁指向 m 頁,m 頁也要回指 PC 頁,同时 m 頁的 canonical 指向 PC 頁。只寫單向,蜘蛛容易在两套 URL 之間反复確認,抓取路径就變得不稳定。
如果两套内容其實完全一样,只是模板不同,更简單的做法是让 m 站直接輸出與 PC 站一致的主内容,並在 m 頁把 canonical 指向 PC URL。這样蜘蛛在 m 站落脚後,很快就能確認主版本,不必把两套 URL 都当成獨立頁面来抓。
互鏈方式决定蜘蛛怎么走
- 双向可点連結:PC 頁里的“移動版”連結和 m 頁里的“电脑版”連結都是普通的 a 标簽,蜘蛛可以双向走通,路径清楚。
- JS 跳轉:只在頁面加载後用脚本跳轉,蜘蛛拿到的初始 HTML 里可能没有目标連結,容易停在原地。
- 只做入口跳轉:首頁跳一次,内頁靠用戶点,蜘蛛在内頁看不到 m 站的入口,可能長期只抓 PC 站。
- 两套站各自内鏈:m 站和 PC 站都有一套完整内鏈,但彼此不连通,蜘蛛要在两個主机之間切換,抓取节奏容易被打断。
几個容易踩的抓取陷阱
第一是循环跳轉。服務器根據 UA 判断,PC 跳 m,m 又因為某些規則跳回 PC,蜘蛛在两者之間轉圈,最终可能放弃。第二是 canonical 指向不一致:列表頁 canonical 到 PC,詳情頁却 canonical 到 m,蜘蛛對主版本的理解會分裂。第三是内容不同步:PC 站更新了,m 站没更新,或者反過来,蜘蛛每次抓到的内容都不一样,就不容易判断哪個是最终版本。
如果两套 URL 的内容、内鏈和更新時間長期不一致,抓取路径就會變成两條互不交叉的线,而不是一條清晰的主线。
让路径變得好走
- 尽量统一到一套 URL。响應式设計或動態服務同一套 URL,通常比维護两套更省事。
- 如果必须保留两套,确保主版本 URL 稳定,所有次要版本都用 canonical 指向它。
- 移動端和 PC 端的互鏈都使用普通 a 标簽,避免只靠脚本跳轉。
- Sitemap 里優先提交主版本 URL,两套都提交时,确保與 canonical 保持一致。
- 两套站的内容更新與内鏈结构尽量同步,至少不要让其中一套長期空白。
最後,回到蜘蛛的视角:它没有“移動優先”或“PC 優先”的偏好,只有你给出的信号。跳轉、canonical、互鏈和 Sitemap 说的是同一件事,蜘蛛才會沿着一條清晰的路径走。若几處信号互相矛盾,它就只能在两套 URL 之間试探,抓取效率自然會下降。