【画像で手順】Search Console indexing API✕Pythonで実装

【画像解説】Search Console API✕PythonでSEOデータ取得

【SEO自動化】Google Search Console APIで分析を効率化する完全ガイド🚀

毎日Search Consoleを開いて、クリック数や掲載順位を確認する作業に時間を取られていませんか。
データをもっと深く分析したいのに、画面操作だけでは限界を感じているあなたも多いはずです😥

そんな悩みを一気に解決するのが Google Search Console API です。
APIを使えば、検索パフォーマンスの取得からレポート作成までを自動化でき、SEO施策のスピードと精度が大きく変わります📈

この記事では、実務で何百サイトも分析してきた視点をもとに、Google Search Console API を初めて使うあなたでも迷わず進めるように解説します。
公式仕様に基づいた正しい手順と、Python を使った具体的な実装例を交えて紹介するので、安心して取り組めます✨

Google Search Console API で何ができるのかを体系的に理解できる
◉ OAuth 2.0認証やGCP設定など、つまずきやすいポイントを整理できる
Python を使って検索クエリやURL別のデータを自動取得できる
◉ クォータ制限やエラー対策など、実運用で役立つノウハウが身につく

Google Search Console APIでSEO運用を次の段階へ🔍

この記事を最後まで読み進めれば、手作業に頼らない SEO 自動化 の基盤が完成します。
あなたのSEO運用を次のステージへ進めるための、最短ルートをここから始めましょう💡


目次

【基礎知識】Google Search Console APIとは何ができ導入で何が変わるのか

検索パフォーマンスを自動で可視化・管理できる、SEOの最強パートナー🔍

Google Search Console APIは、Googleが提供する公式ツールで、ウェブサイトの検索状況を自動的に取得・分析できる強力なインターフェースです。

【基礎知識】Google Search Console APIとは何ができ導入で何が変わるのか

手作業でのデータ収集や確認作業に限界を感じている方にとって、APIの導入は大きな飛躍につながります。

AOI345.com

WEBサイトのGoogle Search Consoleの表示内容を自作のプログラムに組み込むことができるようするものがAPIです。


【機能一覧】Search Console APIでできる検索分析/サイトマップ/URL検査🔧

検索アナリティクスデータ(クエリ・クリック数・CTR・掲載順位)を自動取得
サイトマップの送信・取得・エラー確認をスクリプトで管理
URL検査によるインデックス状況・モバイル対応・構造化データの状態を一括チェック
ウェブインターフェースでは実現しづらいスケーラブルなSEO分析と監視が可能

これにより、日次や週次でのレポート作成、異常検知、パフォーマンス改善の施策立案までを自動化し、SEO運用のスピードと精度を大幅にアップ⏫できます。


【事前準備】Search Console API導入前に確認すべきアカウントと権限🛠️

【環境構築】PythonでSearch Console APIを使うための準備手順を解説🐍

Google Search Console APIを使い始めるには、最低限の準備が必要です🛠️

APIを活用するには、まずSearch Consoleに登録されたサイト情報とGoogleアカウントの整備が不可欠です。技術的な前提条件をクリアしておけば、後の設定もスムーズに進みます。

AOI345.com

APIを使う前に🔗 Google Search ConsoleWEBサイトのサービスを使っていればこの章の事前準備は完了しています。
Google Search Consoleは無料です。

Google Search Console

【必須条件3つ】API利用前に確認するアカウント/サイト/権限設定✅

Googleアカウントを保有しており、Search Consoleに対象サイトが登録済みであること
◉ サイトの所有権がSearch Console上で確認済みになっていること
◉ Search Consoleに不慣れな場合は、まずウェブUI(管理画面)で基本機能を把握しておくと安心

特に所有権の確認はAPI操作において非常に重要なステップです。操作対象となるサイトであっても、アカウントに必要な権限がないとAPIリクエストが失敗します⚠️

また、Search Consoleの画面操作に慣れておくことで、APIで何が自動化できるのか、直感的に理解しやすくなります。


【GCP設定】Search Console APIを使うためのプロジェクト作成と有効化手順

【GCP設定】Search Console APIを使うためのプロジェクト作成と有効化手順

Google Search Console APIを使うには、まずGCPの設定が欠かせません🔑

🔗 Google Cloud Platform(GCP)は、Googleの各種APIを使うための基盤です。ここでプロジェクトを作成し、Search Console APIの利用を明示的に有効化する必要があります。

設定自体はシンプルですが、今後の運用効率やクォータ管理にも関わるため、丁寧に進めていきましょう。


【初心者向け】GCPプロジェクト作成からAPI有効化までの全手順まとめ✨

1️⃣ 🔗 Google Cloud Platform(GCP)にアクセスし、新しいプロジェクトを作成

2️⃣ ナビゲーションメニューから「APIとサービス」を開く

APIとサービス

3️⃣ 左のメニューから「ライブラリ」を開く

ライブラリ

4️⃣ 検索バーで「Google Search Console API」を入力し、表示されたAPIを「選択」

Search Console API

5️⃣ 「有効にする」を選んでAPIを有効化する

APIを有効にする

この設定を行うことで、プロジェクト単位でAPIが利用できる状態になります。


さらに、このプロジェクトでは次のような管理が可能になります👇

◉ APIの利用上限(クォータ)の確認・調整
◉ 利用量に応じた請求管理(基本無料範囲あり)

◉ 認証情報(クライアントIDやAPIキー)の一元管理

Search Console APIは基本的に無料で使えますが、GCP側ではプロジェクトの請求設定を求められることがあります。これは将来的に他のGoogle APIを併用する際の拡張性にもつながるため、安心して登録しておきましょう。


【OAuth設定】Search Console APIで必須となるOAuth 2.0認証手順を解説🔐

【OAuth設定】Search Console APIで必須となるOAuth 2.0認証手順を解説🔐

Search Console APIを使うには、Googleアカウントとの安全な連携が必要です🔐

そのためには、Googleが提供するOAuth 2.0認証を活用し、ユーザーの同意を得たうえでデータにアクセスできるように設定を行います。
このステップでは、認証フローを構成し、アプリとしての基本情報や権限を定義します。

【完全解説】Google Cloud Consoleで行うOAuth認証設定ステップガイド📘

1️⃣ 右上に表示されている「認証情報の作成」を選択

認証情報の作成

2️⃣ 認証情報の種類を選ぶ画面では「ユーザーデータ」を選択して、「次へ」を押します。

ユーザーデータ

3️⃣ OAuth同意画面でアプリ名・サポートメール・デベロッパーの連絡先情報を入力し、保存して次へ

OAuth 同意画面

4️⃣ スコープは省略可なので、とりあえず省略し「保存して次へ」

スコープ

5️⃣ OAuth クライアント IDではアプリケーションの種類と名前を設定し、「作成」

6️⃣ 作成された情報はJSON形式でダウンロードしておき、Pythonスクリプトなどから利用

ダウンロード

7️⃣ 作成された情報はJSON形式でダウンロードしておき、Pythonスクリプトなどから利用します

AOI345.com

ダウンロードできるjsonファイルの入手Google Cloud Platformで実施すべき内容です。
ファイル名を「client_secret.json」に変えて「ユーザー名フォルダ」に置いておくと、後に出てくるテストプログラムを実行しやすいです。


OAuthスコープの選択は非常に重要で、必要最小限の権限だけを指定するのがセキュリティ的にもベストです👇

スクロールできます
スコープURI内容主な用途
https://www.googleapis.com/auth/webmasters.readonly読み取り専用アクセスパフォーマンスデータ取得などに最適
https://www.googleapis.com/auth/webmasters読み取り+書き込みアクセスサイトマップ送信なども行う場合に必要

認証情報ファイル(*.json)は、APIにアクセスするための鍵のようなもの。セキュリティ上非常に重要なので、外部に漏れないよう厳重に保管してください。

さらに、認証後に得られるアクセストークンやリフレッシュトークンは、別途安全な形式で保存して再利用できるようにしておくと便利です✨


【検証環境】OAuth 2.0でテストユーザーを追加し審査なしで試す方法🧪

Googleが提供するOAuth 2.0認証で、Googleの審査プロセスを完了せずにテストプログラムを動作させるには「テストユーザー」の追加が必要です。

自分のGoogleアカウントのメールアドレスをテストユーザーに追加することで審査プロセスを完了していないプログラムを実行できるようになります。

【検証環境】OAuth 2.0でテストユーザーを追加し審査なしで試す方法🧪

テストユーザーに追加していない場合のプログラム実行時

Googleの審査プロセス

【設定手順】OAuthテストユーザーを登録してAPIを安全に試す方法✅

1️⃣ 🔗 Google Cloud Platform(GCP)にアクセスします

2️⃣ ナビゲーションメニューから「APIとサービス」を開く

APIとサービス

3️⃣ 左のメニューから「OAuth 同意画面」を開く

OAuth 同意画面

4️⃣ 左のメニューから「対象」を選択

5️⃣ テストユーザー内の「+Add users」を選ぶ

テストユーザー +Add users

6️⃣ 右側に出てくるポップアップに「自分のGoogleアカウントのメールアドレス」を記載して「保存」

7️⃣ テストユーザー内に追加されていれば成功です

テストユーザー

【環境構築】PythonでSearch Console APIを使うための準備手順を解説🐍

PythonからGoogle Search ConsoleのAPIを呼び出すプログラムを実行してみます。
そのためには、パソコンにPythonの実行環境が入っている必要があります。

下記のサイトからPythonの実行環境のファイルがダウンロードできますのでインストールしましょう。

【環境構築】PythonでSearch Console APIを使うための準備手順を解説🐍

🔗 Welcome to Python.org

Pythonダウンロード

1️⃣ Pythonプログラムをインストールしたら「ターミナル」を起動します。

ターミナルを起動

2️⃣ ターミナルにpython3 –versionと入力して実行し、バージョンが表示されればインストール成功です。

Pythonバージョン確認

3️⃣ 次のテストプログラムで使用するGoogleライブラリもインストールします。
  1つ目のコマンドは「pip3 install google-auth-oauthlib」です。

pip3 install google-auth-oauthlib

4️⃣ 2つ目のコマンドは「pip3 install –upgrade google-api-python-client」です。

pip3 install --upgrade google-api-python-client
AOI345.com

この2つのライブラリの追加が完了しましたら、次のプログラムの実行環境が完了になります。

5️⃣ 3つ目のコマンドは「pip3 install pandas」です。

pip3 install pandas
AOI345.com

このライブラリは2つ目のサンプルを実行するのに必要になります。

6️⃣ 最後に「python3」と入力して、実行状態にしておきましょう。

python3

【Python実装】初心者でもできるSearch Console API接続方法とコード例💻

Pythonを使えば、Google Search Console APIの操作は驚くほどシンプルに✨

このセクションでは、APIへ接続するための基本手順と、Pythonコードの実装方法を初心者向けにわかりやすく解説します。
初回設定が済めば、次回以降は再認証不要で実行可能な仕組みも構築できます🔁

【Python実装】初心者でもできるSearch Console API接続方法とコード例💻

【サンプル解説】認証から接続/サイト一覧取得までのPythonコード実践📄

◉ 必要なライブラリをインストール(1行コマンドでOK)
◉ ダウンロードした認証情報ファイル(*.json)を使ってOAuth 2.0認証を実行
◉ トークンをファイルに保存し、2回目以降は自動ログイン状態で処理を継続


以下のような基本コードで、Search Consoleに登録されているサイト一覧を取得できます👇

from google_auth_oauthlib.flow import InstalledAppFlow  
from googleapiclient.discovery import build  
import os  

SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']  
CLIENT_SECRETS_FILE = 'client_secret.json'  
TOKEN_FILE = 'token.json'  

def authenticate():  
    creds = None  
    if os.path.exists(TOKEN_FILE):  
        from google.oauth2.credentials import Credentials  
        creds = Credentials.from_authorized_user_file(TOKEN_FILE, SCOPES)  

    if not creds or not creds.valid:  
        flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)  
        creds = flow.run_local_server(port=0)  
        with open(TOKEN_FILE, 'w') as token:  
            token.write(creds.to_json())  

    return creds  

def get_service():  
    credentials = authenticate()  
    service = build('searchconsole', 'v1', credentials=credentials)  
    return service  

def list_sites(service):  
    site_list = service.sites().list().execute()  
    for site in site_list.get('siteEntry', []):  
        print(f"URL: {site['siteUrl']} | 権限: {site['permissionLevel']}")  

if __name__ == '__main__':  
    sc_service = get_service()  
    list_sites(sc_service)

このコードをベースに、検索アナリティクスの取得やURL検査、サイトマップの送信などの処理にも拡張できます。
最初のハードルを越えれば、APIの可能性が一気に広がります💡


1️⃣ 前の章でPython実行状態のところにサンプルプログラムの内容をすべて貼り付けます。
  さらにリターンキーを2回押して、プログラムを実行します。

ソースコード

2️⃣ ブラウザが起動し、アカウントの選択画面になるので自分のGoogleアカウントを選びます

アカウントの選択

3️⃣ 権限の承認を求めてくるので「続行」を選びます

SEO分析がgoogleアカウントへのアクセスを求めています

4️⃣ 表示内容が下記の様になっていれば「ブラウザを閉じ」てOKです

Completed

5️⃣ ターミナルの画面に「Google Search Consoleに登録しているサイトの一覧」が表示されます

サイト一覧
AOI345.com

これにて、Google Search ConsoleのAPIを使用したサンプルプログラムが実行できたことになります。
以降の内容を参考にサンプルプログラムを編集して、様々なAPIを実行して見ましょう!


【URL検査】Search Console APIでインデックスとクロール状況の確認方法

【URL検査】Search Console APIでインデックスとクロール状況の確認方法

Google Search Console APIの中心機能が、この検索アナリティクスの取得です📊

Google検索でのパフォーマンスを可視化し、キーワードやページごとの成果をデータドリブンで分析できます。
通常のSearch Console画面では難しいフィルタや集計も、APIを使えば柔軟に自動処理できます。

【取得データ】クエリ別/日別/デバイス別に取得できる指標一覧を整理🔍

クエリ別・ページ別の表示回数、クリック数、CTR(クリック率)、平均掲載順位
日別・デバイス別・国別などのセグメントごとの詳細な分析が可能
フィルタ(例:特定のページやクエリのみ)で狙ったデータを抽出できる
日次で自動取得し、順位変動や改善効果を可視化できるダッシュボードを構築可能

たとえば、「CTRが高いのに掲載順位が低いクエリ」を特定することで、狙って改善できるページを明確に選定できます。


さらに、長期的なキーワードパフォーマンスのトレンド把握や、リライト施策の効果測定もスムーズに行えます。

スクロールできます
指標名内容使い方の例
clicks検索結果からのクリック数コンテンツの訴求力を測定
impressions表示された回数検索ボリュームと露出の確認
ctrクリック率(clicks/impressions)タイトル・ディスクリプション改善の評価
position平均掲載順位SEO施策の効果測定や順位変動の監視

APIを使えば、手作業では面倒な時系列分析やページ別レポートもすべて自動化可能です。
PythonやGoogleスプレッドシートと連携することで、業務フローに組み込むのも簡単です💡


📌 サンプルプログラム
インデックスの登録確認を行う。
🔜 サンプルプログラム2|インデックス確認・クロール日時(1URL毎)
🔜 サンプルプログラム4|一括インデックス登録確認(URLのCSVリスト)


【サイトマップ】APIで送信/取得/削除を自動化し更新通知を効率化🔁

新しいページを素早くインデックスさせたいなら、サイトマップの自動送信が鍵🔁

Google Search Console APIを使えば、サイトマップの送信・取得・削除・エラー監視をすべてプログラムから操作できます。
コンテンツ更新のたびに手動で送信する必要がなくなるため、運用の自動化とインデックススピードの改善が実現します。

【サイトマップ】APIで送信/取得/削除を自動化し更新通知を効率化🔁

【管理方法】Search Console APIで行うサイトマップ管理の使い分け解説📑

◉ APIから新しいサイトマップを送信し、クロールを即座に促すことが可能
◉ サイト更新後に自動でサイトマップ通知するフローを構築すれば、作業ミスも防止
◉ APIを使ってサイトマップのステータス(送信日、エラー有無、警告数など)を取得可能
エラーや警告の有無を監視ツールと連携すれば、問題検知と対応を高速化できる


以下は、よく使われるメソッドとその内容をまとめた表です👇

スクロールできます
メソッド名機能活用シーン
sitemaps.submitサイトマップの送信新規ページ追加時の通知自動化
sitemaps.listサイトマップ一覧を取得登録状況の確認や重複チェック
sitemaps.getステータス確認エラー発生時の詳細把握
sitemaps.deleteサイトマップの削除古いURL群を整理する際に活用

たとえば、ブログやECサイトで毎日ページが追加される場合、新着記事や商品ページを自動的にGoogleに通知できます。
これにより、検索エンジンへの認識速度が上がり、早期インデックス&流入増加に直結🆙します。


AOI345.com

サイトマップの登録は頻度が低く一括のメリットもないため、Google Seach Consoleで行えば良い。
そのため、サンプルプログラムは割愛しています。


【URL検査】Search Console APIでインデックスとクロール状況の確認方法

重要ページがGoogleに正しく認識されているか、一目でチェック🔎

Google Search Console APIでは、URL検査ツールの機能をプログラムから利用できます。
検索パフォーマンスに直結するインデックス状況やクロール結果、構造化データの対応状況を、自動で確認・監視することが可能です。


【自動確認】インデックス/クロール/構造化エラーをAPIで一括取得🚨

指定したURLのインデックス登録状況や最終クロール日時を確認
Googleが認識しているカノニカルURL(正規URL)がどれかを把握
リッチリザルト(構造化データ)対応状況やモバイルユーザビリティの診断結果も取得
◉ 新規記事や重要なランディングページを即時チェックし、インデックス漏れを防止
複数URLを一括で検査できるので、サイト全体の健全性チェックにも有効
エラー検出時に自動アラートを送る通知機能も連携可能


以下のような情報がAPIで得られます👇

スクロールできます
項目内容活用例
indexingStateインデックスの登録状況未登録ページの検出
lastCrawlTime最終クロール日時クロール頻度の確認
pageFetchStateクロール時のHTTPステータスエラー発生URLの特定
mobileUsabilityモバイル対応可否UX改善ポイントの把握
richResults構造化データの有無とステータスリッチリザルト表示の支援

記事を公開したのに検索に出てこない…そんな時も、このAPIで一発確認🧩
特に大量のページを管理しているメディアサイトやECサイトでは、自動検査+異常検知の仕組みが非常に役立ちます。


📌 サンプルプログラム
ページ毎 or 検索ワード毎の時系列のクリック数・表示回数・CTR・順位の出力を行う。
🔜 サンプルプログラム5|一括ページ情報取得(クリック・表示回数・CTR・掲載順位)(URLのCSVリスト)
🔜 サンプルプログラム6|一括クエリ情報取得(クリック・表示回数・CTR・掲載順位) (検索語のCSVリスト)

📌 派生サンプルプログラム
Search Console APIではなくIndexing APIを使い、未登録URLの登録リクエストを行う。
🔜 サンプルプログラム3|インデックス登録リクエスト(URLのCSVリスト)


Search Consoleだけではなく、Google AnalyticsもAPIで利用したい方に🔻

あわせて読みたい
【画像手順】PythonとGoogle Analytics APIでデータ自動取得 【Google Analytics API入門】GA4データを自由に扱い分析と自動化を進めよう Google Analyticsの画面操作だけでは、物足りないと感じたことはありませんか。あなたも GA...

【サンプル2】URL検査APIでインデックス確認と最終クロール日時を取得🔎

「サイト一覧」だけでは面白くないので、URL検査のAPIも使ってみましょう。
今回のプログラムでは「サービスアカウント」の作成「鍵(キー)」の追加Google Search Consoleへ「サービスアカウントの追加」が必要です。

【サンプル2】URL検査APIでインデックス確認と最終クロール日時を取得🔎

【準備1】Search Console API用サービスアカウントを作成する手順✅

1️⃣ 🔗 Google Cloud Platform(GCP)にアクセスします

2️⃣ ナビゲーションメニューから「IAMと管理」を開く

IAMと管理

3️⃣ 左のメニューから「サービスアカウント」を開く

サービスアカウント

4️⃣ 上部のメニューから「+サービスアカウントを作成」を選ぶ

+サービスアカウントを作成

5️⃣ サービス アカウントの作成画面で「サービス アカウント名」を記載します

6️⃣ 表示されたウィンドウで「サービスアカウント名」を設定する
  サービスアカウントIDが自動で設定されるので「完了」を押します

サービスアカウント名の設定

7️⃣ 元の画面に戻り、一覧に「メールに新たな項目が追加」されていれば成功です
  このアカウントにはまだ「キーがありません」ので追加します

サービスアカウントの確認

【準備2】サービスアカウントのJSONキーを発行し安全に保存する方法🔑

1️⃣ アービスアカウントの一覧から「追加したサービスアカウント」を選びます

サービスアカウントの選択
AOI345.com

このメールアドレスをメモしておきましょう。
あとでGoogle Search Consoleで使います。

2️⃣ アカウントの詳細画面上部のタブから「」を選びます

鍵タブの選択

3️⃣ 表示されるウィンドウで「キーを追加」を選びます

キーを追加

4️⃣ プルダウンメニューが表示されるので「新しい鍵を作成」を選びます

新しい鍵を作成

5️⃣ キータイプの選択画面が表示されるの「JSON」を選んで「作成」を押します

JSONを選択

6️⃣ 「」がパソコンにダウンロードされます

鍵が表示される

7️⃣ 自動でダウンロードされて、保存されます

ファイルが保存されます
AOI345.com

最初のJSONとは別のファイルです。
ファイル名を「your_service_account.json」に変えて「ユーザー名フォルダ」に置いておくと、後に出てくるテストプログラムを実行しやすいです。


【準備3】Search Consoleにサービスアカウントを追加し権限を付与✅

1️⃣ 🔗 Google Search Consoleにアクセスします

2️⃣ Google Search Consoleの左のメニューから「設定」を選びます

Google Search Consoleの設定

3️⃣ 全体設定で「ユーザーと権限」を選びます

ユーザーと権限

4️⃣ ユーザーと権限で「ユーザーを追加」を選びます

ユーザーを追加

5️⃣ ユーザーを追加ウィンドウの「メールアドレス」を入力して「追加」を押します
  権限についてはアプリによって変えるもので「閲覧のみ」か、そのまま「フル」にします。

ユーザーを追加:メールアドレス

6️⃣ 名前の欄に「新たなアカウント」が追加されていれば追加成功です

ユーザー(2)
AOI345.com

この操作がなければ、PythonプログラムからGoogle Search Consoleへのアクセス権限がなくてエラーになります。


【コード例】URL検査でインデックス状態を確認するPythonサンプル💻

ようやく3つの事前準備が終わりました。
早速、index_statusを使ったサンプルプログラムを実行してみましょう。


以下のようなコードで、Search Consoleに登録されているページであるか確認できます👇

from google.oauth2 import service_account
from googleapiclient.discovery import build

# --- 設定(自分の環境に合わせて変更) ---
SERVICE_ACCOUNT_FILE = 'your_service_account.json'  # JSONファイルのパス
SITE_URL = 'https://aoi345.com/'                   # Search Consoleに登録済のサイトURL
TARGET_URL = 'https://aoi345.com/memorandum/search-console-api-python/'      # 調べたいページのURL

# --- 認証とAPIビルド ---
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
service = build('searchconsole', 'v1', credentials=credentials)

# --- URLインスペクション ---
request = {
    'inspectionUrl': TARGET_URL,
    'siteUrl': SITE_URL
}
response = service.urlInspection().index().inspect(body=request).execute()

# --- 結果の出力 ---
index_status = response.get('inspectionResult', {}).get('indexStatusResult', {})
coverage = index_status.get('coverageState', '不明')
verdict = index_status.get('verdict', '不明')
last_crawled = index_status.get('lastCrawlTime', '不明')

print(f"📄 URL: {TARGET_URL}")
print(f"📦 インデックス状況: {coverage}")
print(f"🔍 判定: {verdict}")
print(f"⏰ 最終クロール日時: {last_crawled}")
AOI345.com

SITE_URLにSearch Consoleに登録済のサイトURL、TARGET_URLに調べたいページのURLを記載しましょう


🔗Visual Studio Code にソースを貼り付けて、右上の実行ボタンを押します。
下のエリアに実行結果が表示され、インデックスされていることが分かります。

サンプルプログラム2実行結果
AOI345.com

ターミナルにソースコードを貼り付けて実行するのは面倒になってきたので、🔗Visual Studio Code環境を導入しました。
Pythonの実行環境が入っていれば、簡単に導入できます。


【サンプル3】Indexing APIで更新通知を送る手順と注意点を解説📣

さらに「URL一覧」から、インデックス登録リクエストを行うプログラムも使ってみましょう。
今回のプログラムでは「Indexing API」「オーナー権限への変更」が必要です。

【サンプル3】Indexing APIで更新通知を送る手順と注意点を解説📣

【準備1】GCPでIndexing APIを有効化し利用設定を完了する方法✅

1️⃣ 🔗 Indexing API 有効化ページにアクセスします
  (対象のGoogle Cloudプロジェクトが選択されている状態)

2️⃣ Web Search Indexind APIの「有効にする」を選ぶ

Web Search Indexind API

【準備2】API実行ユーザーへオーナー権限を付与しエラーを防ぐ✅

1️⃣ 🔗 Google Search Consoleにアクセスします

2️⃣ Google Search Consoleの左のメニューから「設定」を選びます

設定

3️⃣ 全体設定で「ユーザーと権限」を選びます

ユーザーと権限

4️⃣ Pythonプログラムのために作成したユーザーの右の「メニューアイコン」を選びます

5️⃣ 表示されるポップアップメニューの「権限を変更」を押します

権限を変更

6️⃣ 表示されるポップアップウィンドウの権限「オーナー」に変更して「保存」を押します

オーナー権限へ変更
AOI345.com

インデックス登録リクエストはフルでも足りず、オーナーの権限が必要です。


【コード例】URL一覧から更新通知を送るIndexing APIの実装手順📩

ようやく事前準備が終わりました。
早速、インデックス登録リクエストを行うサンプルプログラムを実行してみましょう。

今回のプログラムは下記のようなCSV形式のファイルでリクエスト対象のURLを同じフォルダに置いておきます。
このURLの中身を順番にインデックスを行っていきます。

urls.csv

url
AOI345.com

URLのリストの作り方は、下記の章で説明しています
🔜 サンプルプログラム3以降で使う「URL一覧」を作成する方法


以下のようなコードで、Search ConsoleにURLでインデックス登録のリクエストができます👇

import pandas as pd
import time
from google.oauth2 import service_account
from googleapiclient.discovery import build

# --- 設定 ---
CSV_FILE = 'urls.csv'  # 入力CSV
SERVICE_ACCOUNT_FILE = 'your_service_account.json'  # ダウンロードしたJSON鍵
SCOPES = ['https://www.googleapis.com/auth/indexing']

# --- 認証とAPIクライアント作成 ---
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('indexing', 'v3', credentials=credentials)

# --- CSVからURLを読み込み ---
df = pd.read_csv(CSV_FILE)
if 'url' not in df.columns:
    raise ValueError("CSVに 'url' 列が見つかりません")

urls = df['url'].dropna().tolist()

# --- URLごとにインデックス登録リクエスト ---
for url in urls:
    print(f"📤 リクエスト中: {url}")
    body = {
        "url": url,
        "type": "URL_UPDATED"
    }
    try:
        response = service.urlNotifications().publish(body=body).execute()
        print(f"✅ 成功: {response.get('notifyTime', '')}")
    except Exception as e:
        print(f"❌ 失敗: {e}")
    time.sleep(1.5)  # クォータ制限のため少し待機

インデックス登録リクエストの結果

インデックス登録リクエスト結果

【サンプル4】複数URLのインデックス状況を一括検査しCSV出力📄

インデックス登録リクエストを行うプログラムでリクエストできる数には限界があります。
そこで、URLの一覧からインデックス登録がされているか確認するプログラムを作ってみます。

【サンプル4】複数URLのインデックス状況を一括検査しCSV出力📄

【コード例】URL一覧を順番に検査し結果をCSVへ保存する方法🧾

今までのサンプルプログラムの準備で事前準備に相当する部分は終わっており、入力のCSV形式のについてもサンプルプログラム3と同じファイルを使います。
結果に関しては大量になるので「index_status_result.csv」というファイルに出力します。

urls.csv

url
AOI345.com

URLのリストの作り方は、下記の章で説明しています
🔜 サンプルプログラム3以降で使う「URL一覧」を作成する方法


以下のようなコードで、Search ConsoleにURLがインデックス登録されているかの一括確認ができます👇

import pandas as pd
import time
from google.oauth2 import service_account
from googleapiclient.discovery import build

# --- 設定 ---
CSV_FILE = 'urls.csv'  # 入力ファイル
SERVICE_ACCOUNT_FILE = 'your_service_account.json'
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
SITE_URL = 'https://aoi345.com/'  # Search Consoleに登録されたサイトURL(最後に / が必要)

# --- 認証 ---
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
service = build('searchconsole', 'v1', credentials=credentials)

# --- 関数:インデックス状況を確認 ---
def check_index_status(target_url):
    try:
        request = {
            'inspectionUrl': target_url,
            'siteUrl': SITE_URL
        }
        response = service.urlInspection().index().inspect(body=request).execute()
        result = response.get('inspectionResult', {}).get('indexStatusResult', {})
        return {
            'coverageState': result.get('coverageState', '不明'),
            'verdict': result.get('verdict', '不明'),
            'lastCrawlTime': result.get('lastCrawlTime', 'なし')
        }
    except Exception as e:
        return {
            'coverageState': 'エラー',
            'verdict': str(e),
            'lastCrawlTime': ''
        }

# --- CSV読込 & チェック実行 ---
df = pd.read_csv(CSV_FILE)
if 'url' not in df.columns:
    raise ValueError("CSVに 'url' 列がありません")

results = []
for url in df['url']:
    print(f"🔍 チェック中: {url}")
    status = check_index_status(url)
    results.append({
        'url': url,
        *status
    })
    time.sleep(1.5)  # クォータ制限:1秒以上の待機を推奨

# --- 結果をCSV出力 ---
output_df = pd.DataFrame(results)
output_df.to_csv("index_status_result.csv", index=False)
print("✅ 出力完了:index_status_result.csv")

インデックス登録チェック実施中

インデックス登録チェック実施中

サンプル4の出力CSV

サンプル4の出力結果

【サンプル5】URL別にクリック/表示回数/CTR/順位を一括取得📊

APIを使ってやりたいことは手動だと面倒な推移情報の取得
7日間毎の直近1年間のクリック・表示回数・CTR・掲載順位の推移を一括で取得します。

【サンプル5】URL別にクリック/表示回数/CTR/順位を一括取得📊

【コード例】URL別の週次推移を取得しレポート用CSVを作る方法📈

今までのサンプルプログラムの準備で事前準備に相当する部分は終わっており、入力のCSV形式のについてもサンプルプログラム3と同じファイルを使います。
結果に関しては大量になるので「gsc_metrics_by_indicator.csv」というファイルに出力します。
クリック数・表示回数・CTR・掲載順位のそれぞれで52週分の推移を出力します。

urls.csv

url
AOI345.com

URLのリストの作り方は、下記の章で説明しています
🔜 サンプルプログラム3以降で使う「URL一覧」を作成する方法


以下のようなコードで、Search ConsoleにURLのページのクリック率等の一括取得(週次)ができます👇
クエリ数を1000、取得週を54週に設定しているので非常に時間がかかります。

import pandas as pd
from datetime import datetime, timedelta, timezone
from google.oauth2 import service_account
from googleapiclient.discovery import build
import time

# === 設定 ===
SERVICE_ACCOUNT_FILE = 'your_service_account.json'  # サービスアカウントJSON
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
SITE_URL = 'https://aoi345.com/'  # GSC登録プロパティ(末尾 / を含める)
INPUT_CSV = 'urls.csv'
OUTPUT_CSV = 'gsc_url_metrics_grouped_by_metric.csv'
NUM_WEEKS = 54          # 取得する週数(直近N週)
MAX_URL_COUNT = 1000    # 最大URL数(クォータ制限対策)

# === 認証処理 ===
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('searchconsole', 'v1', credentials=credentials)

# === 週別日付ラベル生成 ===
def generate_week_ranges(weeks=NUM_WEEKS):
    end_date = datetime.now(timezone.utc).date()
    ranges = []
    for i in range(weeks):
        to_date = end_date - timedelta(days=i * 7)
        from_date = to_date - timedelta(days=6)
        label = f"{from_date}~{to_date}"
        ranges.append((str(from_date), str(to_date), label))
    return list(reversed(ranges))  # 昇順

# === 各URL・週に対する指標取得 ===
def get_metrics(service, site_url, url, start_date, end_date):
    try:
        request = {
            'startDate': start_date,
            'endDate': end_date,
            'dimensions': ['page'],
            'dimensionFilterGroups': [{
                'filters': [{
                    'dimension': 'page',
                    'operator': 'equals',
                    'expression': url
                }]
            }],
            'rowLimit': 1
        }
        response = service.searchanalytics().query(siteUrl=site_url, body=request).execute()
        if 'rows' in response:
            row = response['rows'][0]
            return {
                'clicks': row.get('clicks', 0),
                'impressions': row.get('impressions', 0),
                'ctr': round(row.get('ctr', 0), 4),
                'position': round(row.get('position', 0), 2)
            }
        else:
            return {'clicks': 0, 'impressions': 0, 'ctr': 0.0, 'position': 0.0}
    except Exception as e:
        return {'clicks': 'ERR', 'impressions': 'ERR', 'ctr': 'ERR', 'position': 'ERR'}

# === メイン処理 ===
df = pd.read_csv(INPUT_CSV)
if 'url' not in df.columns:
    raise ValueError("CSVファイルに 'url' 列が必要です")

df = df.head(MAX_URL_COUNT)
week_ranges = generate_week_ranges()
results = []

for url in df['url']:
    print(f"🔍 処理中: {url}")
    row = {'url': url}
    clicks, impressions, ctrs, positions = {}, {}, {}, {}

    for start_date, end_date, label in week_ranges:
        metrics = get_metrics(service, SITE_URL, url, start_date, end_date)
        clicks[f"clicks_{label}"] = metrics['clicks']
        impressions[f"impr_{label}"] = metrics['impressions']
        ctrs[f"ctr_{label}"] = metrics['ctr']
        positions[f"pos_{label}"] = metrics['position']
        time.sleep(0.3)  # クォータ制限対策

    # 指標ごとに順番に結合
    row.update(clicks)
    row.update(impressions)
    row.update(ctrs)
    row.update(positions)
    results.append(row)

# === 出力 ===
output_df = pd.DataFrame(results)
output_df.to_csv(OUTPUT_CSV, index=False)
print(f"✅ 出力完了: {OUTPUT_CSV}")

情報出力実施中

Listターミナル

AOI345.com

上記のプログラムは完了に時間がかかるので、下記に日次の順位だけを出力するように変更したプログラムも作りました。

下記のサンプルプログラムは「日数毎」指定したURL数「順位のみ」を取得します👇
初期設定は30日、対象URLは100URLにしています。

import pandas as pd
from datetime import datetime, timedelta, timezone
from google.oauth2 import service_account
from googleapiclient.discovery import build
import time

# === 設定 ===
SERVICE_ACCOUNT_FILE = 'your_service_account.json'  # サービスアカウントのJSON
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
SITE_URL = 'https://aoi345.com/'  # Search Consoleプロパティ(末尾/付き)
INPUT_CSV = 'urls.csv'
OUTPUT_CSV = 'gsc_url_position_by_day.csv'
NUM_DAYS = 30         # ← 直近の日数分だけ取得(例:30日)
MAX_URL_COUNT = 100   # ← 最大URL数(クォータ制限対策)

# === 認証 ===
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('searchconsole', 'v1', credentials=credentials)

# === 日付リスト生成 ===
def generate_date_list(num_days=NUM_DAYS):
    today = datetime.now(timezone.utc).date()
    return [str(today - timedelta(days=i)) for i in range(num_days)][::-1]  # 昇順

# === 指定URLの指定日の掲載順位取得 ===
def get_position(service, site_url, url, target_date):
    try:
        request = {
            'startDate': target_date,
            'endDate': target_date,
            'dimensions': ['page'],
            'dimensionFilterGroups': [{
                'filters': [{
                    'dimension': 'page',
                    'operator': 'equals',
                    'expression': url
                }]
            }],
            'rowLimit': 1
        }
        response = service.searchanalytics().query(siteUrl=site_url, body=request).execute()
        if 'rows' in response:
            return round(response['rows'][0].get('position', 0), 2)
        else:
            return ''
    except Exception as e:
        return 'ERR'

# === メイン処理 ===
df = pd.read_csv(INPUT_CSV)
if 'url' not in df.columns:
    raise ValueError("CSVファイルに 'url' 列が必要です")

df = df.head(MAX_URL_COUNT)
date_list = generate_date_list()
results = []

for url in df['url']:
    print(f"🔍 処理中: {url}")
    row = {'url': url}
    for date in date_list:
        row[f"pos_{date}"] = get_position(service, SITE_URL, url, date)
        time.sleep(0.3)  # クォータ制限回避
    results.append(row)

# === 出力 ===
output_df = pd.DataFrame(results)
output_df.to_csv(OUTPUT_CSV, index=False)
print(f"✅ 出力完了: {OUTPUT_CSV}")

【サンプル6】検索クエリ別に表示回数/CTR/順位の推移を一括取得🔍

推移情報の取得でページ以外で欲しいのが検索クエリに対する情報。
7日間毎の直近1年間のクリック・表示回数・CTR・掲載順位の推移を一括で取得します。

【サンプル6】検索クエリ別に表示回数/CTR/順位の推移を一括取得🔍

【コード例】クエリ別データを取得しCSV出力で分析しやすくする📤

今までのサンプルプログラムの準備で事前準備に相当する部分は終わっておりますが、入力のCSV形式についてはURLではなくクエリになるので「query.csv」を使います。
結果に関しては大量になるので「gsc_query_metrics_by_week.csv」というファイルに出力します。
クリック数・表示回数・CTR・掲載順位のそれぞれで52週分の推移を出力します。

query.csv

query
投資信託とは
新NISA
インデックス投資
AOI345.com

クエリのリストの作り方は、下記の章で説明しています
🔜 サンプルプログラム6で使う「クエリ一覧」を作成する方法


以下のようなコードで、Search Consoleに対象のクエリの検索順位等の情報の一括取得ができます👇

import pandas as pd
from datetime import datetime, timedelta, timezone
from google.oauth2 import service_account
from googleapiclient.discovery import build
import time

# === 設定 ===
SERVICE_ACCOUNT_FILE = 'your_service_account.json'  # サービスアカウントJSON
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
SITE_URL = 'https://aoi345.com/'  # GSCプロパティURL(末尾スラッシュ付き)
INPUT_CSV = 'query.csv'
OUTPUT_CSV = 'gsc_query_metrics_grouped_by_metric.csv'
NUM_WEEKS = 54          # 直近何週分を取得するか
MAX_QUERY_COUNT = 1000  # 処理するクエリ数の上限

# === 認証処理 ===
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('searchconsole', 'v1', credentials=credentials)

# === 日付範囲生成(7日間×N週)===
def generate_week_ranges(end_date=None, weeks=NUM_WEEKS):
    if end_date is None:
        end_date = datetime.now(timezone.utc).date()
    ranges = []
    for i in range(weeks):
        to_date = end_date - timedelta(days=i * 7)
        from_date = to_date - timedelta(days=6)
        label = f"{from_date}~{to_date}"
        ranges.append((str(from_date), str(to_date), label))
    return list(reversed(ranges))  # 古い順から並べる

# === 指標取得関数 ===
def get_metrics(service, site_url, query, start_date, end_date):
    try:
        request = {
            'startDate': start_date,
            'endDate': end_date,
            'dimensions': ['query'],
            'dimensionFilterGroups': [{
                'filters': [{
                    'dimension': 'query',
                    'operator': 'equals',
                    'expression': query
                }]
            }],
            'rowLimit': 1
        }
        response = service.searchanalytics().query(siteUrl=site_url, body=request).execute()
        if 'rows' in response:
            row = response['rows'][0]
            return {
                'clicks': row.get('clicks', 0),
                'impressions': row.get('impressions', 0),
                'ctr': round(row.get('ctr', 0), 4),
                'position': round(row.get('position', 0), 2)
            }
        else:
            return {'clicks': 0, 'impressions': 0, 'ctr': 0.0, 'position': 0.0}
    except Exception as e:
        return {'clicks': 'ERR', 'impressions': 'ERR', 'ctr': 'ERR', 'position': 'ERR'}

# === メイン処理 ===
df = pd.read_csv(INPUT_CSV)
if 'query' not in df.columns:
    raise ValueError("CSVファイルに 'query' 列が必要です")

df = df.head(MAX_QUERY_COUNT)
date_ranges = generate_week_ranges()
results = []

for query in df['query']:
    print(f"🔍 クエリ処理中: {query}")
    row = {'query': query}
    clicks = {}
    impressions = {}
    ctr = {}
    position = {}

    for start_date, end_date, label in date_ranges:
        metrics = get_metrics(service, SITE_URL, query, start_date, end_date)
        clicks[f"clicks_{label}"] = metrics['clicks']
        impressions[f"impr_{label}"] = metrics['impressions']
        ctr[f"ctr_{label}"] = metrics['ctr']
        position[f"pos_{label}"] = metrics['position']
        time.sleep(0.3)  # クォータ制限対策

    # 指標ごとに列をまとめて順番に追加
    row.update(clicks)
    row.update(impressions)
    row.update(ctr)
    row.update(position)
    results.append(row)

# === 出力 ===
output_df = pd.DataFrame(results)
output_df.to_csv(OUTPUT_CSV, index=False)
print(f"✅ 出力完了: {OUTPUT_CSV}")

AOI345.com

上記のプログラムは完了に時間がかかるので、下記に日次の順位だけを出力するように変更したプログラムも作りました。

下記のサンプルプログラムは「日数毎」指定したクエリ数「順位のみ」を取得します👇
初期設定は30日、検索ワードは100クエリにしています。

import pandas as pd
from datetime import datetime, timedelta, timezone
from google.oauth2 import service_account
from googleapiclient.discovery import build
import time

# === 設定 ===
SERVICE_ACCOUNT_FILE = 'your_service_account.json'  # サービスアカウントJSON
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
SITE_URL = 'https://aoi345.com/'  # GSCに登録済のプロパティ(末尾/付き)
INPUT_CSV = 'query.csv'
OUTPUT_CSV = 'gsc_query_position_by_day.csv'
NUM_DAYS = 30         # ← 過去の日数(例:30日分)
MAX_QUERY_COUNT = 100 # ← クエリの最大処理数

# === GSC認証 ===
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)
service = build('searchconsole', 'v1', credentials=credentials)

# === 直近の日付リストを生成 ===
def generate_date_list(num_days=NUM_DAYS):
    today = datetime.now(timezone.utc).date()
    return [str(today - timedelta(days=i)) for i in range(num_days)][::-1]

# === 指定クエリ・日付の position を取得 ===
def get_position(service, site_url, query, date):
    try:
        request = {
            'startDate': date,
            'endDate': date,
            'dimensions': ['query'],
            'dimensionFilterGroups': [{
                'filters': [{
                    'dimension': 'query',
                    'operator': 'equals',
                    'expression': query
                }]
            }],
            'rowLimit': 1
        }
        response = service.searchanalytics().query(siteUrl=site_url, body=request).execute()
        if 'rows' in response:
            return round(response['rows'][0].get('position', 0), 2)
        else:
            return ''
    except Exception as e:
        return 'ERR'

# === メイン処理 ===
df = pd.read_csv(INPUT_CSV)
if 'query' not in df.columns:
    raise ValueError("CSVファイルに 'query' 列が必要です")

df = df.head(MAX_QUERY_COUNT)
date_list = generate_date_list()
results = []

for query in df['query']:
    print(f"🔍 クエリ処理中: {query}")
    row = {'query': query}
    for date in date_list:
        row[f'pos_{date}'] = get_position(service, SITE_URL, query, date)
        time.sleep(0.3)  # クォータ制限対策
    results.append(row)

# === CSV出力 ===
output_df = pd.DataFrame(results)
output_df.to_csv(OUTPUT_CSV, index=False)
print(f"✅ 出力完了: {OUTPUT_CSV}")

AOI345.com

クエリのリストの作り方は、下記の章で説明しています


【文字化け対策】UTF-8のCSVをExcelで正しく開く手順を解説🧩

このサンプルプログラムに限らずですが、エクセルでCSVを開いた時には下記の手順によりエクセルでコード変換し、文字化けをしていない状態でファイルが開けます👍

【文字化け対策】UTF-8のCSVをExcelで正しく開く手順を解説🧩

1️⃣ エクセルの「データ」タブで「データファイル指定」を押します

データファイル指定

2️⃣ データソースの選択から「テキスト/CSV」を選びます

テキスト/CSV

3️⃣ データソースへの接続メニューの接続設定から「参照」を選びます

接続設定、参照

4️⃣ ファイル選択ウィンドウが開くので「CSVファイル」を選び、「データ取り出し」を押します

CSVファイルのデータ取り出し

5️⃣ 接続設定のローカルファイルを選択できたら「次へ」を選びます

次へ

6️⃣ 「UTF-8コード」を選択して「読み込む」を選びます

7️⃣ エクセルのシートに文字化けしていない表が表示されます


【URL一覧作成】WordPressから全URLを抽出しAPI用CSVを作る方法📝

サンプルプログラムでURLの一覧を必要としますので、サイトに登録されているすべてのURLの一覧を出力する手順を説明します。

【URL一覧作成】WordPressから全URLを抽出しAPI用CSVを作る方法📝
AOI345.com

Google Search ConsoleのURL一覧を使うとIndexされていないURLが漏れるので、下記の手順は漏れがなくておすすめです。


1️⃣ WordPressサイトでプラグインの追加画面で「Export any WordPress data」で検索します
  Export any WordPress data to XML/CSVを「今すぐインストール」を押します

Export any WordPress

2️⃣ インストールが完了したら「有効化」を押します

Export 有効化

3️⃣ 左側のメニューに新たに追加された「すべてエクスポート」を選びます

すべてエクスポート

4️⃣ 右側の画面に表示されるWP ALL EXPORTで「投稿タイプを選択」します

投稿タイプの選択

5️⃣ 私の場合にはカスタム投稿タイプを使っているますが一般的には「投稿」を選びます
  その後に画面下の「投稿 を移行」を選びます

AOI345.com

固定ページも必要であれば、投稿の後に繰り返して実行しましょう。

新規エクスポート

6️⃣ 「エクスポートの確認 & 実行」を選びます(設定は初期設定のままでOK)

エクスポートの確認&実行

7️⃣ 出力が完了しますので、「CSV」をダウンロードします

Confirm & Run

8️⃣ CSVファイルを開くと様々な内容が記載されていますので、「Permalink」の列がURLです
  Permalinkの記載をurlに変更し、他の列を削除。更にファイル名を「urls.csv」にファイル名を変更します

Permalink
AOI345.com

これで、ホームページのすべての投稿のURLの一覧をリストアップできます。


【クエリ一覧】Search Consoleから検索クエリを抽出しCSVにする方法🔎

サンプルプログラム6でクエリ一覧を必要としますので、サイトで検索されているクエリの一覧を出力する手順を説明します。

【クエリ一覧】Search Consoleから検索クエリを抽出しCSVにする方法🔎
AOI345.com

こちらは実際に検索されているクエリの情報が欲しいので、Google Search Consoleを使います。


1️⃣ Google Search Consoleのメニューで「検索結果」を押します

検索結果

2️⃣ 検索結果のパフォーマンスの右上の「エクスポート」を押します

エクスポート

3️⃣ ドロップダウンメニューから「Excelとしてダウンロード」を押します

Excelとしてダウンロード

4️⃣ エクセルを開くと「上位のクエリ」と「クリック数、表示回数、CTR、掲載順位」が表示されます
  「上位のクエリ」以外の列を消し、上位のクエリをqueryに変えてCSV形式「query.csv」で保存します。

上位のクエリ
AOI345.com

CSVで出力を選ぶと最初からCSVでダウンロードされるのですが、やってみたら文字化けしたので、エクセルでダウンロードしました。


【運用のコツ】Search Console APIを安全に回す注意点と対処法⚠️

【運用のコツ】Search Console APIを安全に回す注意点と対処法⚠️

Google Search Console APIを安定して活用するには、設計時から“落とし穴”に備えることが重要⚠️

APIは非常に便利な反面、制限(クォータ)やエラー対応、通信負荷などの考慮点が存在します。
本番運用でのトラブルを避けるために、以下のようなポイントを押さえておきましょう。

【安定運用5つ】クォータ/ログ/キャッシュ設計で失敗を防ぐ方法🛡️

APIにはクォータ制限(QPM=1分あたり、QPD=1日あたり)が設定されているため、アクセス設計時に上限を考慮
エラーコードに応じたハンドリング(リトライやバックオフ)を実装しておくと、APIエラーにも自動で対処できる
キャッシュ処理を活用し、同じリクエストを何度も送らない工夫が必要
分析対象を絞る・時間帯を分散するなどの工夫で、スロットリング(制限発動)を回避
◉ ログを保存し、レスポンス内容やエラー傾向を定期的にチェックする習慣を持つ


APIのクォータ制限の例を以下の表に整理しました👇

スクロールできます
項目制限値(例)対応策
QPM(Queries Per Minute)1,200/サイト呼び出しタイミングを分散
QPD(Queries Per Day)30,000,000/プロジェクトバッチ処理+キャッシュの活用
URL検査API2,000/日(サイト単位)優先URLを絞って検査

バックオフ戦略(指数的待機)を導入することで、瞬間的なアクセス集中によるブロックも回避しやすくなります。
また、「同じクエリを何度も投げる」状態は無駄が多く、クォータの消耗に直結🔻

取得済みデータの保存・活用が、パフォーマンス向上にもつながります。


【エラー対策】401/403/429が出る原因と今すぐできる解決策🚨

Google Search Console APIを使っていると、時に避けられないのがエラーとの遭遇⚠️
ただし、エラーには必ず原因と対処法があります。焦らず、コードと状況を冷静に確認して対応しましょう。

【エラー対策】401/403/429が出る原因と今すぐできる解決策🚨

以下に、よく発生するエラーとその対策を簡潔にまとめました👇

【早見表】401/403/429の原因と対処を1ページで整理する✅

401エラー(Unauthorized)
→ 認証情報の不備や期限切れが主な原因です。
認証情報ファイル(*.json)が正しく指定されているか、アクセストークンが有効か確認しましょう。

403エラー(Forbidden)
→ Search Console上で対象サイトに対する権限が不足している可能性があります。
→ 使用中のGoogleアカウントが対象プロパティに対して“オーナー”または“フルユーザー”であるか確認してください。

429エラー(Too Many Requests)
→ APIのクォータ制限を超えたことで発生します。
→ リクエストの送信間隔を空ける、指数バックオフ(Exponential Backoff)を実装するなどの対応が有効です。


以下の表に、各エラーの要点を整理しています👇

スクロールできます
エラーコード原因対処方法
401 Unauthorized認証失敗・トークン不備認証情報ファイル(*.json)とトークンの確認・再認証
403 Forbiddenアクセス権限不足Search Console上でのユーザー権限確認・追加
429 Too Many Requestsクォータ超過リクエスト間隔の調整・指数バックオフ導入

エラーは“敵”ではなく、より安全で効率的な運用へのヒント🧠
出力されたメッセージやログはできるだけ保存しておくと、原因究明と再発防止に役立ちます


【次のステップ】Search Console APIでSEO運用を自動化し改善を加速🚀

本記事では Google Search Console API を活用し、SEO分析と運用を自動化するための考え方と具体的な実装方法を体系的に解説しました。
画面操作に依存しないデータ取得が可能になることで、あなたのSEO施策は再現性とスピードを大きく高められます📈

Search Consoleを「確認ツール」から「分析基盤」へ進化させることが、これからのSEOでは重要です。
APIを正しく理解し使いこなすことで、属人化しない強いSEO運用が実現できます✨

Google Search Console APIでSEO運用を次の段階へ🔍

【重要ポイント】この記事で押さえるべき結論を最短で復習する💡

Google Search Console API を使えば検索クエリやURL別の指標を自動取得できる
Python と組み合わせることで定期レポートや異常検知を省力化できる
◉ OAuth 2.0やサービスアカウントの理解が安定運用の鍵になる
◉ クォータ制限やエラー対策を考慮した設計が長期運用では不可欠


【できること】Search Console APIで実現できる自動化を整理する📊

以下は、Google Search Console API を導入することで実現できる代表的な活用例です。

スクロールできます
機能内容メリット
検索アナリティクス取得クエリやURL別のクリック数や掲載順位を取得SEO改善ポイントを定量的に把握できる
URL検査インデックス状況や最終クロール日時を確認重要ページの未登録を早期に発見できる
サイトマップ管理送信状況やエラー情報を取得運用ミスやインデックス遅延を防止できる
データ自動化CSV出力やBIツール連携を実現手作業を削減し分析に集中できる

【導入メリット】手作業を減らし分析と改善に集中できる理由🚀

◉ 手作業による確認作業から解放され、分析と施策立案に時間を使える
◉ データ取得条件を統一でき、SEO改善の効果検証が正確になる
◉ 複数サイトや大量URLでも同じロジックで管理できる
SEO 自動化 により運用レベルが一段引き上がる


【最初の行動】まずは検索アナリティクス取得から始める手順🎯

API活用は一気にすべてを自動化する必要はありません。
まずは Google Search Console API で検索アナリティクスを取得し、日次や週次のデータ蓄積から始めるのがおすすめです。

◉ OAuth 2.0でSearch Analyticsを取得する
◉ PythonでCSV出力を作成する
◉ データを元に改善対象ページを特定する


【まとめ】Search Console APIでSEOを自動化し継続改善を実現する✨

Google Search Console API は、SEOを感覚ではなくデータで改善したいあなたにとって欠かせない武器です。
正しい設定と運用ルールを押さえれば、SEO分析は驚くほどシンプルになります。

今こそAPIを味方につけ、あなたのSEO運用を次のステージへ進めていきましょう🚀


Search Consoleだけではなく、Google AnalyticsもAPIで利用したい方に🔻

あわせて読みたい
【画像手順】PythonとGoogle Analytics APIでデータ自動取得 【Google Analytics API入門】GA4データを自由に扱い分析と自動化を進めよう Google Analyticsの画面操作だけでは、物足りないと感じたことはありませんか。あなたも GA...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA



目次