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を有効化し、サービスアカウントを作成する
この記事の目次
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(ブラウザ) |
| 日時 | date、hour、dayOfWeek、month |
メトリクス(数値指標)の種類
| カテゴリ | 主なメトリクス |
|---|---|
| セッション | sessions、bounceRate、averageSessionDuration |
| ユーザー | totalUsers、newUsers、activeUsers |
| ページビュー | screenPageViews、screenPageViewsPerSession |
| エンゲージメント | engagementRate(エンゲージ率)、engagedSessions、userEngagementDuration(平均滞在時間) |
| コンバージョン | conversions、eventCount |
SEO/AIOに特に役立つ指標の組み合わせ
SEO目的で特に重視すべき組み合わせは次の3つです。
1. ページ別エンゲージ率 × 平均滞在時間どの記事がユーザーに読まれているかを判断できます。エンゲージ率が高くても滞在時間が5秒以下の場合は、スクロールせずに離脱していることを示しており、コンテンツの質に課題があります。
2. 流入元 × セッション数sessionSourceをorganicでフィルタすることで、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を有効化する
- Google Cloud Console にアクセスし、利用するGoogleアカウントでログインする
- API管理画面から「Google Analytics Data API」を検索し、「有効にする」をクリックする
- 利用するプロジェクトが正しいことを必ず確認する(複数アカウントを使っている場合は特に注意)
よくある失敗: Googleアカウントの誤操作複数のGoogleアカウントをChromeで使い分けている場合、GCPコンソールの操作途中で意図しないアカウントに切り替わってしまうことがあります。実際にあるサイトでは、SEO用のサービスアカウントを誤って別の個人アカウント配下のプロジェクトに作成してしまい、手順をやり直すことになりました。操作開始前にURLバー付近のアカウントアイコンで「どのアカウントでログイン中か」を確認する習慣を付けることを強くおすすめします。
サービスアカウントを作成してJSONキーをダウンロードする
- GCPコンソール →「IAMと管理」→「サービスアカウント」を開く
- 「サービスアカウントを作成」をクリックし、以下を設定する
- サービスアカウント名:
ga4-cli-reader(任意) - サービスアカウントID: 自動生成されるIDを確認する
- 権限の設定(ステップ2)は省略してよい。GA4側で権限を付与する
- 作成後、サービスアカウントの詳細画面を開き「キー」タブ →「キーを追加」→「JSON」を選択してダウンロードする
- ダウンロードしたJSONファイルをプロジェクトの安全な場所に保存する
GA4管理画面でサービスアカウントに権限を付与する
重要: GCPでサービスアカウントを作成しただけでは、GA4のデータにはアクセスできません。GA4側で明示的に権限を付与する必要があります。
- GA4管理画面 にアクセスし、対象のプロパティを選択する
- 左下の「管理(歯車アイコン)」→「プロパティのアクセス管理」を開く
- 「+」→「ユーザーを追加」をクリックする
- 先ほど作成したサービスアカウントのメールアドレスを入力する
- 例:
ga4-cli-reader@your-project.iam.gserviceaccount.com - 権限を「閲覧者」に設定して「追加」をクリックする
この設定後、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を除外する
- GA4管理画面 →「データストリーム」→「タグ設定を行う」
- 「さらに表示」→「内部トラフィックの定義」
- 「作成」をクリックし、以下を入力する
- ルール名:
自社IP除外 traffic_typeの値:internal- 一致タイプ:
IPアドレスが次と等しい - 値: 確認したIPアドレスを入力
- 「保存」後、「管理」→「データフィルタ」でフィルタのステータスを「有効」に変更する
注意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 / referral や perplexity.ai / referral を検索することで把握できます。ただし、AIチャットボットがリファラー情報を送信しないケースでは「(direct) / (none)」として計測されるため、過小評価になることがあります。
\ AI活用の「次の一手」を一緒に考えませんか /
法人向けClaude Code個別指導の無料相談はこちらまとめ
GA4 Data APIとClaude Codeを連携したSEOレポート自動化の要点をまとめます。
- GCPでGA4 Data APIを有効化し、サービスアカウントを作成する(操作するGoogleアカウントを事前に確認することが重要)
- GA4管理画面でサービスアカウントに閲覧権限を付与する(このステップを忘れると403エラーが発生する)
- Pythonスクリプトで流入・エンゲージ率・AIOスコア・リライト候補の7セクションレポートを生成する
- Claude Codeのスキルとして登録し、自然言語で実行できる状態にする
- OpenClawのcronジョブで毎朝自動実行してSlackに配信する
まずGCPコンソールでGA4 Data APIを有効化し、サービスアカウントを作成するところから始めてみてください。設定さえ完了すれば、毎日の手動チェック作業が自動化されます。
SEO全体の自動化フローについては、SEO記事の完全自動生産ラインもあわせてご覧ください。
Claude Codeの導入・活用をサポートします
株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。GA4の設定手順やSEO分析スクリプトのカスタマイズ、OpenClawとの連携設定など、非エンジニアの方でも3ヶ月で業務自動化を実現できるプログラムです。「何から始めればいいかわからない」という段階からご支援いたします。





