Google Search ConsoleのAPIを使おうとしてハマったのでメモ。

以下のようにしてAPIを使えるようにはできたんだけど、どうしてもAPIの実行がうまくいかなかった・・

  • GCPのプロジェクトを作成
  • Search Console APIを有効化
  • サービスアカウントを作成
  • サービスアカウントのjsonファイルを取得する
  • Search Consoleにサービスアカウントのメールアドレスを登録する

で、オチとしてはドメインを指定するときに、https://〜からはじめるのではなく、sc-domain:〜から任意のドメイン名を指定するとうまくいきました。

これをしないと、以下のようなメッセージが出てしまう。 以下はcurlでAPIを実行した場合のメッセージです。

{
  "error": {
    "code": 403,
    "message": "You do not own this site, or the inspected URL is not part of this property.",
    "status": "PERMISSION_DENIED"
  }
}

Rubyのgemで実行した場合は以下のようなメッセージが出てきます。

Google::Apis::ClientError: forbidden: User does not have sufficient permission for site 'https://{Your domain}'. See also: https://support.google.com/webmasters/answer/2451999.

たとえば、curlでAPIを実行する場合、こんな感じ。

urlInspection/index:inspectのAPIを実行すると、指定したページがGoogleにインデックスされているか、クロールされているかなど登録状況を取得することができます。

ポイントはsiteUrlのパラメーターです。sc-domain:〜と指定してあげます。

このsiteUrlの仕様が微妙で、サーチコンソールに登録しているURLの末尾がスラッシュで終わる場合はhttps://exampla.com/のように指定することが可能です。

しかし、スラッシュなしで登録している場合(https://exampla.com)はsc-domain:exampla.comで指定する必要があります。

めちゃわかりにくい・・

一応、マニュアルにはそのように書いてありました・・・ Method: index.inspect

以下、抜粋です。

Required. The URL of the property as defined in Search Console. Note that URL-prefix properties must include a trailing / mark. Examples: https://www.example.com/ for a URL-prefix property, or sc-domain:example.com for a Domain property.
$ curl --request POST \
  'https://searchconsole.googleapis.com/v1/urlInspection/index:inspect' \
  --header 'Authorization: Bearer [Your Access Token]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"inspectionUrl":"https://[Your Url]","siteUrl":"sc-domain:[Your Domain]"}' \
  --compressed

仕様です、と言われてしまえばそれまでですが、わかりにくいですね。

この記事の環境情報

  • 2023年2月時点のGoogle Search Console