島根県安来市のフリーランスエンジニア_プログラマー画像1

PythonでGoogle Search Console APIを叩いて複数サイトの確認作業を効率化した

WordPressサイトを複数運営していると、Search Consoleを毎回ひとつずつ開いて確認するのが地味に面倒です。「全サイトのクリック数を1画面で見たい」という動機だけでPythonツールを作ったら、思いのほかちゃんと動いたので実装内容を公開します。Google Search Console APIの認証まわりでつまずいた箇所も含めて全部書きます。

作った動機:毎朝の確認作業が地味につらい

サイトが増えるにつれて、毎朝のルーティンがこうなっていました。

① Search ConsoleでサイトAを開く → クリック数を確認 → 閉じる
② Search ConsoleでサイトBを開く → クリック数を確認 → 閉じる
③ サイトCの… (以下くりかえし)

1サイトあたり2〜3分かかるので、サイトが増えるほど確認作業だけで時間が溶けていきます。しかもGoogleのUIは毎回ログイン確認が入ったりして、地味にストレスです。

「APIで取ってきてまとめて表示すればいいだけでは」と思い立って作り始めました。

完成したもの

起動して「データを更新」を押すだけで、登録した全サイトのデータが一覧表示されます。

Search Console Dashboard Powered by Eatransform
合計クリック数
21,758
合計表示回数
427,300
平均CTR
4.64%
登録サイト数
10
サイト
クリック
表示回数
CTR
順位
tech-news-japan.net
4,821
89,200
5.41%
4.2位
ai-weekly.net
3,654
72,400
5.05%
3.8位
crypto-trend.net
2,983
61,800
4.83%
5.1位
… 他7サイト

※ 上記はデモデータです

技術構成

言語
Python 3.8以上
GUI
tkinter(Python標準ライブラリ)
API
Google Search Console API v1
認証
OAuth 2.0(デスクトップアプリ)
費用
完全無料(Search Console APIは無料枠内)

つまずいたところ

① OAuth同意画面の設定が必要

Google Cloud ConsoleでAPIを有効化するだけでなく、OAuth同意画面の設定も必要です。「外部」を選択して、アプリ名とメールアドレスを入れるだけで先に進めます。スコープ・テストユーザーの画面は何も触らずスルーでOKでした。

②「このアプリはGoogleで確認されていません」警告

初回認証時に警告が出ます。「詳細」→「安全でないページに移動」をクリックすれば通過できます。自分用ツールなので問題なし。

③ サイトURLの末尾スラッシュに注意

Search ConsoleにはURLを https://example.com/ のように末尾スラッシュ付きで登録していることが多いです。APIに渡すURLもSearch Consoleの登録URLと完全一致させないとデータが返ってきません。

コードの要点

データ取得部分のコアはこれだけです。

def fetch_site_data(service, site_url, days=28):
    end_date   = datetime.today().strftime("%Y-%m-%d")
    start_date = (datetime.today() - timedelta(days=days)).strftime("%Y-%m-%d")

    response = service.searchanalytics().query(
        siteUrl=site_url,
        body={
            "startDate": start_date,
            "endDate":   end_date,
            "dimensions": ["date"],
            "rowLimit":   500,
        }
    ).execute()

    rows             = response.get("rows", [])
    total_clicks     = sum(r["clicks"] for r in rows)
    total_impressions = sum(r["impressions"] for r in rows)
    avg_position     = sum(r["position"] for r in rows) / len(rows)

    return {
        "clicks":      int(total_clicks),
        "impressions": int(total_impressions),
        "ctr":         round(total_clicks / total_impressions * 100, 2),
        "position":    round(avg_position, 1),
    }

dimensions: ["date"] で日別データを取得して合計・平均を計算しています。rowLimit: 500 にしておけば90日分でも十分カバーできます。

まとめ

Search Console APIは最初の認証設定だけ少し手間ですが、一度通してしまえば以降は完全自動です。サイトが増えるほど時短効果が大きくなります。

同じ仕組みを使えば「特定キーワードの順位だけ抽出する」「順位が落ちたら通知する」といった応用もできます。Search Console APIは思ったより使いやすかったので、今後も活用していく予定です。

AIニュースサイト自動化サービスの詳細・無料相談はこちら

初期設定後は放置するだけで毎日記事が自動生成・公開されます

サービス詳細・無料相談 →

量子コンピュータでビットコインの暗号は解けるのか?価格への影響と対策を解説

ブロックチェーンの仕組みをわかりやすく解説【改ざん検知デモ付き】