クライアント環境でフォントが表示されない問題の原因と解決策|現場で使える実践テクニック

クライアント環境でフォントが表示されない問題の原因と解決策|現場で使える実践テクニック
C
クリオ
Web制作ディレクター / フロントエンジニア

こんにちは!
今日は「クライアント環境でフォントが表示されない問題」について解説します。

これ、ほんまによくある悩みなんですよ。
僕も昔、クライアント企業に納品したサイトが「フォントがおかしい」って連絡をもらった経験があります。
ローカルではきれいに表示されてるのに…って感じで、原因特定に丸一日かかりました。

クライアント環境でのフォントトラブルってなぜ起きる?

フォント表示の問題は、環境依存トラブルの中でもめっちゃ厄介です。
理由は、フォントの存在確認が複雑だからですね。

ローカルでは動く理由はシンプルです。
あなたのPC、あるいは制作チームのPC環境には、ほぼ確実に一般的なフォントがインストールされています。
だから font-family: "Helvetica", "Arial", sans-serif; みたいな指定でも、問題なく表示される。

ところがクライアント企業のPC環境だと、どうなってるかわかりません。
古いWindowsマシンかもしれませんし、企業のセキュリティポリシーでフォントがロックされてるかもしれない。
あるいは、Webフォントを使ってる場合、そのサーバーへのアクセスが遮断されてる可能性だってあります。

現場でよく見るのは「ローカルではGoogle Fontsが読み込まれてたけど、クライアント側のファイアウォールでブロックされてた」っていうケースですね。
地味に多いんですよ。

Webフォントが読み込まれていない場合の対処法

Webフォントが表示されないときの調査方法をお伝えします。

まず大事なのは、ブラウザの開発者ツールで確認することです。
Networkタブを開いて、フォントファイルが実際に読み込まれているか見てください。
404エラーが出てたら、ファイルパスが間違ってるか、サーバーに存在してません。
読み込み中のまま止まってたら、ネットワーク接続に問題がある可能性が高いです。

僕がよくやるのは、フォント定義の確認です。

例えばGoogle Fontsを使ってる場合、ヘッダーに <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap" rel="stylesheet"> みたいに記述されてますよね。
このURLが本当に正しいか、実際にアクセスして確認するんです。
ブラウザのアドレスバーに直接貼って、CSSが返ってくるか見る。
これで「あ、このドメインはクライアント企業でアクセス禁止なのか」って気づけるんですよ。

対策としては、3つ方法があります。

  • フォントファイルを自分のサーバーにダウンロードして置く
  • クライアント企業のIT部門に、該当ドメインのホワイトリスト登録をお願いする
  • はじめからシステムフォントだけで構成されたデザインにする

個人的には、1番目の「自分のサーバーに置く」が安定してます。
外部依存がなくなるので、クライアント環境の変化に左右されません。

システムフォントが存在しない環境への対応

次によくあるのが、システムフォントの指定ミスです。

例えば、デザイナーが「この見出しはメイリオで統一」って指定したとします。
ローカルでメイリオをインストールしてるから、きれいに表示される。
だけどクライアント企業のWindows環境には、メイリオがない場合があります。
古いOSだったり、フォントパッケージが削除されてたり。

そこで大事なのが font-family の並び順です。

良くない例:

font-family: "メイリオ", serif;

メイリオだけを指定してて、フォールバック先が serif だけ。
メイリオがなかったら明朝体になっちゃいます。

良い例:

font-family: "メイリオ", "Segoe UI", "Hiragino Sans", "ヒラギノ角ゴ Pro", "Yu Gothic", YuGothic, sans-serif;

複数のフォントを指定することで、左から順番に「存在するか?」をチェックされます。
メイリオがなかったら、次はSegoe UIを見る。
それもなかったらヒラギノ…という具合に、フォールバックしていく。
最終的に必ず何らかのフォントで表示される。

僕がよく使う工夫は、OS別にフォントを指定することです。

WindowsとMacじゃ、標準で入ってるフォントが全然違いますからね。
Macだったら「Hiragino Sans」が確実に入ってますし、Windowsなら「Yu Gothic」。
最後に汎用の sans-serif を置くことで、どの環境でも読みやすいサンス体で表示される。

CORSとキャッシュの落とし穴

Webフォントを外部CDNから読み込んでる場合、CORS(Cross-Origin Resource Sharing)の設定が影響することがあります。

例えば、あなたのドメインが example.com で、Google Fontsから読み込んでるとします。
Google Fontsのサーバー側で、CORSが正しく設定されてれば問題ありません。
だけど、自社サーバーでWebフォントを管理してて、CORS設定が不足してると、ブラウザがフォント読み込みをブロックするんです。

ローカル環境(localhost とか 127.0.0.1)では、CORS制限がゆるいので動く。
本番サーバーでは厳しく適用される。
そのギャップで「ローカルでは動くが本番で動かない」という状況が生まれます。

対策は、サーバー側の .htaccessweb.config で、CORSヘッダーを追加することですね。

Apache の例:

<FilesMatch "\\.(woff|woff2|ttf|otf|eot)$">
Header add Access-Control-Allow-Origin "*"
</FilesMatch>

もう一つ、地味に引っかかるのがブラウザキャッシュです。
ローカルでテストしたときに、ブラウザがフォントファイルをキャッシュしてる。
だから「ファイルが存在しない」って修正しても、ブラウザはキャッシュから古いフォント読み込もうとする。
結果、本当は修正されてるのに「まだ壊れてる」に見える。

これを避けるには、フォントファイルのURLにバージョン番号をつけるといいですよ。