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がクロールされます。早い場合は数秒でクロールされます。
参考