WordPress の GA4 を GTM 経由に移行するとは、テーマやプラグインで直接 gtag.js を読み込むのをやめ、Google Tag Manager(GTM)のコンテナタグだけを設置して GA4 の計測設定を GTM 管理画面側で行う構成に切り替える作業のことです。タグ追加や修正のたびに PHP を編集する必要がなくなり、AdSense・Clarity・広告タグの管理も 1 箇所に集約できます。
この記事では、すでに GA4(gtag.js)を直接埋め込んで運用しているサイトを GTM 経由構成に切り替える手順と、移行時に見落としやすいポイントを解説します。当サイト(CodeQuest)も同じ構成で運用しており、実際に切り替えた際の経験を踏まえて執筆しています。
GA4 を GTM 経由に移行するメリット
GA4 を直接埋め込む方式から GTM 経由に切り替えるメリットは大きく 3 つあります。それぞれ運用負担と計測の柔軟性の両方に効いてきます。
1. タグの追加・修正で PHP を触らなくて済む
イベントトラッキング・コンバージョン計測・カスタムディメンションを追加するたびにテーマファイルを編集していると、ちょっとした調整でも本番デプロイが必要になります。GTM 経由なら GTM 管理画面で完結し、コードのレビュー・デプロイ・キャッシュ更新といった一連の作業をスキップできます。
2. 広告・解析タグの管理を 1 箇所に集約できる
WordPress サイトでは、GA4 のほかに Microsoft Clarity・Google AdSense・アフィリエイト計測タグなど、複数の外部タグを扱うのが一般的です。GTM 経由構成にすると、すべてのタグの発火タイミング・ページ条件・除外設定を 1 つのコンテナで管理できます。タグ間の競合や読み込み順の問題もデバッグしやすくなります。
3. プレビュー&デバッグが GTM 内で完結する
GTM の「プレビューモード(Tag Assistant)」を使うと、本番にデプロイする前に各タグが想定通り発火するかをブラウザ上で確認できます。GA4 のリアルタイムレポートだけに頼っていた頃と比べ、設定ミスの検知が圧倒的に早くなります。
移行前後の構成を整理する
具体的な手順に入る前に、移行前と移行後でブラウザに何が読み込まれるかを整理しておきます。構成図として頭に入れておくと、手順の意味が理解しやすくなります。
移行前(GA4 を直接埋め込む構成)
- テーマ(functions.php / header.php など)から
gtag.jsを読み込む - GA4 の測定 ID をテーマ側で保持し、初期化スクリプトをインライン出力する
- イベント計測やオプトアウト処理もテーマ側のコードで実装する
移行後(GTM 経由構成)
- テーマからは GTM のコンテナタグ(GTM-XXXXXXX)だけを読み込む
- GA4 設定・イベント・コンバージョンは GTM 管理画面でタグとして登録する
- テーマからは
gtag.jsの直接読み込みと GA4 関連コードをすべて削除する
ポイントは「GA4 を直接読み込む処理をテーマから完全に消す」ことです。両方残すと二重計測になり、GA4 のセッション数・PV が実態の倍前後になることがあります。
GA4 から GTM 経由への移行手順 5 ステップ
実際の移行作業は次の 5 ステップで進めます。順番を守ることで「二重計測」「計測停止」のリスクを避けられます。
STEP 1. GTM コンテナを作成して ID を取得する
Google Tag Manager(tagmanager.google.com)にアクセスし、サイト用のコンテナを新規作成します。プラットフォームは「ウェブ」を選択し、発行されるコンテナ ID(GTM-XXXXXXX 形式)をメモしておきます。
STEP 2. GTM 内で GA4 設定タグを作成する
GTM の管理画面で「タグ > 新規」から「Google アナリティクス:GA4 設定」タグを作成します。GA4 プロパティの測定 ID(G-XXXXXXX 形式)を入力し、トリガーは「All Pages」を選択します。これでサイト全ページで GA4 がページビューを記録するようになります。
この時点では公開せず、ワークスペースに保存した状態のままにします。テーマ側のコード変更と公開タイミングを揃えるためです。
STEP 3. テーマから gtag.js の読み込みを停止する
テーマの functions.php・header.php・プラグイン設定などに記述されている、GA4 の直接読み込みコードをすべて停止します。具体的には次のような要素が対象です。
https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXを読み込む<script>タグgtag('config', 'G-XXXXXXX')を呼び出している初期化コード- SEO プラグインや解析プラグインで設定している GA4 測定 ID(例: All in One SEO の Google Analytics 設定欄)
このステップを忘れたまま次の STEP 4 に進むと、GA4 が「直接埋め込み」と「GTM 経由」の両方から発火し、PV が二重計上されてしまいます。コードからの削除とプラグイン設定の解除、両方を確認してください。
STEP 4. GTM コンテナタグを head 上部に設置する
GTM 管理画面の「管理 > Google タグ マネージャーをインストール」で表示されるスニペットを、サイトの <head> 内に貼り付けます。Google は「<head> 内の可能な限り上部」への設置を推奨しています。設置位置の理由とパフォーマンスへの影響については後述の関連記事で詳しく解説しています。
WordPress テーマで設置する場合は、header.php の <head> 開始タグ直後・wp_head() 呼び出しよりも前に配置するのが望ましいです。GTM スニペットは Google 公式が配布する標準形式で、自分で書き換える必要はありません。
あわせて <body> 直後に表示する <noscript> 用スニペットも忘れず設置します。JavaScript 無効環境でのフォールバック計測に使われます。
STEP 5. プレビュー&リアルタイムレポートで疎通確認する
移行作業の最後は必ず疎通確認です。次の 2 段階で検証します。
- GTM プレビューモードでサイトを開き、GA4 設定タグが「Tags Fired(発火済み)」に入っているか確認
- GA4 のリアルタイムレポートで自分のアクセスがカウントされ、かつ二重計上されていない(PV が 1 ページ表示につき 1 件で増える)ことを確認
両方確認できたら、GTM 管理画面の「公開」ボタンでバージョンを公開して移行完了です。
実装時の落とし穴(実体験ベース)
当サイトでも同じ移行を行いましたが、移行後しばらく気付かなかった点や、事前にチェックしておきたかったポイントがいくつかあります。同じ罠を避けるために共有しておきます。
ハードコードされた GA4 測定 ID の管理場所が変わる
移行前のテーマでは GA4 測定 ID を定数や設定ファイルで保持しているケースが多いはずです。GTM 経由に切り替えた後、その定数を残したままにすると「使われていないコードが残り続ける」状態になります。移行と同時に削除してリポジトリをクリーンに保つのが安全です。
async 属性付与などの周辺処理も不要になる
gtag.js の読み込みをパフォーマンス目的で async / defer 付与していた場合、その付与処理(WordPress なら script_loader_tag フィルター等)も連動して不要になります。GTM スニペット自体は内部で非同期読み込みを行うため、改めて async を付ける必要はありません。残しておくと「実体のないハンドル名を参照する古い処理」になるので、こちらも合わせて整理します。
オプトアウト機構は GTM 側で再設計する
テーマ側で window['ga-disable-G-XXXXXXX'] を切り替えるようなオプトアウト処理を組んでいた場合、GTM 経由構成では別アプローチが必要になります。具体的には GTM 内で「同意モード(Consent Mode)」を使うか、特定の dataLayer 変数や localStorage 値をトリガー除外条件として GA4 設定タグに紐付ける形に書き換えます。日本国内向けサイトでも、Cookie 同意バナーを設置しているケースでは要件として残るため、移行のついでに見直すと良いタイミングです。
よくある質問(FAQ)
Q. GTM と GA4 はどちらを先に導入すべきですか?
GA4 プロパティが先で、GTM コンテナはその後で問題ありません。GTM 内で GA4 設定タグを作る際に「測定 ID(G-XXXXXXX)」を入力する必要があるため、先に GA4 プロパティを作成し測定 ID を発行しておくと、GTM 設定がスムーズに進みます。
Q. GA4 の直接タグと GTM を両方入れたら二重計測になりますか?
はい、二重計測になります。GA4 の測定 ID が「直接 gtag.js から」と「GTM 内の GA4 設定タグから」の 2 ルートで発火するため、ページビューが 2 倍前後にカウントされます。GTM 経由に移行する際は、必ずテーマや SEO プラグイン側の GA4 直接埋め込みを停止してください。
Q. GTM 経由にするとページ速度は遅くなりますか?
GTM スニペット自体は数 KB 程度で、非同期読み込みのためレンダリングをブロックしません。実際の速度影響は GTM 内で発火させるタグ数と内容次第です。GA4 単体だけなら直接埋め込みと差はほぼなく、複数タグを管理するなら GTM 経由のほうがコード量が抑えられる傾向にあります。設置位置の最適化についてはGTM タグを head 上部に設置するべき理由を参照してください。
Q. オプトアウト(計測拒否)はどう実装すればよいですか?
GTM 経由構成では、Google 公式の「同意モード(Consent Mode v2)」を使うのが標準です。同意モードに切り替えずに済ませたい場合は、Cookie 同意バナーなどから dataLayer に変数を push し、GA4 設定タグのトリガーに「変数が true のときは発火しない」という除外条件を加える方法もあります。
Q. WordPress プラグインで GTM を入れるのと手動設置はどちらがよいですか?
テーマを自分で編集できる場合は手動設置を推奨します。プラグイン経由だと GTM スニペットの設置位置が固定され、推奨される「<head> 内の上部」へ正確に配置できないケースがあるためです。テーマを編集できない・触りたくない場合は「GTM4WP」など信頼できるプラグインを選び、設置位置の設定オプションを確認してから導入してください。
まとめ
GA4 を直接埋め込みから GTM 経由構成へ切り替える要点を整理します。
- GA4 を GTM 経由にすると、PHP を触らずにタグを追加・修正できる — 運用負担が大きく下がる
- 移行は 5 ステップ — コンテナ作成 → GA4 設定タグ → 既存タグ停止 → GTM タグ設置 → 疎通確認
- 二重計測を避けるため、テーマ側の gtag.js は必ず停止 — プラグイン設定の解除も忘れず確認
- GTM タグは
<head>内の可能な限り上部に設置する(Google 公式推奨) - ハードコードしていた測定 ID・周辺処理・オプトアウト機構は移行と同時に整理する
移行後に「自分のサイトで GA4 が正しく動いているか」「SEO 計測周りに問題がないか」を一括チェックしたい場合は、SEO 診断ツールで状態を確認できます。
関連記事
▶ GTM タグを head 上部に設置するべき理由とパフォーマンス影響
▶ GA4 直接埋め込み vs GTM 経由 — メリット・デメリット比較
