このエラーの対処が結構ややこしかった為、blogに備忘として残します。(2023/8/19時点の環境)

スポンサーリンク

事前準備

まず、エラーメッセージを見る限り、サイトへのアクセス権限が足りてないことが問題なのは英文から分かる通りでした。

なおSearch Console APIを利用するには、以下の手順を踏む必要があります(詳細はこちらの記事が参考になります)

  • Google Cloud Platformで プロジェクトを作成する
  • search consoleの APIを登録する
  • サービスアカウントを作成
  • キーを作成し、JSONファイルをダウンロード
  • search consoleの管理画面上でユーザーの追加

上記対応後に、以下記事のpythonコードを用意して実行

で通常であれば、search console API経由でデータが取得されるはずなのですが、タイトルの通りエラーが出る場合があります。

エラーメッセージ

'message': "User does not have sufficient permission for site 'https://xxxxxx.com'.

スポンサーリンク

実行コードと処理落ち箇所

以下コードを実行したときに、34行目のところで認証エラーとなりました

# マネージド機能のインストール(初回のみ実行)
pip install --upgrade google-api-python-client
pip install oauth2client

# ライブラリの読み出し
import pandas as pd
from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime, date, timedelta

## サーチコンソールへのアクセス設定を行う
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly'] ## 固定設定
KEY_FILE_LOCATION = 'xxxxxxx.json' ## 自分のgoogle search console上で作成したjsonの認証情報を設定する
credentials = ServiceAccountCredentials.from_json_keyfile_name(KEY_FILE_LOCATION, SCOPES) 
webmasters = build('webmasters', 'v3', credentials=credentials)

domain = 'https://xxxxxx.com' ## 自分のgoogle search consoleに登録してあるサイトのURL 
dimensions = ['query', 'page']

## 取得データは直近90日分に絞る
today = datetime.today()
startDate = (today - timedelta(days=90)).strftime('%Y-%m-%d') ## 実行日の90日前を指定
endDate = today.strftime('%Y-%m-%d') ## データ取得終了日は処理日を指定
rowLimit = 5000 # 取得レコード数の最大値を設定

body = {
    'startDate': startDate,
    'endDate': endDate,
    'dimensions': dimensions,
    'rowLimit': rowLimit
}

## ここでデータ取得
response = webmasters.searchanalytics().query(siteUrl=domain, body=body).execute() # => ここでsearch console apiの認証エラーが発生してデータが取れない

原因と対策

上記処理でエラーにならない(正常処理可能):search consoleの登録プロパティはサイトURLを登録している(以下図)

上記処理でエラーになる:search consoleの登録プロパティはドメインを登録している(以下図)

なお、この対処方法は、17行目のコードを以下のように変更すればOKとなります。

## 自分のgoogle search consoleに登録してあるプロパティのドメインの前に sc-domain:を指定する
domain = 'sc-domain:xxxxxx.com' 

この情報は公式リファレンスにちょこっと書いてありました。(以下図の赤枠部分)

これはすぐにはわからなかった。

結論

search consoleに登録したプロパティがURLかドメインかの違いで指定方法が異なる。というのが事の顛末でした。これは正直詳しくないとわからない部分だなと。

解決するのにおおよそ3日ほどかかってしまったので、blog化に至りました。

同じ状況に陥ってる人がいれば参考になれば幸いです。

おすすめの記事