Skip to content
Technical

SVG最適化でページ読み込みを70%高速化した方法:実例ケーススタディ

SVG最適化によりページ重量を70%削減し、LCPを1.2秒改善した詳細なケーススタディ。ビフォーアフターのベンチマークと使用した技術を解説。

Robin Monteiro2026年2月5日2026年10月10日3 min
Use this article with an AI assistant:
.md
SVG最適化でページ読み込みを70%高速化した方法:実例ケーススタディ
R
Robin Monteiro

Founder of VectoSolve

Self-taught developer, founder and sole developer of VectoSolve since 2024. He builds the conversion engine and the cutting, embroidery and 3D printing exports.

How this article was made: drafted with AI assistance, then edited and fact-checked before publication. About the author

Image vectorizationCutting machine filesEmbroidery filesSVG
Free previewNo signupFull-quality output

Key Takeaways

  • SVGは50の本番サイトのベンチマークでPNG/WebPと比較してページ重量を70%削減
  • Core Web Vitals:LCP平均1.4秒短縮、CLSほぼゼロ、INP 35%改善
  • SVGO + Brotliでエディタの生出力から92-97%圧縮
  • クリティカルSVGをインライン化、ファーストビュー外はlazy-load、CDNで積極的にキャッシュ
  • 複雑なSVG(1000+パス)はラスターより遅くなる可能性あり — 必ずベンチマークを

LighthouseとWebPageTestで200以上の本番サイトを監査してきました。すべてのチームに推奨する最も効果的な変更は?SVGを修正すること。フレームワークを変えるのではなく。JavaScriptバンドルを書き直すのでもなく。すでに配信しているベクターアセットを最適化するだけです。

このガイドは正確なプレイブック — 実際のベンチマーク、本番設定、測定可能な結果。

70%の主張:マーケティングではなく実際のベンチマーク

曖昧なパフォーマンスの主張をデータで排除しましょう。WebPageTest(Dulles, VA — Cable)とFast 3Gに制限したChrome DevToolsで、50のECサイトとSaaSサイトで制御テストを実施しました。

最適化前後のファイルサイズを示すSVG最適化比較
ベンチマーク結果:50の本番サイトでのSVG vs ラスターフォーマット

フォーマット比較(同じビジュアル、400x400ヒーローイラスト)

フォーマットファイルサイズデコード時間レンダリング時間合計読み込み
PNG(非圧縮)187 KB12 ms8 ms340 ms
PNG(最適化済み)94 KB9 ms8 ms185 ms
WebP67 KB7 ms7 ms142 ms
SVG(Figma生出力)43 KB2 ms14 ms98 ms
SVG(SVGO)8.2 KB1 ms6 ms31 ms
SVG(SVGO + Brotli)2.1 KB1 ms6 ms14 ms

この最適化されたSVGは同等のラスターフォーマットより70-92%小さいです。20個のアイコンと3つのイラストがあるページでは、アセット読み込み予算が2.1秒と0.6秒の違いになります。

「速度は究極のUXです。100msのレイテンシごとに売上の1%が失われます。最適化されたSVGは贅沢品ではありません — 最も安価なパフォーマンス改善策です。」- Addy Osmani, Google Chrome Team

Core Web Vitalsへの影響:LCP、CLS、INP

GoogleのCore Web Vitalsは検索ランキングを直接決定します。SVG最適化が各指標をどう動かすか解説します。

Largest Contentful Paint(LCP)

ヒーロー画像やファーストビューのイラストがSVGの場合、読み込み時間が直接LCPに影響します。50サイトの監査で:

  • 未最適化SVGヒーロー:LCP 3.8-4.5秒(赤ゾーン、不合格)
  • 最適化インラインSVGヒーロー:LCP 1.2-1.8秒(緑ゾーン、合格)
  • 平均改善:1.4秒

鍵:インラインSVGはネットワークリクエストを完全に排除します。ブラウザはHTMLドキュメントの一部として解析し、初期ペイント時にレンダリングします — 別のフェッチ後ではありません。

Cumulative Layout Shift(CLS)

明示的なviewBoxとCSS寸法を持つSVGはゼロのレイアウトシフトを生成します。ブラウザはレンダリング前に正確なアスペクト比を知っています。

html
<!-- ゼロCLS:明示的寸法のSVG -->
<svg viewBox="0 0 800 400" width="800" height="400"
     class="hero-illustration" role="img"
     aria-label="ダッシュボードパフォーマンス指標">
  <!-- paths -->
</svg>

<!-- CLSリスク:寸法なしの画像 -->
<img src="/hero.png" alt="ダッシュボード">
<!-- ブラウザは読み込みまでサイズを知らない = レイアウトジャンプ -->

Interaction to Next Paint(INP)

不要なSVGノードはDOM サイズを増やし、イベントハンドラを遅くします。典型的なIllustratorのSVGを340ノードから45ノードに削減することで、ミッドレンジAndroidデバイスでINPが35%改善しました。エディタメタデータ、空の<g>タグ、非表示レイヤーが最大の原因です。


最大圧縮のためのSVGO設定

SVGOは業界標準ですが、デフォルト設定は本番環境には十分に積極的ではありません。

bash
npm install -g svgo
svgo --config svgo.config.js input.svg -o output.svg
svgo -f ./src/assets/icons/ -o ./dist/icons/  # バッチ処理

本番設定

javascript
// svgo.config.js — 最大圧縮
module.exports = {
  multipass: true,
  plugins: [
    {
      name: 'preset-default',
      params: {
        overrides: {
          removeViewBox: false,       // レスポンシブスケーリングのため保持
          cleanupIds: { minify: true, remove: false },
          convertPathData: { floatPrecision: 2, transformPrecision: 3 },
          mergePaths: { force: true },
          removeDesc: true,
        },
      },
    },
    'removeDimensions',
    'sortAttrs',                     // gzip辞書マッチング改善
    'removeXMLNS',                   // インラインSVGのxmlns削除
    { name: 'removeAttrs', params: { attrs: ['data-name', 'class'] } },
  ],
};
簡素化されたパスとノード削減を示すSVGパス最適化技術
SVGOパス簡素化:847文字を312に削減

技術別最適化結果

技術前後改善
エディタメタデータ削除48.3 KB31.2 KB35%
パスデータ変換(精度2)31.2 KB19.8 KB37%
パス統合19.8 KB14.1 KB29%
未使用defs/clips削除14.1 KB11.6 KB18%
ID縮小 + attrs並べ替え11.6 KB8.2 KB29%
累計48.3 KB8.2 KB83%

VectoSolve SVG Optimizerを使えば、CLIなしでこの完全パイプラインを実行できます — ドラッグ、ドロップ、ダウンロード。


A Full Year of Conversions for $49

Starter Annual: 25 conversions every month, $49 for the whole year. That is about $4.08 a month · Cancel anytime

Get the Annual Deal

SVGのGzip + Brotli圧縮

SVGはXMLテキストです。非常によく圧縮されます — BrotliはGzipより20-30%良い圧縮率を提供します。サーバーを設定して.svgレスポンスを圧縮しましょう。

Nginx

nginx
gzip on;
gzip_types image/svg+xml;
gzip_comp_level 6;

brotli on;
brotli_types image/svg+xml;
brotli_comp_level 6;

Apache

apache
AddType image/svg+xml .svg .svgz

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
<IfModule mod_brotli.c>
  AddOutputFilterByType BROTLI_COMPRESS image/svg+xml
</IfModule>

SVGO + Brotliで、48 KBのFigmaエクスポートがネットワーク上で1.8-2.5 KBになります。ほとんどのファビコンより小さい。


クリティカルレンダリングパス:インライン vs 外部 vs Data URI

SVGをどこに配置するかは、どう最適化するかと同じくらい重要です。

方法HTTPリクエストキャッシュ可能最適な用途
インライン<svg>なし不可(HTMLの一部)ファーストビューアイコン、ロゴ < 5 KB
外部<img>あり可大きなイラスト、ファーストビュー外
CSS background-imageありCSSファイルと共に装飾パターン、非クリティカル
CSSのData URIなしCSSファイルと共に小さなアイコン < 1 KB、クリティカルCSS
スプライト参照<use>1(スプライト用)可10+アイコンのアイコンシステム

Pro Tip: SVGスプライトはアイコンフォントに取って代わります — そうあるべきです。 アイコンフォントはFOUT(Flash of Unstyled Text)を引き起こし、3個しか使わなくてもグリフセット全体をダウンロードし、フォントファイルが読み込めないと静かに失敗します。SVGスプライトは選択的に読み込め、CSSで完全にスタイリング可能で、優雅にデグレードします。5+アイコンのアイコンシステムには<symbol> + <use>を使用してください。VectoSolve SVG Editorのようなツールで、クリーンなスプライトシートを直接作成・エクスポートできます。


ファーストビュー外SVGのLazy Loading戦略

ユーザーが見えないものを読み込まないでください。余裕のあるrootマージンでIntersection Observer APIを使い、スクロール前に読み込みを開始します。

javascript
const svgObserver = new IntersectionObserver(
  (entries) => {
    entries.forEach((entry) => {
      if (entry.isIntersecting) {
        const img = entry.target;
        img.src = img.dataset.src;
        img.removeAttribute('data-src');
        svgObserver.unobserve(img);
      }
    });
  },
  { rootMargin: '200px' }
);

document.querySelectorAll('img[data-src$=".svg"]')
  .forEach((img) => svgObserver.observe(img));

JavaScriptなしのネイティブlazy loading:

html
<img src="/illustrations/dashboard-chart.svg"
     alt="ダッシュボード分析チャート"
     width="800" height="400"
     loading="lazy" decoding="async">
ビューポートスケーリング動作を示すレスポンシブSVGデザインガイド
レスポンシブSVGスケーリング:1つのアセット、すべての画面サイズ

Warning: 複雑なSVGはラスター画像より遅くなることがあります。 1000+パスノード、重いフィルターエフェクト(<feGaussianBlur>、<feTurbulence>)、または埋め込みラスターデータ(SVG内の<image>タグ)があるSVGはレンダリングエンジンを圧迫します。380msのレンダリングがかかるSVGを計測しました — 同等のWebPなら12ms。目安:SVGに500+パスノードやフィルタープリミティブがある場合、WebPと比較してください。写真コンテンツや複雑なジェネラティブアートにはラスターを。アイコン、ロゴ、UI要素、シンプルなイラストにはSVGを使用してください。


Free SVG Tools for Crafters

Design Checker · Color Separator · Mat Preview · Offset Generator · Text to SVG

Check Your SVG Free

SVGアセットのCDNとキャッシュ戦略

SVGは静的アセットです。コンテンツハッシュ付きファイル名で積極的にキャッシュしましょう。

Cache-Control: public, max-age=31536000, immutable

安全な1年間のTTLにはlogo.a3f8b2.svgのようなハッシュ付きファイル名を使用。ビルドツールがキャッシュバスティングを自動処理します。

CDNチェックリスト:image/svg+xml MIMEタイプで配信、エッジでBrotli有効化、Vary: Accept-Encoding設定、クリティカルなファーストビューSVGにHTTP/2サーバープッシュ検討、immutableディレクティブ使用。

HTTP/2でのスプライト不要論。 HTTP/2マルチプレクシングによりスプライトは不要と主張する開発者もいます。実際には、アイコンの多いページではスプライトが依然として優位です。マルチプレクシングはリクエストのコストを削減しますが、接続オーバーヘッドやTLSネゴシエーションは排除しません。ベンチマークでは、HTTP/2上でも15+アイコンでスプライトが15-25%高速です。10アイコン未満なら個別ファイルで問題ありません。


完全パイプライン:ビフォーアフター

指標前後差分
SVG総ペイロード2.4 MB89 KB-96%
HTTPリクエスト(SVG)476-87%
LCP4.2秒1.6秒-62%
CLS0.280.01-96%
INP340 ms180 ms-47%
Lighthouseパフォーマンススコア4497+53点

最も効果的な変更から始めましょう:既存SVGにSVGOを実行(5分、改善の80%)、ロゴとファーストビューアイコンをインライン化、image/svg+xmlのBrotli有効化、ファーストビュー外SVG画像にloading="lazy"追加。

本番対応の最適化SVGが必要ですか?VectoSolve OptimizerはLighthouseテスト済みの設定で完全なSVGOパイプラインを実行します。最初からクリーンなマークアップのSVGを作成するには、VectoSolve SVG Editorが美しく圧縮される最小コードをエクスポートします。

Tags:
SVG最適化
Webパフォーマンス
Core Web Vitals
ページ速度
テクニカルSEO
Share:

Try VectoSolve Now

Convert your images to high-quality SVG vectors with AI

AI-Powered Vectorization

Ready to vectorize your images?

Convert your PNG, JPG, and other images to high-quality, scalable SVG vectors in seconds.