跳到主要内容

字体放 Google Fonts 还是自托管,国内首屏差了一秒多

同一页面在北京上海广州各测 50 次:Google Fonts 字体请求 P75 1.2 秒、6 次超时 3 秒,自托管 P75 180 毫秒。自托管要做的三件事,以及一个把字体放在源站的坑。

技术SEO 元析智能

去年 11 月我们做过一次对比:同一个页面,字体分别放 Google Fonts 和放国内 CDN 自托管,从北京、上海、广州三地各测 50 次。Google Fonts 的字体请求 P75 是 1.2 秒,有 6 次超时超过 3 秒;自托管的 P75 是 180 毫秒,没有超时。

这个差距比图片优化大得多。字体是阻塞渲染的资源,它慢一秒,首屏就晚一秒。

为什么会差这么多

两个原因。一是 Google Fonts 的域名和节点在境外,国内访问要过国际出口,高峰期不稳定。二是它的 CSS 和字体文件来自不同域名,多两次 DNS 和 TLS。

自托管把字体和页面放在同一个域名或者同一个 CDN,省掉域名解析和连接建立,路径短,稳定性也好。

我的建议很直接

面向国内用户的软件站,字体必须自托管,没有例外。做跨境的站,英文站可以用 Google Fonts,但如果国内访问占比超过两成,也建议自托管,用同一份文件走全球 CDN。

自托管要做三件事:字体子集化、font-display 设置、正确的 CORS 头。第三点常被忽略,字体文件跨域加载需要 Access-Control-Allow-Origin,配错了浏览器直接拒绝使用,控制台一堆 CORS 报错。

一个踩过的坑

有个客户把字体放在自己的静态资源域名上,那个域名没接 CDN,走的是源站单线机房。字体文件 300KB,南方用户下载要 2 秒。挪到主站 CDN 之后降到 200 毫秒。

这说明自托管不等于快,得确认字体文件走的是 CDN 而不是源站。查法很简单:网络面板里看字体请求的响应头有没有 CDN 标识,或者直接看 age 和 server 字段。

第三方字体服务值不值

国内有几家做网页字体分片的服务,用它们的 CDN,按流量计费。适合不想自己管子集的团队,代价是每年几千到几万的费用,以及多一个依赖。

我们的判断:日访问量十万以下,自托管更划算;超过这个量级,第三方服务的分片和缓存策略往往比自建做得好。

一条底线

不管选哪种,字体文件不要超过 300KB,首屏只加载真正用到的那个。这两条做不到,换什么方案都救不了首屏。

一个简单的验收方法

改完之后,让北京、上海、广州各一个真实用户打开页面,看网络面板里字体请求的耗时和状态码。三个地方都稳定在 300 毫秒以内算过关。

再检查一遍缓存头:字体文件名带 hash、缓存一年、不要设 Vary: User-Agent。有些 CDN 默认带这个头,会把缓存命中率打下来,字体每次都回源,等于没自托管。

标签:自托管字体国内访问字体加载
元

元析智能

为软件公司做 SEO 和 GEO 优化

Start with a diagnosis

聊聊你的软件产品

不管你现在是 SaaS、开发者工具还是工程设计软件,只要你想让目标客户搜得到你,我们可以聊。第一次沟通不收费,会给你一份当前的 SEO 诊断,你能看出问题在哪。