常见问题

入口页 HTML 体积太大时,搜索蜘蛛可能读不到后半部分的链接

入口页返回正常、日志里也能看到抓取,但目标 URL 迟迟没有抓取记录,原因可能出在 HTML 体积上。本文说明搜索蜘蛛解析页面存在上限,列出最容易把入口页撑大的几类内容,并给出判断是否踩到体积问题的方法和几个实操控制点。

常见问题

入口页 HTML 体积太大时,搜索蜘蛛可能读不到后半部分的链接

入口页上明明写了目标链接,日志里也看到搜索蜘蛛来抓过入口页,可目标 URL 的抓取记录迟迟不出现。这种情况除了检查 robots、nofollow、JS 渲染之外,还有一个容易被忽略的原因:入口页的 HTML 体积太大,搜索蜘蛛读到一半就不再往后解析了。

页面解析确实存在上限,只是各家没公布确切数字

搜索蜘蛛抓取页面时,要先下载响应体,再交给解析器抽取链接。下载有大小限制,解析也有时间和内存开销。各搜索引擎对这个上限的设定并不相同,也没有对外公开一个可以直接照搬的准确字节数,而且会随渲染方式、响应速度、站点整体情况变化。可以确定的只有一件事:超过一定体积之后,后半部分的链接被解析到的概率会明显下降,越靠后的内容越吃亏。

涨体积的通常不是正文,而是这几类东西

  • 把整套 CSS 和 JS 内联在 head 里,尤其是未压缩的框架代码;
  • 用 base64 直接嵌入的图片、字体和图标;
  • 每个入口页都复制同一套页头页脚、导航和友链模块;
  • 大量 data-* 属性、未清理的调试注释、模板残留的隐藏节点;
  • 为了堆链接,把目标 URL 一条条拼成超长列表,甚至连 query 参数一起堆进去。

怎么判断自己是不是踩到了体积问题

  1. 用 curl 拉一次入口页,看响应头里的 Content-Length。这只是压缩后的传输大小,不等于解析器看到的解压后大小,注意区分;
  2. 把 gzip 解压后的 HTML 存下来看文件大小,这才是解析器实际要处理的量;
  3. 检查日志:如果入口页抓取正常、返回 200,但同一批目标 URL 长期没有任何抓取记录,可以怀疑链接没有被解析到;
  4. 做一次对比测试:把同一批链接从页面底部挪到靠前的位置,或者拆成两个入口页,观察一段时间再看日志差异。

实操上的几个控制点

  • CSS 和 JS 尽量走外链,让浏览器和蜘蛛都能缓存;
  • 图片、字体用独立文件,不要用 base64 塞进 HTML;
  • 链接区块放在页面靠前的位置,别埋在十几屏模板块之后;
  • 入口页只承担“被发现有链接”这一件事,内容尽量精简,不需要完整的站点框架;
  • 链接多的时候优先拆成多个入口页,而不是堆成一个超长页面。

这里没有给一个硬性数字,因为不同入口页的结构差别很大。实用的做法是给自己定一个内部标准,比如解压后控制在几十到一百多 KB 的区间,然后长期用日志验证:链接是否真的被跟到了。

别把体积当成唯一解释

链接没被跟,还可能是因为用了 rel="nofollow"、链接由 JS 在交互后插入、跳转链太长、入口页本身返回了非 200 状态,或者目标 URL 在 robots.txt 里被挡住。

体积只是其中一个变量。把入口页做小、把链接提前,是成本最低的一步,但不要指望它单独解决所有抓取问题。