GA4のデータをClaude Codeで取得してSEOレポートを自動生成する方法

Claude Code GA4 SEOレポート自動化のイメージ画像

GA4 Data APIとClaude Codeを連携すると、毎朝Slackに届くSEOレポートを3ステップで自動化できます。

  • 要点1: GCPでGA4 Data APIを有効化し、サービスアカウント(無料)でCLIからデータ取得が可能
  • 要点2: 流入チャネル・エンゲージ率・AIOスコア・リライト候補を含む7セクションのレポートを自動生成できる
  • 要点3: OpenClawのcronジョブで毎朝9時台にSlack配信するまで設定できる

対象: GA4のデータを手動でチェックしているSEO担当者・メディア運営者

今日やること: GCPコンソールでGA4 Data APIを有効化し、サービスアカウントを作成する

この記事の著者
川島陸

株式会社Nexa 代表取締役川島 陸

一橋大学経済学部卒業後、フォーティエンスコンサルティング株式会社(旧 株式会社クニエ)にて法人向けAI導入支援等を経験。独立後、AI系メディア運営やDify/n8nの導入支援を経て、株式会社Nexaを創業。法人向けAI研修・AI導入支援・AI関連メディア運営を手掛ける。

GA4 Data APIとClaude Codeを組み合わせると、毎朝自動でSEOレポートが生成され、Slackに届く仕組みが作れます。

「GA4の管理画面を毎日チェックしているが、どの記事をリライトすべきか判断しづらい」「データを取得してレポートにまとめる作業に時間がかかっている」という課題は、Claude Codeのスキルとして仕組み化することで解消できます。

この記事では、サービスアカウント設定でよく起きる落とし穴から、7セクションのSEOレポート自動生成、OpenClawのcronによる毎日の定期実行まで、ある実際の事例をもとに一気通貫で解説します。


GA4 Data APIで取得できるデータ

最初に「GA4 APIで何が取れるか」を整理します。SEO目的での活用範囲を把握しておくことが、設計の前提として重要です。

ディメンション(分類軸)の種類

GA4 Data APIでは、以下のような分類軸でデータを切り出せます。

カテゴリ 主なディメンション
ページ pagePath(URL)、pageTitle(タイトル)、landingPage(入口ページ)
流入元 sessionSource(参照元)、sessionMedium(媒体)、sessionCampaignName(キャンペーン)
ユーザー属性 country(国)、city(都市)、language(言語)
デバイス deviceCategory(PC/モバイル/タブレット)、browser(ブラウザ)
日時 datehourdayOfWeekmonth

メトリクス(数値指標)の種類

カテゴリ 主なメトリクス
セッション sessionsbounceRateaverageSessionDuration
ユーザー totalUsersnewUsersactiveUsers
ページビュー screenPageViewsscreenPageViewsPerSession
エンゲージメント engagementRate(エンゲージ率)、engagedSessionsuserEngagementDuration(平均滞在時間)
コンバージョン conversionseventCount

SEO/AIOに特に役立つ指標の組み合わせ

SEO目的で特に重視すべき組み合わせは次の3つです。

1. ページ別エンゲージ率 × 平均滞在時間どの記事がユーザーに読まれているかを判断できます。エンゲージ率が高くても滞在時間が5秒以下の場合は、スクロールせずに離脱していることを示しており、コンテンツの質に課題があります。

2. 流入元 × セッション数sessionSourceorganicでフィルタすることで、SEO経由の流入のみを抽出できます。またChatGPT(chatgpt.com)やPerplexity(perplexity.ai)からのリファラルを確認することで、AIチャットボット経由の流入も把握できます。

3. ページ別 × デバイスカテゴリdeviceCategoryで「desktop / mobile / tablet」に分けると、コンテンツの読まれ方の傾向が分かります。

ポイントGA4 APIでAI流入を確認した実際のメディアサイトでは、過去90日間でMicrosoft Copilotからの流入が1セッション確認できたが、ChatGPT・Perplexity・Claude・Geminiからの流入はゼロという結果でした。「AI流入は増加中」と言われますが、実態は初期段階の場合も多いです。

GSCとの比較分析については、Google Search Consoleのデータ取得をClaude Codeで自動化する方法も参考にしてください。


サービスアカウントの設定とGA4への権限付与

GA4 Data APIを使うには、GCPのサービスアカウントとGA4側の権限設定が必要です。この手順では「Googleアカウントを誤って操作する」というよくある落とし穴があるため、注意点を含めて解説します。

GCPでGA4 Data APIを有効化する

  1. Google Cloud Console にアクセスし、利用するGoogleアカウントでログインする
  2. API管理画面から「Google Analytics Data API」を検索し、「有効にする」をクリックする
  3. 利用するプロジェクトが正しいことを必ず確認する(複数アカウントを使っている場合は特に注意

よくある失敗: Googleアカウントの誤操作複数のGoogleアカウントをChromeで使い分けている場合、GCPコンソールの操作途中で意図しないアカウントに切り替わってしまうことがあります。実際にあるサイトでは、SEO用のサービスアカウントを誤って別の個人アカウント配下のプロジェクトに作成してしまい、手順をやり直すことになりました。操作開始前にURLバー付近のアカウントアイコンで「どのアカウントでログイン中か」を確認する習慣を付けることを強くおすすめします。

サービスアカウントを作成してJSONキーをダウンロードする

  1. GCPコンソール →「IAMと管理」→「サービスアカウント」を開く
  2. 「サービスアカウントを作成」をクリックし、以下を設定する
  3. サービスアカウント名: ga4-cli-reader(任意)
  4. サービスアカウントID: 自動生成されるIDを確認する
  5. 権限の設定(ステップ2)は省略してよい。GA4側で権限を付与する
  6. 作成後、サービスアカウントの詳細画面を開き「キー」タブ →「キーを追加」→「JSON」を選択してダウンロードする
  7. ダウンロードしたJSONファイルをプロジェクトの安全な場所に保存する

GA4管理画面でサービスアカウントに権限を付与する

重要: GCPでサービスアカウントを作成しただけでは、GA4のデータにはアクセスできません。GA4側で明示的に権限を付与する必要があります。

  1. GA4管理画面 にアクセスし、対象のプロパティを選択する
  2. 左下の「管理(歯車アイコン)」→「プロパティのアクセス管理」を開く
  3. 「+」→「ユーザーを追加」をクリックする
  4. 先ほど作成したサービスアカウントのメールアドレスを入力する
  5. 例: ga4-cli-reader@your-project.iam.gserviceaccount.com
  6. 権限を「閲覧者」に設定して「追加」をクリックする

この設定後、Pythonスクリプトからは ga4-cli-reader@your-project.iam.gserviceaccount.com のメールアドレスを使ってGA4のデータを取得できるようになります。


\ Claude Codeの導入、何から始めればいいかわかります /

法人向けClaude Code個別指導の無料相談はこちら

PythonスクリプトでGA4データを取得する

必要なライブラリのインストールと認証設定

# venv作成(推奨)python3 -m venv /tmp/ga4-venvsource /tmp/ga4-venv/bin/activate# GA4 Data APIの公式ライブラリをインストールpip install google-analytics-data

認証はJSONキーを環境変数で指定する方法が最もシンプルです。

export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your-service-account.json"

または、スクリプト内で直接パスを指定することもできます。

from google.analytics.data_v1beta import BetaAnalyticsDataClientfrom google.analytics.data_v1beta.types import RunReportRequest, DateRange, Metric, Dimensionimport osos.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/path/to/your-service-account.json"PROPERTY_ID = "properties/YOUR_PROPERTY_ID"  # GA4のプロパティID(数字のみ)client = BetaAnalyticsDataClient()

流入チャネル別・デバイス別・ページ別レポートの取得

以下は、SEOレポートのコアとなるデータを取得するコード例です。

def get_session_by_channel(days=30):    """流入チャネル別セッション数を取得"""    request = RunReportRequest(        property=PROPERTY_ID,        date_ranges=[DateRange(start_date=f"{days}daysAgo", end_date="today")],        dimensions=[Dimension(name="sessionDefaultChannelGrouping")],        metrics=[            Metric(name="sessions"),            Metric(name="engagementRate"),            Metric(name="userEngagementDuration"),        ],        order_bys=[{"metric": {"metric_name": "sessions"}, "desc": True}],    )    return client.run_report(request)def get_page_performance(days=30):    """ページ別パフォーマンスを取得"""    request = RunReportRequest(        property=PROPERTY_ID,        date_ranges=[DateRange(start_date=f"{days}daysAgo", end_date="today")],        dimensions=[Dimension(name="pagePath")],        metrics=[            Metric(name="sessions"),            Metric(name="screenPageViews"),            Metric(name="engagementRate"),            Metric(name="userEngagementDuration"),        ],        order_bys=[{"metric": {"metric_name": "sessions"}, "desc": True}],        limit=20,    )    return client.run_report(request)

AIOスコア算出とリライト候補の自動抽出

実際のメディアサイトで使われているAIOスコアの算出方法は次のとおりです。

def calc_aio_score(sessions, engagement_rate, avg_duration_sec):    """AIOスコア算出 (セッション × エンゲージ率 × 滞在時間係数)"""    duration_factor = min(avg_duration_sec / 60, 10)  # 最大10分でキャップ    return round(sessions * float(engagement_rate) * duration_factor, 1)

このスコアが高いページは、ユーザーが長く滞在してエンゲージしているコンテンツです。AI Overviewへの引用対象になりやすい傾向があります。

リライト候補の自動抽出ロジック:

def detect_rewrite_candidates(page_data):    """リライト候補を自動抽出"""    candidates = []    for page in page_data:        sessions = int(page["sessions"])        engagement_rate = float(page["engagementRate"])        avg_duration = float(page["userEngagementDuration"])        # 条件1: セッションはあるがエンゲージ率が40%以下        if sessions >= 5 and engagement_rate < 0.4:            candidates.append({"path": page["pagePath"], "reason": "低エンゲージ率"})        # 条件2: 滞在時間が10秒以下(カテゴリページ除く)        if sessions >= 3 and avg_duration < 10 and not page["pagePath"].startswith("/category/"):            candidates.append({"path": page["pagePath"], "reason": "極端に短い滞在時間"})    return candidates

このような7セクション構成(流入チャネル・デバイス・月別推移・全流入TOP・オーガニック流入・AIOスコア・リライト候補)のレポートを出力するスクリプトは、Claude Codeに「SEO分析に使えるGA4レポートスクリプトを作って」と指示することで、自分のプロパティIDとJSONキーのパスを渡すだけで自動生成してもらえます。

Claude Codeの導入や活用方法について、個別にご相談いただけます。「どの機能から使えばいいか」「自社業務への適用方法を知りたい」といった段階から対応しています。

法人向けClaude Code個別指導の無料相談はこちら|まずはお困りごとをプロに相談


Claude Codeのスキルとして組み込む

Pythonスクリプトが完成したら、Claude Codeのスキルとして登録することで「GA4レポートを実行して」という自然言語での指示だけで即座にレポートが生成できるようになります。

SKILL.mdの作成とスキル登録

スキルは ~/.claude/skills/[スキル名]/SKILL.md というファイルで定義します。

---name: ga4-seo-reportdescription: GA4データを取得してSEO/AIO分析レポートを生成するスキル。  「GA4レポート」「GA4を確認して」「SEOレポートを実行して」などのリクエストでトリガー。---# GA4 SEO/AIOレポート## 設定情報| 項目 | 値 ||------|-----|| GA4プロパティID | `properties/XXXXXXXXX` || スクリプト | `/path/to/ga4_seo_report.py` || サービスアカウントキー | `/path/to/service-account.json` || レポート保存先 | `/path/to/ga4-reports/` |## 実行方法ユーザーから期間の指定がなければ30日(デフォルト)で実行する。```bashpython3 /path/to/ga4_seo_report.py --days 30 --output /path/to/ga4-reports/
### 「GA4レポートを実行して」で即座にレポートを取得するスキル登録後は、Claude Codeのチャット上で次のように指示するだけです。- 「GA4レポートを実行して」→ 30日間のデフォルトレポートを生成- 「直近7日間のGA4レポートを出して」→ `--days 7` で実行- 「過去90日のリライト候補を見せて」→ 長期データで優先度順に表示あるメディアサイトでは、このスキルを登録した後に「先月よりセッションが増えた記事はどれ?」という質問を投げると、Claude Codeがスクリプトを実行して30日間と60日間のデータを比較したレポートを自動で生成してくれるようになりました。---## OpenClawのcronジョブで毎日自動実行するClaude CodeをSlackに常駐させるOpenClawを使うと、GA4レポートを毎朝自動で実行してSlackに投稿する仕組みが作れます。### jobs.jsonへのジョブ追加OpenClawのcronジョブは `~/.openclaw/cron/jobs.json` で管理します。```json{  "jobs": [    {      "name": "ga4-seo-report",      "schedule": "45 9 * * *",      "enabled": true,      "skill": "~/.claude/skills/ga4-seo-report/SKILL.md",      "prompt": "GA4の過去30日間レポートを生成して、流入チャネル・AIOスコアTOP5・リライト候補をまとめてSlackに投稿してください",      "channel": "#seo-reports"    }  ]}
設定項目 説明
schedule cron書式(45 9 * * * = 毎日9:45実行)
enabled true で有効。false にするとスキップ
skill 実行するスキルファイルのパス
prompt Claude Codeへの指示内容
channel Slack配信先のチャンネル名またはID

テスト実行とSlack配信の確認

ジョブを即時実行してテストするには、nextRunAtMs を現在時刻+30秒(ミリ秒)に設定します。OpenClawゲートウェイが自動検知して実行します。

# 現在時刻のミリ秒を確認node -e "console.log(Date.now() + 30000)"# jobs.jsonの nextRunAtMs を上記の値に更新

Slackにレポートが届いたら設定完了です。実際に設定したメディアサイトでは、毎朝9:45にSlackの専用チャンネルに以下のような形でレポートが届くようになりました。

📊 GA4レポート(過去30日間)総セッション: 213 / PV: 993 / 新規ユーザー: 109オーガニック流入率: 16.9%(36セッション、エンゲージ率67.9%)🏆 AIOスコアTOP31位 /koudengaeshi-souba-shinamono-manner/ (33.9)2位 /sougisha-hikaku-osusume/ (28.4)3位 /ending-note-kakikata/ (19.7)⚠️ リライト候補(3件)- /category/souzoku/ 滞在時間5秒- /sample-page/ エンゲージ率0%

\ 業務自動化のお悩み、プロが30分で整理します /

法人向けClaude Code個別指導の無料相談はこちら

内部トラフィックの除外設定(精度向上のために)

GA4のレポートで「Direct(直接)流入が異常に多い」「自社のアクセスが含まれていそう」と感じる場合は、IPアドレスによる内部トラフィック除外を設定することで精度が大幅に向上します。

現在のIPアドレスを確認する

curl -s https://ifconfig.me# 例: 59.132.68.130

GA4の「内部トラフィックの定義」でIPを除外する

  1. GA4管理画面 →「データストリーム」→「タグ設定を行う」
  2. 「さらに表示」→「内部トラフィックの定義」
  3. 「作成」をクリックし、以下を入力する
  4. ルール名: 自社IP除外
  5. traffic_type の値: internal
  6. 一致タイプ: IPアドレスが次と等しい
  7. 値: 確認したIPアドレスを入力
  8. 「保存」後、「管理」→「データフィルタ」でフィルタのステータスを「有効」に変更する

注意DHCP環境(IPアドレスが定期的に変わる場合)は、IPが変わるたびに設定の更新が必要です。また設定の反映には最大24〜48時間かかります。


よくある質問

Q. GA4 Data APIは無料で使えますか?

はい、GA4 Data APIは無料で利用できます。ただし、1日あたり・1分あたりのリクエスト数に上限があります(1日あたりの標準上限は約20万リクエスト)。SEOレポートを毎日1〜2回生成する程度であれば、無料枠で十分対応できます。

Q. Pythonの知識がなくてもClaude Codeで設定できますか?

Claude Codeに「GA4 Data APIで過去30日のページ別セッション数とエンゲージ率を取得するスクリプトを作って」と指示するだけで、Pythonスクリプトを自動生成してくれます。スクリプトのカスタマイズや実行時のエラー修正も自然言語で依頼できるため、プログラミングの知識がなくても運用できます。

Q. 自分のアクセスがGA4データに含まれている場合はどうすればよいですか?

この記事の「内部トラフィックの除外設定」セクションで解説した手順でIPアドレスを除外してください。特にサイト公開直後や記事を書いた直後は確認作業で自分のアクセスが多く混入するため、除外設定は早めに実施することをおすすめします。

Q. AI経由(ChatGPT・Perplexity等)の流入はGA4で確認できますか?

確認できます。GA4の「集客」→「トラフィック獲得」で「セッションのソース/メディア」を確認し、chatgpt.com / referralperplexity.ai / referral を検索することで把握できます。ただし、AIチャットボットがリファラー情報を送信しないケースでは「(direct) / (none)」として計測されるため、過小評価になることがあります。


\ AI活用の「次の一手」を一緒に考えませんか /

法人向けClaude Code個別指導の無料相談はこちら

まとめ

GA4 Data APIとClaude Codeを連携したSEOレポート自動化の要点をまとめます。

  1. GCPでGA4 Data APIを有効化し、サービスアカウントを作成する(操作するGoogleアカウントを事前に確認することが重要)
  2. GA4管理画面でサービスアカウントに閲覧権限を付与する(このステップを忘れると403エラーが発生する)
  3. Pythonスクリプトで流入・エンゲージ率・AIOスコア・リライト候補の7セクションレポートを生成する
  4. Claude Codeのスキルとして登録し、自然言語で実行できる状態にする
  5. OpenClawのcronジョブで毎朝自動実行してSlackに配信する

まずGCPコンソールでGA4 Data APIを有効化し、サービスアカウントを作成するところから始めてみてください。設定さえ完了すれば、毎日の手動チェック作業が自動化されます。

SEO全体の自動化フローについては、SEO記事の完全自動生産ラインもあわせてご覧ください。


Claude Codeの導入・活用をサポートします

株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。GA4の設定手順やSEO分析スクリプトのカスタマイズ、OpenClawとの連携設定など、非エンジニアの方でも3ヶ月で業務自動化を実現できるプログラムです。「何から始めればいいかわからない」という段階からご支援いたします。

法人向けClaude Code個別指導の無料相談はこちら|まずはお困りごとをプロに相談



関連記事

AIの力で、ビジネスを次のステージへ

まずはお気軽にご相談ください。貴社に最適なAI活用プランをご提案します。

Claude Codeのプロに無料相談 30秒で日程調整完了