Search Console APIで検索キーワード取得

AI・自動化

※本記事はアフィリエイト広告(PR)を含みます

この記事では、Google Search Console(サチコ)に集まった「どんなキーワードで自分のブログが表示・クリックされたか」を、Pythonで自動取得してCSVに書き出す手順を解説します。所要時間は約20分。必要なものは、Python環境・Googleアカウント・Search Consoleに登録済みのブログの3つです。

画面をポチポチしてCSVダウンロードするのも良いけど、APIにすると「毎週自動でキーワードを記録」まで一気にいけるよ。まずは1回動かすのが目標!

全体の流れ(3ステップ)

やることは大きく3つです。1がいちばん手間で、ここさえ越えればコードは10行ほどです。

  1. Google CloudでSearch Console APIを有効化し、サービスアカウントの鍵(JSON)を作る
  2. そのサービスアカウントを、Search Console側で「ユーザー」として追加する
  3. Pythonで検索データを取得し、CSVに保存する

ステップ1:APIの有効化とサービスアカウント作成

1-1. プロジェクトを用意する

Google Cloud Console を開き、画面上部のプロジェクト選択から「新しいプロジェクト」を作成します(既存のものがあれば流用でOK)。

1-2. Search Console APIを有効化する

左メニューの「APIとサービス」→「ライブラリ」で Search Console API を検索し、**「有効にする」**を押します。ここを忘れると後で SERVICE_DISABLED エラーになります。

[画像: ライブラリでSearch Console APIを有効化する画面]

1-3. サービスアカウントと鍵を作る

「APIとサービス」→「認証情報」→「認証情報を作成」→「サービスアカウント」を選び、名前を付けて作成します。作成後、そのサービスアカウントを開き、「キー」タブ→「鍵を追加」→「新しい鍵を作成」→JSONを選ぶと、鍵ファイルがダウンロードされます。

このJSONを作業フォルダに service_account.json として置いておきます。

JSONの中に書いてある `client_email`(◯◯@◯◯.iam.gserviceaccount.com)は次のステップで使うから、開いてコピーしておくとスムーズだよ。この鍵は絶対に公開しないでね。

ステップ2:Search Consoleにサービスアカウントを追加する

ここが最初にハマりやすいポイントです。サービスアカウントは「別の利用者」なので、あなたのSearch Consoleに招待しないとデータを見られません。

  1. Search Console を開き、対象のプロパティを選ぶ
  2. 左下の**「設定」→「ユーザーと権限」**を開く
  3. 右上の「ユーザーを追加」を押す
  4. メールアドレス欄に、先ほどの client_email...iam.gserviceaccount.com)を貼り付ける
  5. 権限は**「制限付き」で十分**(データの読み取りだけならこれでOK)

[画像: ユーザーと権限にサービスアカウントを追加する画面]

ステップ3:Pythonでデータを取得する

3-1. ライブラリを入れる

ターミナルで次を実行します。

pip install google-api-python-client google-auth

3-2. キーワードを取得するコード

gsc.py として保存します。SITE_URL は自分のプロパティに合わせて書き換えてください。

  • ドメインプロパティの場合:sc-domain:example.com
  • URLプレフィックスの場合:https://example.com/(末尾のスラッシュまで正確に)
from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
KEY_FILE = 'service_account.json'
SITE_URL = 'sc-domain:example.com'  # 自分のプロパティに合わせて変更

creds = service_account.Credentials.from_service_account_file(
    KEY_FILE, scopes=SCOPES
)
service = build('searchconsole', 'v1', credentials=creds)

request = {
    'startDate': '2026-06-01',
    'endDate': '2026-06-30',
    'dimensions': ['query'],   # キーワード単位で集計
    'rowLimit': 100,           # 上位100件
}

response = service.searchanalytics().query(
    siteUrl=SITE_URL, body=request
).execute()

for row in response.get('rows', []):
    keyword = row['keys'][0]
    print(keyword, row['clicks'], row['impressions'],
          round(row['ctr'] * 100, 1), round(row['position'], 1))

dimensions['query'] にするとキーワード単位、['page'] にするとページ単位で集計できます。両方見たいときは ['query', 'page'] のように並べます。

3-3. CSVに保存する

表示するだけでなく、そのままCSVに落とすとExcelやスプレッドシートで並べ替えできて便利です。上のコードの末尾(for の代わり)を次に差し替えます。

import csv

rows = response.get('rows', [])
with open('gsc_keywords.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerow(['キーワード', 'クリック', '表示回数', 'CTR(%)', '平均掲載順位'])
    for row in rows:
        writer.writerow([
            row['keys'][0],
            row['clicks'],
            row['impressions'],
            round(row['ctr'] * 100, 1),
            round(row['position'], 1),
        ])
print(f'{len(rows)}件を保存しました')

encoding='utf-8-sig' にしておくと、WindowsでExcelから開いても文字化けしません。実際に試したところ、私の環境(Windows 11 + Python 3.12)では普通の utf-8 だとExcelで日本語キーワードが化けたので、-sig 付きが安心でした。

CTRが高いのに掲載順位が10位以下、みたいなキーワードは「タイトルは刺さってるのに順位が足りてない」候補。リライトのネタ探しにそのまま使えるよ。

つまずきポイント

403 permission denied と出る

いちばん多い原因はステップ2の権限追加漏れです。サービスアカウントのメールをSearch Consoleに追加したか、追加先のプロパティと SITE_URL が一致しているかを確認します。ドメインプロパティなのに https://... を指定している(またはその逆)ときも弾かれるので、sc-domain: の有無を見直してください。

実行は成功するのに0件(rowsが空)

Search Consoleのデータは2〜3日ほど遅れて反映されます。endDate を今日にすると空になりがちなので、まずは「3日前」くらいまでの期間を指定してみてください。そもそも登録直後でアクセスがまだ無い場合も空になります。

SERVICE_DISABLED / API has not been used

ステップ1-2のAPI有効化を忘れています。メッセージ内のURLを開いて「有効にする」を押し、数分待ってから再実行します。

ModuleNotFoundError: No module named ‘googleapiclient’

pip install したPythonと、実行しているPythonが別物のことがあります。python -m pip install google-api-python-client google-auth のように、実行に使うPythonから入れ直すと確実です。

まとめ

  • Search Console APIは「①API有効化+サービスアカウント作成 → ②GSCにメール追加 → ③Pythonで取得」の3ステップ
  • searchanalytics().query() に期間と dimensions を渡すだけで、クリック・表示回数・CTR・掲載順位が取れる
  • 権限追加漏れ(403)とデータ遅延(空rows)が二大つまずきポイント

まずは1回手で動かして、上位キーワードのCSVを眺めてみてください。次のアクションとしては、この取得スクリプトを定期実行にして「毎週のキーワード変化を自動記録」する形に発展させると、リライト判断がぐっと楽になります。

PR: 未経験からの転職 Pythonでキャリアを変える【Python Winner】

無料カウンセリング・受講相談から参加可能、Python習得によるIT転職支援。

未経験からの転職 Pythonでキャリアを変える【Python Winner】の詳細・無料登録はこちら

コメント

タイトルとURLをコピーしました