常见问题

入口页 HTML 多大算超重?搜索蜘蛛解析截断的排查方向

入口页 HTML 体积过大时,搜索蜘蛛可能只解析前面一段内容,靠后的链接长期不被发现。本文说明传输大小与解压后大小的区别、哪些写法最占体积、如何用本地抓取定位链接出现的字节位置,以及精简页面与拆分链接时的取舍。

常见问题

入口页 HTML 多大算超重?搜索蜘蛛解析截断的排查方向

很多人默认:入口页只要返回 200、里面有链接,搜索蜘蛛就会顺着抓。实际解析是有成本的,蜘蛛通常按一定字节数读取 HTML,超出部分可能不再解析其中的链接。这个上限不是公开的固定数字,不同搜索引擎、不同抓取队列下表现也不一样,但“页面越臃肿,靠后的链接越容易被忽略”这个方向相对稳定。

体积的两种算法:传输大小与解压后大小

开启 gzip 或 brotli 后,一个 500KB 的 HTML 传输时可能只有 60KB,但蜘蛛拿到后要解压,真正参与解析的是解压后的文档。所以只看 Content-Length 容易误判,它反映的往往是压缩后的大小。判断入口页是否“超重”,要看解压后正文的字节数。

分块传输(chunked)时没有 Content-Length,只能借助抓取日志里的响应体大小字段,或本地用 curl 加 --compressed 对比压缩前后的差异来估算。

哪些写法最容易把预算吃掉

  • 把 CSS、JS 内联写在 head 里,尤其是打包后的框架代码,动辄上百 KB。
  • 图片、图标以 base64 直接嵌进 HTML,一张图就可能占几十 KB。
  • 整站导航、页脚、友情链接全量输出,每个入口页都重复一遍。
  • 链接列表放在文档末尾,前面先铺一大段无关正文。
  • 注释里塞调试信息或埋点代码。

链接位置往往比链接总数更关键

蜘蛛是从前往后读的。假设解析上限在 500KB 附近,而目标 URL 的链接出现在 520KB 的位置,它基本不会被发现;把同一批链接挪到 50KB 以内,结果可能完全不同。所以链接总量不是唯一变量,链接出现在文档中的位置同样重要。比较稳妥的做法是把核心链接放在靠前的区块,装饰性内容和长文本往后放。

一个简单的自测方法

  1. 用 curl --compressed 抓取入口页,保存为本地文件。
  2. 查看文件字节数,再定位第一条目标 URL 链接出现的字节偏移。
  3. 如果链接普遍落在 200KB 之后,就该考虑精简页面结构了。
  4. 对比抓取日志中蜘蛛读取的响应体大小,看是否明显小于本地文件。

超出上限不一定等于彻底不抓

截断更常见的表现是:前面的链接照抓,后面的链接长期没有动静。日志上看起来“蜘蛛来过、也抓了入口页”,但目标 URL 一直没有新的发现记录。这种时候先别急着换 IP 或加池子,先确认是不是入口页本身太长。

如果入口页的内容确实需要很长,可以把链接拆到多个分页或子入口页,每个页面只承载一部分链接,通常比全部堆在一个超长页面上更容易被完整解析。

精简时的几个注意点

  • 不要为了减体积把正文删空,页面缺少实质内容同样会影响后续处理。
  • 外链 CSS、JS 能明显降低 HTML 体积,但别让它阻塞渲染到蜘蛛看不到链接。
  • 压缩传输是好事,不要为了“看起来大”而关掉 gzip。
  • sitemap 与主动提交可以作为补充通道,但不宜当作页面内链接发现的替代品。

最后提醒:各搜索引擎都没有公开解析上限的具体数值,本文给出的判断方式是基于日志现象的排查思路,不能保证调整后一定带来抓取量变化。先测、再改、再看日志,把改动和结果对应起来,比盲目堆链接更有效。