SVG 圧縮・最適化ツール

SVGO 4.1 で SVG をブラウザ上で圧縮・最適化。複数ファイルをまとめて処理して ZIP で保存でき、最適化前後の描画をピクセル単位で比較。ID の削除や viewBox の消失など、壊れる原因になる変更を一覧表示。アップロード不要。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
設定 どれかを変えると最適化し直します。初期設定は SVGO の preset-default(34 プラグイン)、マルチパス、小数点以下 3 桁です。マルチパスは、結果が小さくならなくなるまでプラグインを最大 10 回繰り返します。! の付いたスイッチは、使う場所での SVG の大きさや名前を変えます。保存されるのはこの設定だけで、このブラウザに入ります。 パスの座標などの数値を、小数点以下この桁数までに丸めます(SVGO の floatPrecision)。桁数が少ないほどファイルは小さくなります。0 か 1 にすると点の位置が目に見えてずれることがあり、比較結果の確認を促す注意が出ます。 すべての ID に接頭辞を付け、1 ページに複数の SVG をインラインで置いても ID が衝突しないようにします。class 名には付けません。使えるのは英数字・ハイフン・アンダースコア・ピリオドだけで、数字・ハイフン・ピリオドでは始められず、40 文字までです。
.svg・.svgz ファイルをツール内のどこかにドロップするか、上の枠をクリックして選びます。ここに SVG コードを入力・貼り付けるか、テキスト欄の外で Ctrl+V を押しても読み込めます。1 ファイル 50 MB まで。読み込むと自動で最適化し、コードや設定を変えるたびに最適化し直します。
結果 ボタンの下の 1 行は、最適化後の描画が元と同じかどうかを示します。どちらも長辺 400 px で描画し、ピクセル単位で比較します。変化したピクセルが 0.1% 以下なら同じ、1% 以下ならわずかな差と判定します。10 MB を超えるファイルは比較しません。プレビューの下の注意には、削除・変更されて使う場所で問題になりうる内容が並びます。

SVG をドロップするか、コードを貼り付けるか、「サンプル」を押すと、ここにサイズ・描画の比較・プレビュー・ダウンロードが表示されます。

SVGO の全プラグイン

preset-default(34 個、既定で有効)

その他の組み込みプラグイン(既定で無効)

パラメーターが必要なため、スイッチは用意していません:addAttributesToSVGElement, addClassesToSVGElement, removeAttributesBySelector, removeAttrs, removeElementsByAttr。

この設定をビルドで使う(svgo.config.mjs)
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

最適化で壊れていないかを確かめる

SVGO の処理が終わると、元のファイルと結果を長辺 400 ピクセルでブラウザに描かせ、1 ピクセルずつ比べます。色かアルファの差が 24/255 を超えるピクセルを「変化あり」と数え、全体の 0.1% 以下ならアンチエイリアスの誤差として「描画結果は同じです」と表示します。それを超えると、変わった場所を赤で示した差分画像が出ます。

HTML からコピーした SVG には xmlns=“http://www.w3.org/2000/svg” がないことがよくあります。インラインなら表示されますが、.svg ファイルとしては画像として開けません。このツールは最適化の前に補い、注意として表示します。

例:レイヤー名が ID に残った SVG

Illustrator はレイヤー名やグループ名を SVG の ID として書き出します(ASCII.jp「基礎から学ぶ、IllustratorでSVGを最適化して書き出す方法」)。次は、レイヤー名「レイヤー 1」がルートの id と data-name に残り、色が .cls-1 などのクラスで指定された 373 バイトのボタン背景です。

<svg id="_レイヤー_1" data-name="レイヤー 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 40">
  <defs>
    <style>
      .cls-1 {
        fill: #e60012;
      }

      .cls-2 {
        fill: #fff;
      }
    </style>
  </defs>
  <rect class="cls-1" x="0" y="0" width="120" height="40" rx="8" ry="8"/>
  <circle class="cls-2" cx="20" cy="20" r="8"/>
</svg>

既定の設定では 209 バイトになり、描画は同じです。

<svg xmlns="http://www.w3.org/2000/svg" data-name="レイヤー 1" viewBox="0 0 120 40"><rect width="120" height="40" rx="8" ry="8" style="fill:#e60012"/><circle cx="20" cy="20" r="8" style="fill:#fff"/></svg>

注意は 2 件です。#_レイヤー_1 はファイル内で参照されていないので削除され、.cls-1 と .cls-2 は 1 回しか使われていないので style 属性に書き込まれました(inlineStyles)。サイトの CSS で .cls-1 の色を変えていた場合、見た目は同じでもその指定は効かなくなります。一方、data-* 属性は SVGO の既定では消えないため、data-name=“レイヤー 1” は残ります。消したい場合は Illustrator 側の書き出し設定を見直すか、出力を手で直してください。

例:小さくならないファイル

Wikimedia Commons の大韓民国の国旗(589 バイト)は、すでに手作業で最適化されています。SVGO にかけると 816 バイトに増えます。卦の rotate(33.69006752598) を convertTransform がパスの座標に書き込み、回転後の座標は桁数が多いためです。このツールは「元のファイルより大きい」と表示します。小数点以下を 1 桁にしても 603 バイトで、描画比較では卦の線の位置にわずかな差が出ます。

壊れやすい設定

設定(既定)変わること
ID を短縮・削除(オン)参照されている ID は a、b に、参照のない ID は削除。1 ページに複数の SVG をインラインで置くなら「ID の接頭辞」を指定
viewBox を削除(オフ)width・height と同じ viewBox を削除し、拡大縮小できなくなる(SVGO ドキュメント)。SVGO 4 で removeTitle とともに既定から外れた
width/height を削除(オフ)大きさは CSS や親要素で決まる。viewBox がなければ SVGO が元の大きさで補う
<title> を削除(オフ)スクリーンリーダーが読み上げる画像名がなくなる
小数点以下の桁数(3)0〜1 では点が目に見えてずれることがあり、描画比較で検出される

スクリプトと出所のわからない SVG

既定の SVGO は <script> や onclick などのイベント属性を残します。このツールはその数を注意に表示します。「スクリプトとイベント属性を削除」をオンにすると removeScripts が動き、SVGO 4.1.0 では <foreignObject> 内の HTML のイベント属性も削除されます。ブラウザは画像として使われた SVG(<img> や CSS 背景)ではスクリプトも外部ファイルも読み込みませんが、直接開いたとき、インラインで置いたとき、<object> や <iframe> で埋め込んだときは実行されます(MDN「画像としての SVG」)。このページのプレビューは画像なので、貼り付けた SVG のスクリプトはここでは動きません。SVGO は最適化ツールで、ユーザーがアップロードした SVG を無害化する専用の仕組みの代わりにはなりません。

複数ファイルとビルドへの組み込み

アイコンのフォルダをまとめてドロップすると、ファイルごとに最適化前後のサイズ、削減率、描画比較の結果が 1 行ずつ並び、「すべてダウンロード(.zip)」で元のファイル名のまま保存できます(.svgz は展開して .svg で保存)。設定が決まったら設定パネルの svgo.config.mjs をコピーし、プロジェクトで npx svgo@4.1.0 —config svgo.config.mjs -f icons -o icons-min を実行すれば、同じ結果が得られます。

ほかのツールとの違い

2026 年 10 月 2 日、同じファイルで試しました。MiniWebtool の SVG 最適化ツール(Bing「svg 最適化」1 位)は、貼り付けた SVG コードをフォームで自社サーバーに送信します。xmlns のない SVG は 119 → 119 バイトのまま、コメントも残って返ってきましたが、何のメッセージも出ませんでした。iLoveIMG(Bing「svg 圧縮」1 位)はファイルを api11.iloveimg.com/v1/upload にアップロードします。SVGOMG は SVGO 4.0.0 をローカルで動かしますが、1 ファイルずつで、ID の削除やファイルの増加を知らせません。いずれも最適化前後の描画比較はありません。

制限

  • 1 ファイル 50 MB まで。10 MB を超えるファイルは最適化しますが、描画は比較しません。
  • XML のエラーは、入力したテキストでの行と列(文字単位)と、ページの言語での理由を表示します。xmlns のない <svg><rect></svg> は 1 行 17 列で、終了タグ </svg> が最後に開いた要素と対応していないと表示します。ツールが補う xmlns は列に数えません。
  • アニメーションは最初のフレームだけを比較します。外部の画像・フォント・<use href=“other.svg#id”> は画像として読み込まれないため、比較の対象外です。
  • ファイル外の CSS や JavaScript がどの ID・class を使っているかは SVGO にはわかりません。注意には消えたものだけが出ます。
  • 埋め込まれた PNG・JPEG は再圧縮されません。パラメーターが必要な 5 つのプラグイン(removeAttrs など)にはスイッチがありません。
  • 「React コンポーネント(JSX)」形式のコピーでは、コメント・<style> ブロック・style 属性を SVG → JSX コンバーターと同じ方法で変換します。React のスタイルオブジェクトで保持できない style(SVGO が残す fill:red!important など)は変換せず、ボタンの下に理由を表示してそのファイルのコピーを無効にします。ダウンロード、一覧の行ごとのダウンロード、ZIP は最適化した SVG をそのまま保存し、ほかのコピー形式にも影響しません。

最適化した SVG をビットマップにするなら SVG PNG 変換ツール、TypeScript や forwardRef 付きの React コンポーネントにするなら SVG → JSX コンバーター、Data URI で埋め込むなら 画像 Base64 変換ツールが使えます。

FAQ

SVGOMG との違いは?

どちらもブラウザで SVGO を動かします。2026 年 10 月 2 日時点で SVGOMG は SVGO 4.0.0、このツールは 4.1.0 で、4.1.0 では removeScripts が強化されています。SVGOMG は 1 ファイルずつですが、このツールは複数ファイルの一括処理と ZIP 保存、描画のピクセル比較、削除された ID や class の一覧表示に対応しています。

SVG はサーバーに送られますか?

送られません。SVGO はこのタブの Web Worker で動き、ファイル・結果・プレビューはブラウザ内に留まります。保存されるのは設定だけで、このブラウザのローカルストレージに入ります。ページのアクセス解析が記録するのはツール名と操作(最適化・ダウンロード・コピー・ZIP)だけで、SVG の中身は含みません。

最適化したらアイコンの大きさや形が変わりました。

プレビューの下に表示される注意を確認してください。viewBox がないと CSS で拡大縮小できず、width と height を消すと大きさは CSS や親要素で決まります。ID が変わると、ファイルの外にある CSS・JavaScript・<use> の参照が動かなくなります。注意に書かれた設定をオフにすると、自動で最適化し直します。

圧縮したのにファイルが大きくなるのはなぜですか?

最適化済みのファイルは削れる部分が少なく、convertTransform が rotate() をパスの座標に書き込むと桁数が増えます。Wikimedia Commons の大韓民国の国旗は 589 バイトから 816 バイトになります。その場合は元のファイルを使ってください。

出所のわからない SVG も SVGO を通せば安全になりますか?

なりません。既定の設定の SVGO は <script> や onclick などのイベント属性を残します。「スクリプトとイベント属性を削除」をオンにすれば取り除けますが、SVGO は最適化ツールで、無害化(サニタイズ)の仕組みではありません。信頼できない SVG は <img> で表示してください。画像として読み込まれた SVG のスクリプトは、ブラウザが実行しません。