跳至主要內容
線上 SVG 編輯器

如何為網頁最佳化 SVG 檔案

更小的 SVG,肉眼看不出差別。

發佈於 2026-03-08

網頁上大多數的 SVG 都比實際需要大 2–4 倍。Figma、Illustrator 與 Inkscape 匯出時都會塞入 metadata、隱藏圖層以及冗長的路徑資料,而這些重量最後都會送到使用者手上。好消息是:SVG 最佳化完全是機械式的流程,在瀏覽器裡就能完成。

哪些東西會被移除

一個典型的最佳化器會跑 30–40 條規則,每條只做一件事。最明顯的幾項收益來自:

  • Metadata —— <metadata><title><desc>、Inkscape 命名空間和 Figma 留下的註解。對視覺完全沒有影響。
  • 註解與 CDATA —— 從來不會顯示,正式環境不需要。
  • 隱藏圖層 —— 被匯出工具漏下的 display="none" 或透明度為 0 的元素。
  • 多餘的 transform —— 一個什麼都不做的 translate(0,0) 或可以合併的矩陣。
  • 精度 —— 路徑座標從 6 位小數取整到整數像素。
  • 預設屬性 —— 本來就是黑色的元素上還寫著 fill="black"
  • ID —— 沒有被引用或是自動產生的 ID。

要保留的部份

  • viewBox —— 少了它,響應式縮放就會壞掉。
  • 無障礙標題 —— 如果 SVG 是內容(而不是裝飾),要為螢幕閱讀器保留 <title><desc>
  • 語意化類別名稱 —— 如果你用 CSS 為 SVG 做動畫或樣式,不要讓最佳化器重新命名它們。

執行最佳化器

把你的 SVG 貼進 SVG 最佳化器 然後按下最佳化。它在瀏覽器裡跑(不會上傳),並會顯示最佳化前後的大小對比。

一個典型的 Figma 匯出通常可以縮小 30–60%。手寫 SVG 的空間會比較小(一般 10–20%),因為本來就沒什麼可以剝掉的東西。

最佳化出狀況時

過於激進的最佳化可能會影響幾件具體的事:

  • 用 ID 參照元素的動畫 —— 如果 ID 被改名,動畫會停止運作。
  • 查詢特定類別的腳本 —— 如果類別名稱被壓縮,腳本就會失敗。
  • 帶有少見效果的濾鏡 —— 如果精度被壓得太低,渲染結果會不一樣。

如果最佳化後的 SVG 看起來怪怪的,先把 cleanupIds: falseremoveHiddenElems: false 當作起點,再用二分法找出真正造成問題的那條規則。

自動化

對建置流程來說,最直接的方法是把 npm 上的 svgo 套件加到資源管線裡。對一次性的小任務,瀏覽器裡的工具更快。目標其實是一致的:只送瀏覽器真正需要的內容。