很多站点把注意力放在 URL 是否被提交、Sitemap 是否完整,却忽略了一個基础問题:蜘蛛拿到 URL 之後,需要下载並解析 HTML。頁面体积、DOM 结构和资源组织方式,都會影响這一步的實际成本。成本高不一定抓不到,但會让抓取节奏變慢、單次抓取覆盖的 URL 變少。
抓取不只是請求,還包括下载與解析
蜘蛛的一次抓取通常包含几個動作:建立连接、下载响應、解析 HTML、抽取連結、把新 URL 放入队列。下载和解析是消耗资源的两端,前者受服務器與網絡影响,後者主要受頁面本身影响。頁面越复杂,單位時間内能處理的 URL 就越少。
影响解析成本的主要因素
HTML 体积與标簽數量
同样一段正文,用简洁结构寫和用多层嵌套寫,解析開销差別明顯。大量重复的類名、空标簽、深层包裹,會让解析树變大。建议把首屏和正文的 HTML 控制在一個合理范围,避免把整站公共模块全部内联到每個頁面。
内联脚本與样式
把大段脚本和样式内联進 HTML,會直接推高頁面字节數,也會让解析器需要處理更多非内容节点。外部文件可以被缓存复用,多個頁面共享同一份资源,整体成本更低。需要注意,這里讨论的是對抓取解析的影响,不代表内联一定不好,關键看体积和复用程度。
DOM 深度與节点數量
過深的 DOM 结构會增加解析和渲染负担,也可能让連結在文档中的位置變得分散。结构清晰、层級克制的頁面,連結更容易被稳定抽取。
懒加载與首屏可發現連結
懒加载對图片友好,但如果把關键導航、分頁入口、正文内鏈也交给脚本在滚動後插入,蜘蛛在初次解析时可能看不到這些 URL。更稳妥的做法是:首屏 HTML 就包含主要内鏈和分頁入口,图片和次要模块再懒加载。這样 URL 發現的路径不會断在渲染阶段。
传輸环节:压缩與缓存
- 開啟 gzip 或 brotli 压缩,可以直接减少 HTML 传輸体积;
- 對静態资源設定合理的缓存头,减少重复下载;
- CDN 命中率高时,蜘蛛拿到的响應更快,抓取节奏更稳;
- 避免同一頁面因參數不同而产生大量無法缓存的變体。
哪些頁面更容易出現体积問题
- 列表頁和聚合頁:一次輸出大量條目,重复结构多;
- 詳情頁:正文之外還内联了整套推荐模块和脚本;
- 活動頁:為了视觉效果堆叠大量内联样式;
- 模板拼接不干净的頁面:注释、空 div、重复属性較多。
核對與優化顺序
- 抽取几個典型頁面,看 HTML 原始大小和标簽數量,找出異常大的頁面;
- 對比日誌中這些頁面的抓取频次,观察是否明顯低于同類頁面;
- 检查首屏 HTML 是否已包含主要連結,確認不依赖滚動或点击;
- 把可复用的脚本、样式改為外部引用,並確認压缩已開啟;
- 精简深层嵌套和重复模块,再观察一段時間内的抓取變化。
頁面變轻不等于一定會被多抓,但它减少了解析和传輸上的阻力。抓取覆盖的變化通常需要结合日誌、响應時間和内鏈調整一起看,單看某一項容易誤判。
把頁面体积当作抓取路径的一部分来管理,比反复提交 URL 更接近問题本身。结构清晰、响應稳定、入口明确,蜘蛛才有條件把有限的抓取资源用在更多有内容的 URL 上。