蜘蛛池知识

蜘蛛池入口頁的移動端适配:爬虫用手机 UA 来抓时,你给它看了什么

搜尋爬虫越来越多以移動 UA 抓取頁面。入口頁如果只做了桌面版,或者移動版被砍掉了關键連結,抓取效率會直接打折。本文讲清响應式、獨立 m 域、UA 動態返回三種做法的差別與坑位,並给出几個可以自己動手的检查方法。

蜘蛛池知识

蜘蛛池入口頁的移動端适配:爬虫用手机 UA 来抓时,你给它看了什么

移動優先不是只影响排名

很多人把移動優先理解成“排名层面的事”,其實更靠前的一层是抓取。現在主流搜尋爬虫在抓取和渲染时,預設使用的 UA 大多偏向移動设备,渲染视口也按手机来。也就是说,你的入口頁在爬虫眼里,很可能压根不是你在电脑上看到的那個样子。

對蜘蛛池来说這影响很直接:入口頁的作用是让爬虫顺着連結往下走,如果爬虫拿到的移動版里把連結砍了、把正文換成了图片、或者干脆跳到一個抓不到的地方,那這個入口頁在池子里的價值就打了對折。

爬虫實际看到的是哪個版本

入口頁的移動端實現方式不同,爬虫拿到的 HTML 也不同。常见的三種做法,差別不小。

响應式布局

一套 HTML,靠 CSS 适配不同宽度。這是最省事也最稳的做法:連結、文本、结构在桌面和移動端都是同一份,爬虫抓到的就是完整内容。需要留意的是別用 display:none 把一整块導航或連結列表在窄屏下藏起来——部分渲染引擎會按計算後的样式判断可见性,藏起来的連結可能就不算數了。

獨立 m 域

比如 m.example.com,通過跳轉或 UA 判断把手机訪客導過去。這里最容易出問题的是跳轉本身:如果入口頁做的是 JS 跳轉,或者服務端對移動 UA 返回 302 到 m 域,而 m 域又不可訪問、又被 robots 挡住、或者需要額外的 cookie 才能渲染,爬虫就可能卡在第一步。另外要保證桌面版和移動版之間的互相指向關系明确,別让爬虫發現两個版本内容對不上。

按 UA 動態返回不同 HTML

同一個 URL,判断 UA 後返回不同模板。這種做法灵活,但風險在于“返回的差异太大”。如果移動返回的 HTML 里只剩几條連結甚至空空如也,而桌面版内容丰富,就有伪装嫌疑,抓取端可能直接降低對這個 URL 的信任。真要這么做,至少保證两邊的主体内容、标题层級和連結集合基本一致。

入口頁最容易踩的几個坑

  • 移動版把連結列表砍了。桌面版底部有几十條連結,移動版折進“查看更多”里,而那個按钮是 JS 加载的。爬虫不点按钮,連結就等于不存在。
  • 正文換成图片。移動端為了排版把一段文字做成图,爬虫讀到的是空节点。
  • 首屏全屏遮罩或彈窗。订阅彈窗、App 下载引導盖住内容,渲染时正文被判定為不可见。
  • 字体和视口問题導致排版错乱。不加 viewport meta 时,移動渲染宽度按預設處理,元素可能被挤到布局外。
  • m 域和主域狀態碼不一致。主域 200,m 域 404 或者 503,爬虫拿到的就是一個死入口。

可以自己動手的检查方法

  1. 用移動端 UA 抓一次入口頁(命令行 curl 加上手机 UA 头即可),把返回的 HTML 存下来。
  2. 對比桌面 UA 抓到的 HTML,看連結數量和正文文本量差多少。差得离谱就要改。
  3. 把返回的 HTML 渲染一遍(浏览器手机模式即可),看首屏有没有遮罩、連結能不能点到。
  4. 检查移動版本里目标連結是否還在,锚文本是否和桌面版一致。
  5. 確認 robots 没有誤伤 m 域或移動版路径。
  6. 如果用了跳轉,手動跟一遍完整鏈路,看最後落地的頁面是不是可抓取、可渲染的。

几個使用建议

如果入口頁是你自己可控的模板,優先選响應式,一套 HTML 走到底,省去大量對齐工作。如果因為歷史原因已经有 m 域,至少保證两邊内容一致、連結一致、狀態碼正常,跳轉用服務端 301 而不是 JS 或 meta 兜底。

另外別把移動端当成“简化版”。入口頁的核心任務是让爬虫發現並沿着連結走下去,連結和文本是它的资产,不是可以為了美观删掉的東西。手机上排版可以更紧凑,但结构不要缺胳膊少腿。

判断一個入口頁的移動端做得行不行,有個很土但有效的标准:用手机 UA 抓下来,把标簽去掉只留文字和連結,如果剩下的東西還够看懂這頁在讲什么、還找得到要推的目标連結,那基本就合格了。

移動端适配不是什么高深技術,它更像是入口頁的基本卫生。池子規模一旦上去,每個入口頁都因為移動版少了几條連結,累积起来的抓取损失是實打實的。花半小时统一模板,比事後一個個排查划算得多。