トラブルシュート

SVGが表示されないときの原因と直し方

HTMLにSVGを埋め込んだのにブラウザで何も表示されない、あるいはimgタグで参照したSVGが空白になる問題は、主にMIMEタイプの設定ミスやSVGの記述エラー、CSPの制限によって発生します。エラーの種類によって対処が異なるため、まずブラウザのコンソールと開発者ツールで状況を切り分けることが最初のステップです。

よくある原因

SVGが表示されない原因として最も多いのはMIMEタイプの問題です。Webサーバーが.svgファイルを`image/svg+xml`ではなく`text/plain`や`application/octet-stream`として返すと、ブラウザはSVGとして解釈せず表示を拒否します。特にPythonの`http.server`やローカルのNginxデフォルト設定ではSVGのMIMEタイプが未設定のことがあります。

インラインSVG(HTMLにSVGタグを直書き)の場合は、`<svg>`タグのwidth/heightまたはviewBox属性が指定されていないと、SVG要素は存在するが表示領域が0×0になって見えない状態になります。また、`xmlns="http://www.w3.org/2000/svg"`属性がHTMLに直書きする場合は省略可能ですが、外部.svgファイルとして参照する場合は必須です。

  • 相手がログインなしで開ける状態か確認する
  • PCとスマホで最低1回ずつ表示を確認する
  • 内部情報・個人情報・不要な外部送信が残っていないか見る
  • レビュー期限と修正時の差し替え方を決めておく

自分側で確認すること

まず開発者ツールのNetworkタブでSVGファイルへのリクエストを確認します。404(ファイルが見つからない)なら参照パスの誤り、200でもContent-Typeがimage/svg+xmlでなければMIMEタイプの問題です。インラインSVGの場合はNetworkタブには出ないため、ElementsタブでSVGタグを選択してComputed Styleのwidth/heightを確認します。

Nginxを使っているならconf内の`include mime.types`が有効か、mime.typesにsvgが含まれるかを確認します。CloudflareやGitHub PagesはSVGのMIMEタイプを自動設定するため問題になりにくいですが、独自サーバーでは手動設定が必要です。ギガサイト便にSVGを含むzipをアップロードする場合は、Cloudflareが配信するためMIMEタイプの心配は不要です。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

相手側で確認すること

共有先で「SVGが見えない」という報告が来たとき、まず相手のブラウザを確認します。IE11はインラインSVGを一部サポートしていますがCSS内のSVGは扱いが特殊です。現行のChrome/Firefox/Safariならインラインもimgタグも問題なく表示できるため、相手が古いブラウザを使っていないか確認します。

相手のブラウザが最新であれば、コンソールでエラーを確認してもらいます。「Content Security Policy」に関するエラーが出ていれば、サーバーのCSPヘッダーがSVGの表示を制限しています。CSPが原因の場合は`img-src 'self' data:`のような設定の見直しが必要で、ギガサイト便経由で配信している場合は発生しにくい問題です。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

再発防止の運用

SVGの表示問題を量産しないためには、HTMLに直接インラインで書くか、Data URI(`<img src="data:image/svg+xml,...">`)で埋め込む方法が最もトラブルが少ない選択肢です。外部ファイル参照はサーバーのMIMEタイプ設定に依存するため、配布を前提とした静的HTMLではなるべくインラインかData URIを使います。

AI生成HTMLでSVGを使う場合は、プロンプトに「SVGはインラインで記述し、外部ファイル参照はしないでください。viewBoxとwidthを必ず指定してください」と追記します。この一文で生成されたHTMLのSVG表示の安定性が大きく向上します。

  • HTML内の外部script・form action・iframeを確認する
  • APIキーやトークンらしき文字列がないか検索する
  • 画像・CSS・JSのパスが公開後も解決できるか見る
  • noindexと認証を混同せず、必要なら両方設定する

よくある質問

SVGがChromeでは表示されるのにSafariでは表示されないのはなぜですか?

SVG内でCSSの`filter`や`clip-path`を使っている場合、Safariの対応範囲がChromeと異なるためです。またSafariはSVG内のforeignObjectをほぼサポートしないため、foreignObjectを使ったHTMLの埋め込みはSafariでは表示されません。

SVGをCSSの`background-image`で使う場合、特別な注意点はありますか?

URL参照する場合はMIMEタイプが必要です。インラインで使うにはSVGをURLエンコードして`background-image: url("data:image/svg+xml,...")`と記述します。SVG内にスタイルや色を持たせたい場合はURLエンコードが複雑になるため、Webツール(URL-encoder for SVG)を使うと便利です。

SVGアニメーション(smilまたはCSS animation)が表示されないケースはありますか?

SMILアニメーション(animate/animateTransformタグ)はChrome 45以降で一時廃止の動きがあり、Chromeでは再度サポートされましたが、Edge LegacyやIE11では動作しません。CSS animationをSVG内に記述する方式の方が現在は安定しています。

関連記事

トラブルシュート

SVGが表示されない問題をAI生成HTMLで防ぐプロンプト

AI生成HTMLでSVGが表示されない問題を防ぎたい制作者向け。viewBox指定・インライン化・SVGOによる最適化まで、AIへのプロンプトに盛り込むべき指示文と、生成後に確認すべきポイントを具体的に説明します。

5分で読める
トラブルシュート

WebP画像が表示されないときの原因と直し方

WebP画像が共有HTMLで表示されない原因を調べたいデザイナー・エンジニア向けに、パスミス・ファイル未同梱・ブラウザ非対応の3パターンを原因別に解説し、修正手順と再発防止策を具体的に示します。

4分で読める
トラブルシュート

OGP画像が更新されないときの原因と直し方

HTMLページを更新してもOGP画像が変わらない原因と直し方を知りたいWeb制作者向けに、キャッシュの仕組み・デバッグツールの使い方・再発防止の運用を具体的な手順で解説する記事。

5分で読める
「トラブルシュート」の記事をもっと見る →