Search Console APIでドメインを指定するときはsc-domain:を使う
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
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら