多數品牌部門聽到「網頁字型拖慢速度」,直覺反應是兩者只能二選一。不是死守品牌字型維持識別,就是整套換成系統字型換取速度。這個二分法本身就問錯了問題。真正該問的不是「要不要用品牌指定字型」,而是「這段文字值不值得為了識別度多付一段下載等待」。首頁大標題、Logo 式的文字值得,商品說明、長篇內文通常不值得,因為讀者在那些地方本來就不是靠字體記住品牌。
這個判斷之所以重要,是因為網頁字型(web font)跟系統字型(system font)在技術上完全是兩回事。系統字型是使用者裝置早就裝好的介面字型,瀏覽器不必多跑一趟網路請求就能顯示;網頁字型不管是掛在 Google Fonts,還是放在自己網站的伺服器上,都是一個要額外下載的檔案,而且這個下載排在瀏覽器渲染流程偏後段才會觸發,等待因此被拉得更長。這段等待背後藏著具體的秒數與 KB 數,也牽動 Cumulative Layout Shift(CLS,版面穩定度指標)這個 Google 排名會看的指標,不是憑感覺,是有實測數字撐著。
搞懂這幾個機制之後,品牌字型跟網站速度就不再是互斥的兩難,而是一張可以照規則畫的分界線,連版面跳動這種副作用都有技術解法可以壓低。

首屏用品牌字型,內文交給系統字型比較划算
品牌字型跟網站速度,一直被講成全有全無的兩難。用了品牌字型就要接受變慢,想要快就得整套犧牲識別度,這個對立本身站不住腳。真正該拆開判斷的,是這段文字需不需要靠字型建立識別,首屏的大標題、Logo 式的短句,承擔的是讓人一眼認出這是誰家的任務,值得保留品牌字型;往下滑的商品說明、教學段落、長篇內文,承擔的是把資訊講清楚的任務,交給系統字型或 system-ui 反而更划算。這些地方本來就不是讀者記住品牌的地方,他們在讀內容,不是在端詳字體的襯線粗細。
這不是各打五十大板的折衷說法,而是跟官方指南同一個方向。web.dev 在字型效能指南裡明講,品牌宣傳與視覺上獨特的網頁元素可以用 font-display: swap,內文使用的字型則建議用 font-display: optional,同一份指南把這兩種做法並列成可以合併使用的分層策略,不是二選一。換句話說,首屏留品牌字型、內文換系統字型,不是內容行銷圈自己想出來的權宜之計,是字型效能優化的官方建議本來就這樣分層設計。
網頁字型比系統字型多一段下載等待
要理解這段等待從哪裡來,得先分清楚系統字型跟網頁字型的根本差異。系統字型是作業系統或瀏覽器內建的介面字型,使用者裝置早就裝好,瀏覽器顯示文字時直接調用,不必發出任何網路請求。網頁字型不管是掛在 Google Fonts 的網址,還是放在自己網站的伺服器上,都是一個要額外下載的檔案。很多人以為只要頁面裡寫了 @font-face 宣告,瀏覽器就會馬上把字型抓回來,這其實是常見的誤解,@font-face 宣告本身不會觸發下載,瀏覽器要等到頁面上真的有元素套用到那個字型樣式,才會發出下載請求。這代表字型的下載請求天生就排在關鍵請求鏈的後段,先算出誰要用這個字型,才輪得到字型檔案的網路請求。

這段等待有多長,得看檔案有多重。HTTP Archive《2025 Web Almanac》的字型章統計,字型檔案大小的中位數(第 50 百分位)落在約 35 到 39 KB(gzip 壓縮後,桌面版略低、行動版略高);第 75 百分位膨脹到 70 多 KB;到第 90 百分位已經來到約 115 到 116 KB。最重的那 1%(第 99 百分位)長年落在數百 KB 等級,前一年(2024)桌面版約 776 KB、行動版約 572 KB,2025 年的統計顯示這個量級依然沒有明顯縮小,這種量級多半是 CJK(中日韓)大字集或沒做子集化的檔案,一個中文字型隨便就要涵蓋上萬個字元,自然比通常只需要一百到一千個字形的拉丁字型重得多。
檔案還沒抓到之前,瀏覽器怎麼處理文字該顯示了、字型卻還沒到這件事,各家瀏覽器的預設做法也不一樣。以 Chromium 為核心的瀏覽器(Chrome、Edge)跟 Firefox,預設會封鎖文字轉譯最多 3 秒,這 3 秒內畫面上那段文字會是空白,3 秒一到不管字型有沒有下載完,瀏覽器都會先用備用字型頂上。Safari 則更保守,預設會無限期封鎖文字算繪,字型不到,文字就一直不顯示。這代表同一個網站在不同瀏覽器上,使用者實際等待文字出現的時間可能差到好幾秒,而這一切都建立在網頁字型比系統字型多一段下載等待這個前提上。
這段等待值不值得,已經是絕大多數網站要面對的問題,不是少數品牌案子才有的取捨。HTTP Archive 同一份報告指出,2025 年約 88% 的網站使用自訂網頁字型,只剩約 12% 完全依賴系統字型;約 72% 的網站至少有一個字型檔從自家網域提供,也就是純自行代管或自行代管與外部服務混用,純自行代管的約占三分之一,比 2024 年的約 30% 再往上升。多花那段下載等待幾乎已經是常態選擇,問題不是要不要用網頁字型,是這段等待跟隨之而來的版面變化該怎麼壓到最小,這就牽涉到下一個更容易被忽略的副作用,也就是版面跳動。
字寬字高沒對齊的備用字型才會讓版面跳動
字型還沒下載完之前,瀏覽器怎麼處理畫面,會出現兩種常被搞混的現象。第一種是 FOIT(Flash of Invisible Text,不可見文字閃爍),字型還沒到,文字整個隱形,等字型抓到才一次顯示出來,上一節提到的封鎖文字轉譯,呈現在畫面上就是這個樣子。第二種是 FOUT(Flash of Unstyled Text,無樣式文字閃爍),瀏覽器先用備用字型把文字顯示出來,等網頁字型抓到之後,再把文字換成真正指定的字型。這兩種現象分別對應不同的 font-display 設定值。
版面會不會跳動,關鍵不在於換了字型這件事本身,而在於備用字型跟網頁字型佔用的空間一不一樣。web.dev 的字型效能指南講得很直接,字型替換做法可能導致版面配置位移、影響 Cumulative Layout Shift(累計版面配置位移,Google 核心網頁指標之一);如果網頁字型和備用字型在網頁上佔用的空間大小不同,就會出現這類位移。每個字型的字元寬度、上升高度(ascent,字元往基準線上方延伸的幅度)、下降高度(descent,往下延伸的幅度)都是各自獨立設計的數值,備用字型跟真正要用的網頁字型幾乎不可能天生一致。FOUT 情境下,瀏覽器先用備用字型排版,等網頁字型換上去,如果兩者的量測值有落差,整段文字佔的高度或寬度就會跟著變,連帶把後面的內容往下推或往上收,這就是使用者實際看到的畫面跳了一下。

這個因果關係值得記清楚,因為它直接決定解法該往哪裡找。既然版面跳動的根源是兩個字型佔用的空間不一樣,那麼只要能讓備用字型先佔用跟網頁字型幾乎相同的空間,跳動就能壓到最低,不必靠乾脆別用品牌字型這種一刀切的做法解決。真正決定畫面在等待期間怎麼呈現的,是 font-display 這個 CSS 屬性。
font-display 五種值背後的等待與跳動取捨
font-display 是寫在 @font-face 宣告裡的 CSS 屬性,決定字型還沒抓到之前,使用者要看到空白還是跳動,這兩者沒辦法同時避免。web.dev 的字型效能指南把 auto、block、swap、fallback、optional 五個值的封鎖期與換貨期攤成對照表,落到實務只剩三種取捨:要效能最佳用 optional,文字延遲顯示不超過約 100 毫秒,代價是網頁字型可能整次瀏覽都用不上;要文字先出來、最後仍換成網頁字型用 swap,代價是換字瞬間的跳動;要確保一定用網頁字型顯示用 block,代價是初始畫面有一段空白。首屏品牌字型搭 swap、內文搭 optional 的分層建議,技術依據就在這張表裡。實際市場則明顯偏向 swap,HTTP Archive《2025 Web Almanac》統計約一半的頁面指定 swap,效能最佳的 optional 只占約 0.4% 到 0.5%,願意接受字型整次都用不到這個代價的網站仍是少數。

子集化與自行代管是字型瘦身的兩條路
選對 font-display 只決定等待跟跳動怎麼取捨,真正能把檔案砍小的,是子集化(subsetting)以及格式與代管方式的選擇。中文網頁字型特別需要子集化,web.dev 的字型效能指南提到,拉丁字型每種字型通常只有 100 到 1,000 個字形,CJK(中日韓)字型卻可能超過 10,000 個字元,差距少則十倍、多則上百倍,把網站用不到的字形拿掉,檔案才瘦得下來。Google Fonts 可以在請求網址加上 text 查詢參數,只取頁面實際用到的字;自行代管則可以用 subfont、glyphhanger 這類工具產生子集檔。格式一律選 WOFF2,壓縮率比舊版 WOFF 好約 30%。至於自己代管是不是一定比掛在 Google Fonts 快,web.dev 引用 Web Almanac 的觀察,兩者的效能差異沒有想像中明顯,自行代管要搭配 CDN 與 HTTP/2 以上的連線才划算,子集化跟格式選對,比字型放在哪裡重要得多。
可變字型一個檔案取代多個字重檔
子集化跟格式優化之外,還有一個容易被忽略的細節,就是可變字型(variable font)。它的原理是把原本要分開存放的多個字重、多個樣式,合併定義進單一檔案裡的軸(axis),最常見的是字重軸,一個檔案就能表示從 Light 到 Bold 之間的任意粗細,不必再為每個字重各自下載一個檔案。一個網站如果同時用到 4、5 種字重,原本要發出 4、5 次 HTTP 請求,換成可變字型之後可能只剩一次,這對載入速度是明顯的加分。
不過可變字型不是萬用解。web.dev 的字型效能指南提醒,可變字型因為要在單一檔案裡涵蓋多種樣式,基礎檔案本身通常就比只包含一種樣式的個別靜態字型檔案更大,如果一個網站原本就只用一種字重,硬換成可變字型反而是扛著一堆用不到的樣式資料,檔案不減反增。真正划算的情況,是網站實際用到(而且需要用到)多種字型樣式與粗細,這時候改用可變字型帶來的效能提升幅度才最大。HTTP Archive《2025 Web Almanac》也提到,第 90 百分位以上的重量級檔案,常常就是全功能、多軸的可變字型,或是根本沒做子集化的檔案,呼應同一個判準,可變字型要跟用字量、樣式需求對起來,不是看起來新潮就無腦套用。
品牌字型該守住的,是識別度最高的那幾個字
前面幾節把網頁字型的代價講得很具體,多一段下載等待、可能的版面跳動、還要多花力氣做子集化跟格式優化。但這些代價擋不住一個長期趨勢,網頁字型的採用率從 2011 年只有約 3% 到 5% 的網站,一路成長到 2025 年約 88%。HTTP Archive《2025 Web Almanac》Fonts 章把這段歷史講得很清楚,2015 年使用率就超過半數,2020 年來到約 75%,一路走到今天的約 88%。成長的原因不是跟風,是設計師發現自訂字體真的能讓一個網站的視覺識別跟其他更通用的網站區分開來。這正是很多品牌案子當初指定字型的初衷,不能因為顧慮效能就整套否定,網頁字型的效能代價是真的,但品牌字型的識別價值也是真的,兩件事同時成立。
不過,值得付這個代價跟該無腦全站套用是兩回事。真正該守住品牌字型的,通常是用字量少、識別度要求高的地方,網站的主標題、Logo 式的文字、少數幾個關鍵頁面的視覺焦點,這些地方文字量小,下載的字型檔案也可以只子集化到剛好夠用的字符範圍,多花的那段等待有限,換來的識別效果卻很明確。判斷該不該用品牌字型,問的是兩件事:這段文字的用字量有多少、這段文字承不承擔讓人記住這是誰家的任務,量小又承擔識別任務的,留品牌字型;量大又只是把資訊講清楚的,換系統字型。
舉一個去識別化的情境,一個主打質感的精品電商,把首頁與商品頁的主標題、Logo 式的品牌文字保留指定字型,搭配 font-display: swap 確保這些短句一定用品牌字型顯示;商品規格、退換貨說明這類長篇內文,則整段改用系統字型搭 font-display: optional。兩邊各取所需,讀者滑進首頁第一眼看到的,還是這個品牌獨有的字體調性;滑到商品說明去確認尺寸跟材質的時候,吃到的是零延遲的系統字型,不會因為等一個內文字型而打斷閱讀節奏。這不是各退一步的妥協,是把品牌字型的效能代價,精準花在真正需要識別度的地方。
字型指標覆寫維持備用字型的版面高度
版面跳動不是只能靠乾脆別用品牌字型這種一刀切的做法解決,CSS 提供了一組字型指標覆寫(font metric override)描述元,可以直接寫在 @font-face 宣告裡,讓備用字型在網頁字型還沒到之前,先佔用跟網頁字型幾乎一樣的版面空間。Chrome for Developers 的說明講得很明白,用字型指標覆寫值,覆寫備用字型的上升高度、下降高度和行距,讓它們跟網頁字型的對應數值一致,這樣一來,網頁字型和調整過的備用字型就會一直保持相同的垂直尺寸,換字型的那一刻,版面高度不會變,視覺跳動也就大幅縮小甚至消失。
這幾個描述元各自調整的是不同面向,ascent-override 控制的是上升高度(字元往基準線上方延伸的幅度),descent-override 控制下降高度(往下延伸的幅度),line-gap-override 控制行距,size-adjust 則是整體縮放比例,用來處理兩個字型平均字寬不一致的問題。MDN 對 ascent-override 的文件補充了規格層級的說明,這是 CSS Fonts Module Level 4 定義的正式描述元,用於覆寫透過 local() 指定的備用字型的上升高度量測值,讓它更貼近主要網頁字型的數值。這幾個值不是憑感覺填,Chrome for Developers 給出了具體算法,ascent-override 等於字型的 ascent 除以 unitsPerEm(字型設計時定義的座標系統單位),descent-override 跟 line-gap-override 算法同理。如果還要處理兩個字型平均字元寬度不一致的問題,再加上 size-adjust,算法是網頁字型的平均字元寬度除以備用字型的平均字元寬度,而前三個覆寫值也要跟著改成除以網頁字型的 unitsPerEm 乘上 size-adjust。這套計算需要知道網頁字型的實際字型量測資料,不是隨手加一行 CSS 就能套用,適合真的很在意品牌首屏文字觀感的網站投入。好在不必整套手算,Fontaine、Capsize、fontdrop.info 這幾個工具,以及 Next.js 內建的 next/font、Nuxt 的 nuxt/fontaine,都能自動讀取字型檔案、算出對應的覆寫數值,直接產生可以貼上的 CSS。
內文字多時,品牌字型的效能代價通常划不來
前面講的是值得付的情況,這裡要補不值得付的情況,才不會整節聽起來一面倒向品牌字型。內文字大量鋪陳的頁面,長篇文章、規格列表、大段的說明文字,不適合整段套用品牌字型。字型檔案的大小是固定的,不會因為用在哪裡而變重,但延遲跟跳動帶給讀者的感受,是跟畫面上受影響的文字範圍成正比的,首屏標題那幾個字延遲 100 毫秒,讀者幾乎感覺不到;一整篇兩三千字的內文都在等網頁字型換上,或者整段文字在換字的瞬間集體跳動,讀者的閱讀節奏會被明顯打斷。
這裡值得回頭確認,這不是自相矛盾,是同一套判準套用到不同情境的結果。前面就講過,決定要不要用品牌字型,看的是這段文字需不需要靠字型建立識別,首屏的短句需要,長篇內文通常不需要,讀者在讀內容的時候,不是在靠字體判斷這是不是同一個品牌。用字量與識別度這兩個判準,從頭到尾都沒有變過,只是一路把技術細節(下載等待、CLS 成因、font-display 取捨、子集化、字型指標覆寫)一個個攤開,證明這個判準不是憑感覺畫的分界線,而是有具體的效能數字撐著。
字型從來不是用不用的單選題,是這段文字在做什麼的判斷題。首屏的品牌識別留給指定字型,長篇內文讓系統字型接手,中間那道版面跳動的縫,靠 font-display 選對值、靠子集化跟格式優化把檔案瘦下來、真的在意首屏觀感就再加一層字型指標覆寫去補,每一步都有具體的技術做法可以照著做,不必在好看跟好用之間硬選一邊。下一次要決定某個頁面的某段文字該不該套上品牌字型,不妨先問這段文字的用字量有多少、它承不承擔讓人記住品牌的任務,答案通常已經很清楚。
