GSCとGA4のデータをAIに取らせる|診断の土台をライブで供給する手順

5 min

散らかったサイトの診断を始めるとき、最初に用意するのは Search Console(GSC)と Google Analytics 4(GA4)のデータです。管理画面を開いて CSV をダウンロードして AI に渡す運用でも始められます。ただし、その運用では毎回手で取り直すことになり、しばらくすると AI が古い CSV を根拠に提案を続けます。

結論から書きます。GSC と GA4 のデータは、AI が自分で API から取れる状態にします。管理画面からの手動エクスポートではなく、スクリプト 1 本でその場の最新データを取る形にすると、診断の土台が常にライブになります。

  • GSC からは「ページ」「クエリ」「ページ×クエリ」の3種類を取る
  • GA4 からは月別のセッション・PV・ユーザー数を取る
  • GSC は直近3日分のデータが未確定なので、終了日を3日前にする
  • 認証ファイルの置き場所をプロジェクトごとに分けると、片方が壊れたときに両方が止まる

この記事は、散らかったサイトを AI で作り変えるマニュアルの「診断」の最初の作業です。診断のまとめ記事で使う全データが、ここでそろいます。


この作業で決まること

この作業が終わると、AI が診断のたびにライブのデータを取れる状態になります。人が管理画面を開いてCSVをダウンロードする手順は、以降の作業からなくなります。

ライブで取れるのは次の4つです。

  • GSC のページ別データ(URL・クリック・表示回数・CTR・掲載順位)
  • GSC のクエリ別データ(検索語ごとの実績)
  • GSC のページ×クエリの2次元データ(同じクエリにURLが複数出ていないかを1列で判定できる)
  • GA4 の月別データ(PV・セッション・ユーザー・エンゲージ)

ライブのデータが無いと何が起きるか。AI は前回取った CSV を根拠にします。1 週間前の順位で「この記事を直す」と提案し、すでに修正済みの記事をもう一度直そうとします。ライブに差し替えると、提案の対象が常に今のサイトになり、同じ記事を短い間に何度も触る失敗を防げます。

よくある失敗:Looker Studio や管理画面の画像を AI に渡して診断させること。画像は数値を正確に読めず、絞り込みも AI 側ではできません。CSV として API から取るほうが安定します。


前提:この記事の前に必要なもの

  • AIに渡す4つの前提がファイルとして用意されていること
  • Python が動く環境と、GSC・GA4 の所有権を持った Google アカウント
  • Google Cloud Console で OAuth クライアント ID(デスクトップアプリ)を作れること
  • 自分のサイトが GSC に登録済みで、GA4 のプロパティ ID が分かること

GSC と GA4 の仕様や設定方法は Search Console ヘルプと Google Analytics ヘルプの記載に従います。


AIに渡すもの

AI に書かせるのは、次の2本のスクリプトです。

  1. GSC 取得スクリプト:OAuth のデスクトップフローで認証し、「ページ」「クエリ」「ページ×クエリ」の CSV を data/ 以下に保存する
  2. GA4 取得スクリプト:GSC と同じ OAuth クライアント ID を使い、月別の指標を CSV に保存する

AI には次の3つを渡します。

  • サイトの URL と GA4 のプロパティ ID:GSC は末尾のスラッシュまで含めて正確に書く
  • 認証ファイルの置き場所:OAuth クライアントの JSON と、保存されるトークンの保存先
  • 保存ファイル名の規約:以降のスクリプトが読む名前を固定する(例:gsc_28days_pages.csv、gsc_28days_page_query.csv、ga4_monthly.csv)

ファイル名を固定する理由は、診断・採点・リライトの各スクリプトがこの名前で読みに来るからです。名前が揺れると、別のスクリプトが「ファイルが無い」で止まります。


手順

  1. Google Cloud Console で OAuth クライアント ID を作る

種類は「デスクトップアプリ」。ダウンロードした JSON を、認証用の共通フォルダに置きます。わたしの構成では、プロジェクトの外側に shared/credentials/ を切り、そこに gsc_oauth_credentials.json を1つだけ置いています。

  1. GSC と GA4 のそれぞれで、Google アカウントに読み取り権限があることを確認する

GA4 側は、Site Kit か管理画面でプロパティ ID(数字の文字列)を控えておきます。

  1. GSC 取得スクリプトを AI に書かせる

認証は OAuth デスクトップフロー、トークンは別ファイル(例:gsc_token.json)に保存して以降は自動更新。取得期間は「今日の3日前」を終了日にして、28日間と16ヶ月間の2本を取ります。GSC は直近3日分が未確定なので、3日前を終了日にします。

  1. ページ×クエリの2次元データも同時に取る

dimensions を ["page","query"] にして取ります。1 ページで 25,000 行の上限があるので、ページネーションで startRow を進めて最後まで取り切ります。これがあると、1クエリに対して自分のURLが2本以上出ているかどうかを CSV の1列で判定できます。

  1. GA4 取得スクリプトを AI に書かせる

認証は GSC と同じクライアント ID を使い、スコープだけ analytics.readonly に差し替えます。トークンファイルは GSC と別の名前(例:ga4_token.json)にします。dimensions は yearMonth、metrics は sessions / screenPageViews / activeUsers / newUsers / engagedSessions / averageSessionDuration を取ります。

  1. 初回だけブラウザで認証する

両スクリプトを 1 回ずつ実行し、ブラウザでログインしてトークンを保存します。2 回目以降は、リフレッシュトークンで自動更新されるので操作は要りません。

  1. 出力ファイルを AI の読み取り対象に登録する

AI が毎回最初に読むファイル(Claude Code なら CLAUDE.md)に、CSV の保存先を書きます。以降は「GSC を見て」で足ります。


完了条件

  • ☐ python3 scripts/gsc_api.py と python3 scripts/ga4_api.py が、認証を聞かずに実行できる
  • ☐ data/ に GSC の 28 日ページ・クエリ・ページ×クエリの3種の CSV が保存されている
  • ☐ data/ に GA4 の月別 CSV が保存されている
  • ☐ GSC の終了日が、今日の3日前になっている
  • ☐ 認証ファイルの置き場所が、プロジェクトの外側で一元化されている
  • ☐ CSV のファイル名が固定され、以降のスクリプトがこの名前で読みに行く

実際に起きた失敗

認証ファイルの参照先がずれて、GSC が5週間、GA4 が67日間取れていなかった

わたしは自分のサイトを複数持っていて、プロジェクトごとに取得スクリプトを置いています。あるとき、認証用の共有フォルダを別の場所に移しました。片方のプロジェクトは参照先を新しいパスに直したのですが、もう1本の GSC 取得スクリプトは旧パスのままになっていました。

結果、GSC のデータ取得が5週間止まりました。失敗したのではなく、トークンが切れた時点から静かに動かなくなっていたので、画面上はしばらく気付きません。古い CSV を使って AI が診断を続けていました。

同じドリフトは GA4 側でも起きました。GSC は直したのに、GA4 の取得スクリプトは旧パスのままで、67日間データが更新されていませんでした。

対策は2つです。

  • 認証ファイルの置き場所は、プロジェクトの外側で一元化する。プロジェクトごとに credentials を複製しない。
  • データの最終更新日を、取得直後に出力する。取得スクリプトが日付のサマリを出し、翌日のレビューが「◯日前のデータ」と認識できるようにする。無言で止まるのが一番危ない。

直近3日分のデータで順位が揺れて見える

GSC は直近3日分のデータが未確定で、徐々に数値が増えていきます。終了日を「今日」にすると、同じクエリの順位や表示回数が日によって動いて見え、AI が「掲載順位が下がった」と誤って判定しやすくなります。

終了日を「今日の3日前」に固定すると、順位の見かけ上の揺れが消えます。取得スクリプトでは end = today - 3日 を既定にして、--start と --end を手で渡したときだけ上書きできるようにしています。この挙動は Search Console ヘルプに書かれています。管理画面でも同じ扱いです。


よくある質問

Q. サービスアカウントではなく、OAuth デスクトップフローを使うのはなぜですか?
A. 自分のサイトを自分の Google アカウントで運用しているので、デスクトップフローのほうが設定が少なくて済みます。初回だけブラウザでログインすると、以降はリフレッシュトークンで自動更新されます。チーム運用でサービスアカウントが必要な場合は、GSC のユーザー追加と GA4 のプロパティ権限の追加が別で要ります。

Q. GSC の16ヶ月データは毎回取るべきですか?
A. 毎日は要りません。28日データは日次で取り、16ヶ月データは週に1回で足ります。16ヶ月は Google が返す上限なので、長期の傾向を見るときの材料になります。

Q. 直近3日分を無理に取りたいときはどうしますか?
A. 取れますが、確定していない数値なので、判断の根拠には使いません。順位の変動を眺めるだけなら差し支えありませんが、リライト対象の判定や統合の判断には、確定後のデータを使います。


関連記事

次の作業

ヒガシーサー

ヒガシーサー

沖縄で個人事業を複数運営。AIツール・SaaS・ガジェットを自分の運用パイプラインに実際に組み込み、動いたこと・失敗したことを一次体験のまま記録しています。

カテゴリー:
関連記事