※本記事はアフィリエイト広告(PR)を含みます
この記事では、Google Search Console(サチコ)に集まった「どんなキーワードで自分のブログが表示・クリックされたか」を、Pythonで自動取得してCSVに書き出す手順を解説します。所要時間は約20分。必要なものは、Python環境・Googleアカウント・Search Consoleに登録済みのブログの3つです。
全体の流れ(3ステップ)
やることは大きく3つです。1がいちばん手間で、ここさえ越えればコードは10行ほどです。
- Google CloudでSearch Console APIを有効化し、サービスアカウントの鍵(JSON)を作る
- そのサービスアカウントを、Search Console側で「ユーザー」として追加する
- 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 として置いておきます。
ステップ2:Search Consoleにサービスアカウントを追加する
ここが最初にハマりやすいポイントです。サービスアカウントは「別の利用者」なので、あなたのSearch Consoleに招待しないとデータを見られません。
- Search Console を開き、対象のプロパティを選ぶ
- 左下の**「設定」→「ユーザーと権限」**を開く
- 右上の「ユーザーを追加」を押す
- メールアドレス欄に、先ほどの
client_email(...iam.gserviceaccount.com)を貼り付ける - 権限は**「制限付き」で十分**(データの読み取りだけならこれで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 付きが安心でした。
つまずきポイント
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転職支援。


コメント