Indexing APIとは
Indexing APIは、求人情報のやアルタイムイベントなどといった、すぐにインデックスさせたいページに対していちはやくGoogleのクローラを呼び寄せるAPIです。
Indexing APIは次の機能があります。
- URL を更新する
クロールの対象となる新しいURLや、以前に送信したURLのコンテンツが更新されたことをGoogleに通知します。 - URL を削除する
サーバーからページを削除した後Googleに通知することで、Googleがインデックスからそのページを削除し、URLを再度クロールしないようにします。 - リクエストのステータスを取得する
Googleが最後に受信した、指定されたURLに関する各種の通知を確認します。 - インデックス登録の一括リクエストを送信する
最大100個の呼び出しを1つのHTTPリクエストにまとめることで、サイトのクライアントが確立する必要があるHTTP接続の数を減らします。 
Indexing APIの使い方
この記事では、Indexing APIをGoogle Colabで使う方法を紹介します。
Google Cloudプロジェクトの作成
まずはGoogle Cloudのコンソールのサービス アカウント ページへ移動し、プロジェクトを作成または選択します。この記事では、sandboxという名前のプロジェクトを作成し、選択しています。
サービスアカウントの作成
「CREATE SERVICE ACCOUNT」をクリックしサービスアカウントを作成します。この記事では、indexing-apiという名前でサービスアカウントを作成しています。サービス名を記入して「DONE」ボタンをクリックします。


追加したサービスアカウントの「Manage keys」を選択します。

「Add KEY」>「Create new key」を選択します。JSONのキーのタイプを選択し、「CREATE」ボタンをクリックします。作成を押すとキーがダウンロードされるので、大事に保管してください。


Indexing APIの有効化
Indexing APIを有効化にします。検索画面でindexing apiと検索し、Indexing APIを選択します。そして有効化するボタンをクリックします。「API Enabled」となっていれば有効化されています。


Google Search Consoleの所有権の確認
Google Search Consoleの所有権確認画面から所有権を確認します。

「You are a verified owner」と表示されていることを確認します。
Google Search Consoleに所有者を追加
Google Search Consoleの権限管理画面を開き、所有権を確認したウェブサイトを選択します。そしてGoogle Cloudで作成したサービスアカウントのJSONキーの中のclient_emailに記載されているアドレスを所有者として追加します。

Google ColabでIndexing APIを実行
Google Colabを開き、サービスアカウントのJSONキーファイルをアップロードします。
そして次のコードを貼り付けます。
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
import time
SCOPES = ["https://www.googleapis.com/auth/indexing"]
ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
# Write path of json key file you got from GCP console.
JSON_KEY_FILE = "sandbox-aaaaaaaaaaaa.json"
credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)
http = credentials.authorize(httplib2.Http())
# Define contents here as a JSON string.
# This example shows a simple update request.
# Other types of requests are described in the next step.
# Write the website urls you want Google crawl
urls = [
    "https://io.traffine.com/id/articles/minikube",
    "https://io.traffine.com/id/articles/kubectl",
]
for url in urls:
    content = """{
    "url": "{url}",
    "type": "URL_UPDATED"
    }""".replace('{url}', url)
    response, content = http.request(ENDPOINT, method="POST", body=content)
    if response.status == 200:
        print(f"Succeeded. Status: {response.status} {url}")
    else:
        print(f"Failed. Status: {response.status} {url}")
        print(content)
    time.sleep(5)
コードを実行すると、次のようにプリントアウトされます。
Succeeded. Status: 200 https://io.traffine.com/id/articles/minikube
Succeeded. Status: 200 https://io.traffine.com/id/articles/kubectl
リクエストを送信後、最大2分程度以内に当該URLがクロールされます。早い場合は数秒でクロールされます。
参考