蜘蛛抓一个页面,并不是把整份 HTML 从头读到尾的无限过程。抓取器通常会在读取到一定字节量后停下,把已经拿到的部分交给后续流程。这意味着:如果关键内容和内链排在截断点之后,它们对蜘蛛来说可能并不存在。
抓取器为什么会有读取上限
抓取本身是资源消耗行为:带宽、解析、存储、后续判断都要花钱。为了防止一个超大页面拖慢整条流水线,抓取器会设置单页读取上限。这个上限各家引擎不同,公开文档里也很少给出精确数值,所以更实用的做法不是去卡某个具体字节数,而是确认自己的页面有没有明显偏大、有没有把结构性内容堆到很后面。
哪些写法最容易把 HTML 撑大
- 图片直接以 base64 内联在 HTML 或 CSS 里,一张图就能带来几百 KB 的文本。
- 把整份接口数据塞进 script 标签,尤其是列表页的完整数据对象。
- 整站组件库内联输出,每页都重复一份样式和脚本片段。
- 下拉菜单、弹窗、折叠面板里的隐藏内容全量输出,用户看不到,字节数却实实在在存在。
- 大量模板注释、调试信息和未清理的空标签。
这些内容未必影响用户浏览,但会让蜘蛛在读到正文和内链之前,先把读取额度消耗掉一部分。
页面被截断之后会怎样
最常见的情况是:状态码仍是 200,页面没有报错,蜘蛛也没有任何提示。但排在后面的链接没被发现,后半段内容没参与判断。表现上就是——页面看起来能抓,内链却像没有一样,新发布的深层内容迟迟不见来访,而首页和频道页的抓取记录一直很正常。
怎么判断页面是否偏大
- 看未压缩的 HTML 源码体积,而不是浏览器渲染后的视觉效果。
- 对比压缩前后的大小,差距过大说明重复文本或内联资源偏多。
- 查服务器日志里的响应字节数,看看蜘蛛拿到的和你本地看到的是不是一致。
- 把 HTML 存成文件,搜索第一条正文内链出现在源码的哪个位置附近。
瘦身与结构调整的做法
- 图片、字体、图标改为外链资源,让 HTML 只保留引用地址。
- 列表页控制单页条数,把翻页交给分页 URL,而不是一次输出全部条目。
- 非首屏模块按需加载,但正文和主要内链必须直接输出,不要依赖脚本再插入。
- 把数据从脚本中剥离,或只保留渲染所必需的最小字段。
- 清理模板注释、调试残留和无意义的嵌套容器。
- 把次要内容拆到独立 URL,让每个页面承担相对单一的职责。
注意这里的顺序:先保证正文和导航内链出现在前半部分,再考虑压缩体积。只做压缩而不动结构,内链位置偏后的问题依然存在。
体积和抓取预算的关系
抓取预算不是抽象概念,它由请求数和字节数共同构成。一个页面平均几百 KB 的站,和一个平均几十 KB 的站,在同样的抓取容量下能覆盖的 URL 数量差距明显。列表页、频道页这类被抓最频繁的模板,体积收益往往最直接。
一个可执行的观察顺序
- 先看入口页(首页、频道页)的 HTML 体积和内链位置。
- 再看被频繁抓取的列表模板,确认单页输出条数是否过多。
- 最后抽查详情页,确认正文和主导航是否落在前半部分。
- 改动后隔一段时间对比蜘蛛来访的 URL 分布,而不只是看总请求数有没有涨。
页面变小不一定让蜘蛛抓得更多,但页面过大几乎总会让蜘蛛抓得更少。