搜尋抓取通常以移動端頁面為准,蜘蛛用移動端 UA 請求、解析並渲染 HTML。這意味着桌面版頁面上那些结构清晰的内鏈,未必都能算作 URL 發現的入口。如果移動版為了节省流量或简化视觉,把導航、分頁、相關推荐砍掉了一部分,對應地址的發現路径也就跟着變窄了。
蜘蛛實际看的是哪一份 HTML
站点實現移動端的方式不同,检查重点也不同:
- 响應式布局:同一份 HTML,連結天然一致,風險主要来自窄屏下的脚本行為。
- 獨立移動域名:桌面站和移動站的連結需要分別维護,容易一邊更新、一邊漏改。
- 同一 URL 動態服務:按 UA 返回不同 HTML,如果模板分支寫得粗糙,移動分支可能少渲染几块内容。
後两種情况下,桌面版看到連結齐全,並不代表抓取时也能看到。
連結缺失的几個常见场景
- 導航被折叠進需要点击才展開的菜單,連結由前端脚本临时生成,脚本没跑完就等于没有連結。
- 移動版精简掉了侧栏、标簽聚合、上下篇跳轉這些模块,地址只能靠 Sitemap 补。
- 用可点击的容器元素代替連結标簽,配合脚本跳轉。這種寫法不會在 HTML 里留下可跟随的地址,只會留下一個死按钮。
- 用脚本在渲染时刪除节点,而不是用样式隐藏。隐藏的連結通常還能被抓到,被刪除的連結就彻底消失。
連結還在,但路径走不通
另一種情况更隐蔽:地址确實存在于頁面,但只藏在交互里。列表的“加载更多”、轮播图的横向切換、按需展開的折叠面板,移動端常把它們做成按钮事件,後續頁面的 URL 不會出現在初始 HTML 中。蜘蛛不會去点按钮,第二頁之後的地址就少了带路的人。
分頁同理。桌面端常见的上一頁、下一頁文字連結,在移動端经常被換成一個图标或一個脚本函數。如果同时没有给分頁地址留出静態入口,翻頁連結的發現效率會明顯下降。
一套可执行的自查顺序
- 用移動端 UA 抓一份原始 HTML,與桌面版對比連結數量、层級深度和栏目覆盖面。
- 對比渲染前後的 DOM,看有多少連結是脚本注入的,這些連結在渲染失敗时會一起消失。
- 逐個检查關键入口:顶部導航、栏目标题、面包屑、列表分頁、正文内鏈、頁脚。
- 核對 Sitemap,把移動版确實無法展示的地址补進去,並確認它們都能正常訪問、返回 200。
- 用服務器日誌對照移動端蜘蛛實际抓到的 URL 與预期清單,找出長期没人訪問的地址。
内鏈為主,Sitemap 兜底
内鏈仍然是 URL 發現的第一入口,它同时传递层級關系和相對權重;Sitemap 更像一份补漏清單,适合安置那些没有合适内鏈位置的地址,比如篩選结果頁、歷史归档頁、深度較深的詳情頁。两者都到位时,移動端少几個模块不會立刻造成大范围漏抓;只依赖 Sitemap 而内鏈残缺,抓取节奏往往會被拖慢。
不要指望移動版省掉的内容會被桌面版补上。抓取以移動版為准,移動版没有的入口,基本就等于不存在。
修复时把握一個原則
移動版可以简化视觉呈現,但尽量不要简化連結结构。導航、分頁、面包屑這類结构性入口,保持可解析的 HTML 形態;需要收起的内容優先用样式隐藏,而不是用脚本從 DOM 中移除。改動之後,隔一段時間再回看日誌,確認新增地址确實開始被訪問。