【ShinのAI活動ログ】Google Site Kitのグラフが表示されない!原因はCSP設定のブロックだった話

「セキュリティを強化した直後、Google Site Kitのダッシュボードを開いたらグラフが表示されない」——当サイトで実際に起きたトラブルです。訪問者数などの数字は出ているのに、折れ線グラフと円グラフだけが灰色の四角のまま。同じ症状で検索してたどり着いた方のために、原因の切り分けから解決までの流れをそのまま記録しておきます。

結論を先に書くと、原因は自分で設定したCSP(Content-Security-Policy)が、Site Kitのグラフ描画に必要なGoogleのスクリプトをブロックしていたことでした。

Shinさん、たいへんですぅ! Site Kitのダッシュボード、グラフが出てません! 灰色の四角がドーンと居座ってるだけなんですぅ……。
どれどれ。……本当ですね。訪問者数の「87」やTotal Impressionsの数字は出ているのに、折れ線グラフと円グラフだけが描画されていません。

先日、当サイトはセキュリティヘッダーの強化を行い、securityheaders.comでA評価を取得しました。その直後にこの症状に遭遇。数字は表示されるのにグラフだけが真っ白(正確には灰色の枠だけ)という、なんとも中途半端な壊れ方です。


目次

第1章:まずは切り分け――どこが壊れているのか

Analyticsとの連携が切れちゃったんでしょうか……? 設定やり直しですかぁ?
いえ、その可能性は低いですよ。よく見てください。訪問者数もインプレッション数も、数字自体はちゃんと取れています。
あっ、ほんとだ。数字は出てます!
データが取れていて描画だけ失敗しているということは、サーバーやAPI連携ではなく、ブラウザの中で何かが起きている可能性が高いです。容疑者は3つですね。
  1. 広告ブロッカーなどの拡張機能……analytics系のリクエストを管理画面内でも遮断することがある
  2. CSP(Content-Security-Policy)……自分で設定したセキュリティヘッダーが外部スクリプトを弾いている
  3. キャッシュ……古い状態が残っているだけ
どうやって犯人を見つけるんですかぁ?
F12です。ブラウザの開発者ツールでConsoleを開けば、エラーが全部白状してくれますよ。まあ、なんとでもするさ。

第2章:エラーメッセージは全部教えてくれる

F12キー(またはメニューから「デベロッパーツール」)を開き、Consoleタブを見ると、赤いエラーがずらり。

Loading the script ‘https://www.gstatic.com/charts/loader.js’ violates the following Content Security Policy directive: “script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ …”

うぅ、英語がいっぱいですぅ……。
長く見えますが、読むべきポイントは2つだけです。

ポイント1:「violates the following Content Security Policy directive」の一文があるか。これがあれば原因はCSPで確定です。拡張機能やキャッシュの線は消えます。

ポイント2:「何が」「どのルールに」弾かれたか。

  • ブロックされたURL → https://www.gstatic.com/charts/loader.js
  • 弾いたルール → script-src

つまり「gstatic.comというドメインのスクリプトが、script-srcという許可リストに載っていないのでブロックされた」と読めます。

gstatic.comって、怪しいサイトなんですかぁ?
逆ですよ。Googleが静的ファイルを配信するための公式ドメインです。Site Kitはグラフ描画に「Google Charts」というライブラリを使っていて、その本体がgstatic.comから配信されています。うちのCSPはGoogleタグマネージャーやYouTubeは許可していたのですが、gstatic.comだけ許可リストから漏れていたんです。

第3章:.htaccessのCSPを修正する

原因が分かれば、あとは許可リストにドメインを足すだけです。当サイトはCSPを.htaccessで設定しているので、そこを編集します。

作業前に必ず.htaccessの全文をコピーしてバックアップを取ってください。.htaccessは1文字のミスでサイト全体が500エラーになります。バックアップさえあれば、貼り戻すだけで即復旧できます。

修正前のCSP(script-src部分の抜粋):

script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.googletagmanager.com https://www.google-analytics.com ...

ここに https://www.gstatic.com を追記します:

script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.gstatic.com https://www.googletagmanager.com https://www.google-analytics.com ...

区切りは半角スペース、既存の値は消さない、CSP全体は1行のまま。この3点に注意して保存します。

これで直りましたか?
……と思ったのですが、リロードしてもまだグラフが出ません。Consoleを見ると、今度は別のエラーが出ていました。

Loading the stylesheet ‘https://www.gstatic.com/charts/49/css/core/tooltip.css’ violates the following Content Security Policy directive: “style-src ‘self’ ‘unsafe-inline’ …”

えぇっ、さっき許可したのにぃ!?
よく見てください。今度は script ではなく stylesheet、ルールも script-src ではなく style-src です。CSPはスクリプトとCSSで許可リストが別なんですよ。Google ChartsはJSだけでなくCSSもgstatic.comから読み込むので、style-srcにも同じドメインを足す必要がありました。

というわけで、style-src側にも追記します:

style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://www.gstatic.com

保存して、Ctrl+F5でハードリロード(ヘッダーはキャッシュされることがあるため、通常のリロードでは反映されない場合があります)。

出ましたぁー! 折れ線グラフもドーナツグラフも、ちゃんと描けてますぅ!

第4章:これってセキュリティを緩めたことにならないの?

でもShinさん、せっかく厳しくした許可リストにドメインを足しちゃって、大丈夫なんですかぁ?
いい質問ですね。結論から言うと、問題ありません。CSPの本質は「鎖国」ではなく「入国審査」ですから。

CSPは「怪しいものを全部締め出す」仕組みではなく、「このサイトが正当に通信する相手を明示的に宣言する」仕組みです。gstatic.comはGoogleフォントやreCAPTCHAでも使われる公式CDNであり、これを許可リストに載せるのは「正当な取引先を台帳に記載した」だけのこと。実際、修正後にsecurityheaders.comで再スキャンしても、A評価はそのまま維持されました。

むしろ危険なのは、「よく分からないから」とCSP自体を外してしまうことです。エラーが出るたびに、ブロックされたドメインが本当に必要なものか確認して、必要なものだけを1つずつ足していく。この運用こそがCSPの正しい付き合い方だと思います。


まとめ:3ステップで慌てず対処

同じ症状に遭遇したら、この3ステップです。

  1. 症状の確認……数字は出るのにグラフだけ出ない → ブラウザ側の描画ブロックを疑う
  2. F12 → Console……「violates … Content Security Policy」があればCSP確定。ブロックされたURLとディレクティブ名(script-src / style-src)をメモ
  3. CSPに追記……該当ディレクティブにドメインを追加。script用とstyle用は別々なので、両方エラーが出たら両方に
エラーメッセージって、怖いものじゃなくて「答えが書いてある紙」だったんですねぇ。次からグラフが消えても慌てませんっ!
その調子です。セキュリティ強化と便利ツールの両立は、面倒がらずにログを読めばちゃんと成立しますよ。なんとでもするさ。

環境メモ:WordPress(SWELLテーマ)/ConoHa WING/CSPは.htaccessで設定/Google Site Kit使用。プラグインやサーバーのヘッダー設定機能でCSPを入れている場合は、編集場所が異なるだけで考え方は同じです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

IT・セキュリティ・財務の資格を持つオールドミドル。
器用貧乏、週末は大抵疲れ気味。
漫画・アニメをこよなく愛し、週末は900ccバイクで風を切る。
おまけで大の戦国ファン
【プロフィール】
資格:IT・セキュリティ国家資格 / 財務資格保持者
趣味:バイク(900cc)/ 漫画・アニメ / 動画制作
性格:器用貧乏・熱中しては疲れる
口癖:「なんとでもするさ」

コメント

コメントする

CAPTCHA


目次