為什么移動版成了抓取的“第一現场”
在移動優先的抓取與索引策略下,蜘蛛請求你的 URL 时,多數情况下是按移動端来理解和渲染頁面的。這意味着,桌面版做得再完整,如果移動版少了正文、少了參數、少了連結,蜘蛛讀到的就是那份残缺版本。很多站点“内容明明有,就是抓不到”的問题,源头都在這里。
所以移動端不该被当成桌面版的缩小副本,而應视為主要交付形態。
別让桌面版和移動版對不上
同一個 URL 在不同 UA 下返回不一致的 HTML,是抓取異常的常见起点。做法大致有三類,代價不同:
- 响應式:一套 HTML,靠 CSS 控制布局,内容天然一致,维護成本最低,也最不容易出错。
- 動態服務:同一 URL 按 UA 返回不同 HTML。這種模式下,正文、标题、结构化資料三處必须對齐,改模板时要两邊同时改。
- 獨立移動站:現在已較少见。若仍在使用,m 站與主站的對應關系要通過跳轉或标记交代清楚,否則两套 URL 容易被当成彼此獨立、内容重复的頁面。
渲染资源不能拦在门外
移動端頁面往往依赖 CSS 和 JS 才能把内容展開。如果 robots.txt 屏蔽了 /js/、/css/ 目錄,或者這些资源需要登入、带特定請求头才放行,蜘蛛拿到的很可能是一份没有正文的空壳。
抓取是渲染的前提。渲染资源被拦,等于把内容鎖在门後。
值得顺手检查的几處:核心样式與首屏脚本是否對蜘蛛放行;WAF 或安全策略有没有把非浏览器 UA 直接拦截;频控規則會不會把蜘蛛的並發請求誤判成攻击。
移動端隐藏的内容去了哪里
折叠面板、Tab 切換、“展開更多”,這些交互在移動端非常普遍。判断标准不是“用戶看不看得见”,而是“内容在不在渲染後的 DOM 里”。
- 用 CSS 隐藏、但内容仍在 HTML 中:一般能被讀取到。
- 必须点击或滚動到特定位置,才由 JS 注入:風險較大,蜘蛛不一定触發這一步。
- 桌面端有、移動端直接不輸出:以移動版為主要參考时,這部分内容可能被忽略。
首屏内容與加载顺序
渲染有時間预算,资源越重、阻塞越多,蜘蛛最终能拿到的内容越少。几個可以落地的調整:
- 标题、正文主体、關键導航連結尽量放進初始 HTML,或尽早注入,不要全压到最後一段脚本。
- 减少首屏阻塞的同步脚本,第三方統計、客服、营销插件能异步就异步。
- 图片使用合适尺寸並做懒加载,但不要把首屏主要内容也丢進懒加载。
- 控制 DOM 嵌套深度,過深的层級會增加解析成本。
移動可用性同样在传递信号
viewport 設定、字号、可点击区域間距、整屏彈窗遮挡,這些看起来是体驗問题,但也侧面反映頁面是否認真做了移動端。viewport meta 寫错,頁面會按桌面宽度渲染,抓取时的布局判断也會跟着偏。频繁彈出的全屏广告或登入浮层,還可能把正文压到视口之外。
上线前的自查清單
- 用移動端 UA 請求同一 URL,返回的正文與桌面版是否一致。
- robots.txt 是否放行了 CSS、JS、图片等渲染所需资源。
- 折叠、Tab 中的内容是否存在于渲染後的 DOM 里。
- viewport 是否正确,是否有整屏遮挡且不易關閉的彈窗。
- 移動端頁面的响應時間與稳定性如何,有無 5xx 或超时。
- 移動版是否有需要交代的 canonical 或跳轉關系。
移動優先抓取不是一次性改造,而是一種持續對照:每次模板改版、每次第三方脚本上新,都值得回头看一眼——移動端的蜘蛛到底讀到了什么。