自動更新と手動更新を使用してウェブページを更新する

データストアで基本的なウェブサイト検索が使用されている場合、ストアのインデックスの鮮度は、Google 検索で利用できる情報の鮮度を反映します。

高度なウェブサイト インデックス登録がデータストアで有効になっている場合、データストア内のウェブページは次の方法で更新されます。

  • 自動更新
  • 手動更新
  • サイトマップに基づく更新

このページでは、自動更新と手動更新について説明します。サイトマップに基づく更新を理解して実装するには、サイトマップに基づいてインデックス登録と更新を行うをご覧ください。

始める前に

ウェブサイトで robots.txt ファイルを使用している場合は、更新します。詳しくは、ウェブサイトの robots.txt ファイルを準備する方法をご覧ください。

自動更新

Vertex AI Search では、次のように自動更新が実行されます。

  • データストアを作成すると、含まれるページの最初のインデックスが生成されます。
  • 最初のインデックス登録後、新しく検出されたページがインデックスに登録され、ベストエフォート方式で既存のページが再クロールされます。
  • 30 日あたり 50 クエリのレートでクエリが発生するデータストアは定期的に更新されます。

手動更新

[ウェブサイトの高度なインデックス登録] がオンになっているデータストア内の特定のウェブページを更新する場合は、recrawlUris メソッドを呼び出すことができます。uris フィールドを使用して、クロールする各ウェブページを指定します。recrawlUris メソッドは、指定したウェブページがクロールされるか、24 時間後にタイムアウトするまで実行される長時間実行オペレーションです。recrawlUris メソッドがタイムアウトした場合は、クロールするウェブページを指定してメソッドを再度呼び出すことができます。operations.get メソッドをポーリングして、再クロール オペレーションのステータスをモニタリングできます。

再クロールに関する上限

ウェブページのクロール頻度と、一度にクロールできるウェブページの数には制限があります。

  • 1 日あたりの呼び出し。recrawlUris メソッドの呼び出し回数の上限は、プロジェクトごとに 1 日あたり 20 回です。
  • 呼び出しあたりのウェブページ数。recrawlUris メソッドの呼び出しで指定できる uris 値の最大数は 10,000 です。

データストア内のウェブページを再クロールする

ウェブサイトの高度なインデックス登録が有効になっているデータストア内の特定のウェブページを手動でクロールできます。

REST

コマンドラインを使用してデータストア内の特定のウェブページをクロールする手順は次のとおりです。

  1. データストア ID を確認します。データストア ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[AI アプリケーション] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. データストアの [データ] ページで、データストア ID を取得します。

  2. recrawlUris メソッドを呼び出し、uris フィールドを使用して、クロールする各ウェブページを指定します。アスタリスク(*)が含まれていても、各 uri は 1 つのページを表します。ワイルドカード パターンはサポートされていません。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/siteSearchEngine:recrawlUris" \
    -d '{
      "uris": [URIS]
    }'
    

    次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
    • URIS: クロールするウェブページのリスト(例: "https://example.com/page-1", "https://example.com/page-2", "https://example.com/page-3")。

    出力は次のようになります。

    {
      "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-0123456789012345678",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata"
      }
    }
    
  3. 再クロール オペレーションのステータスをモニタリングする場合は、name 値を operations.get オペレーションの入力として保存します。

再クロール オペレーションのステータスをモニタリングする

recrawlUris メソッド(データストア内のウェブページをクロールするために使用)は、指定されたウェブページがクロールされるか、24 時間後にタイムアウトするまで実行される長時間実行オペレーションです。この長時間実行オペレーションのステータスをモニタリングするには、operations.get メソッドをポーリングし、recrawlUris メソッドから返された name 値を指定します。レスポンスが次のいずれかを示すまで、ポーリングを続行します。(1)すべてのウェブページがクロールされた、(2)すべてのウェブページがクロールされる前にオペレーションがタイムアウトした。recrawlUris がタイムアウトした場合は、クロールされなかったウェブサイトを指定して、再度呼び出すことができます。

REST

コマンドラインを使用して再クロール オペレーションのステータスをモニタリングする手順は次のとおりです。

  1. データストア ID を確認します。データストア ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで、[AI アプリケーション] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. データストアの [データ] ページで、データストア ID を取得します。

  2. operations.get メソッドをポーリングします。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/OPERATION_NAME"
    

    次のように置き換えます。

  3. 各回答を評価します。

    • レスポンスが保留中の URI があることを示し、再クロール オペレーションが完了しない場合、ウェブページのクロールはまだ進行中です。ポーリングを続行します。

        {
          "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-0123456789012345678",
          "metadata": {
            "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata",
            "createTime": "2023-09-05T22:07:28.690950Z",
            "updateTime": "2023-09-05T22:22:10.978843Z",
            "validUrisCount": 4000,
            "successCount": 2215,
            "pendingCount": 1785
          },
          "done": false,
          "response": {
            "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse",
          }
        }

      レスポンス フィールドは次のように説明できます。

      • createTime: 長時間実行オペレーションが開始された時刻を示します。
      • updateTime: 長時間実行オペレーションのメタデータが最後に更新された時刻を示します。オペレーションが完了するまで、メタデータが 5 分ごとに更新されることを示します。
      • validUrisCount: recrawlUris メソッドの呼び出しで 4,000 個の有効な URI を指定したことを示します。
      • successCount: 2,215 個の URI が正常にクロールされたことを示します。
      • pendingCount: 1,785 個の URI がまだクロールされていないことを示します。
      • done: 値が false の場合、再クロール オペレーションがまだ進行中であることを示します。

    • レスポンスが保留中の URI がないこと(pendingCount フィールドが返されない)を示し、再クロール オペレーションが完了する場合、ウェブページがクロールされます。ポーリングを停止します。この手順を終了できます。

        {
          "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-0123456789012345678",
          "metadata": {
            "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata",
            "createTime": "2023-09-05T22:07:28.690950Z",
            "updateTime": "2023-09-05T22:37:11.367998Z",
            "validUrisCount": 4000,
            "successCount": 4000
          },
          "done": true,
          "response": {
            "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse"
          }
        }

      レスポンス フィールドは次のように説明できます。

      • createTime: 長時間実行オペレーションが開始された時刻を示します。
      • updateTime: 長時間実行オペレーションのメタデータが最後に更新された時刻を示します。オペレーションが完了するまで、メタデータが 5 分ごとに更新されることを示します。
      • validUrisCount: recrawlUris メソッドの呼び出しで 4,000 個の有効な URI を指定したことを示します。
      • successCount: 4,000 個の URI が正常にクロールされたことを示します。
      • done: 値が true の場合、再クロール オペレーションが完了したことを示します。
  4. レスポンスが保留中の URI があることを示し、再クロール オペレーションが完了する場合、すべてのウェブページがクロールされる前に再クロール オペレーションがタイムアウトしました(24 時間後)。データストア内のウェブページを再クロールするからやり直します。recrawlUris メソッドの新しい呼び出しで、uris フィールドの値に operations.get レスポンスの failedUris 値を使用します。

    例:

    {
      "name": "projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/operations/recrawl-uris-8765432109876543210",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisMetadata",
        "createTime": "2023-09-05T22:07:28.690950Z",
        "updateTime": "2023-09-06T22:09:10.613751Z",
        "validUrisCount": 10000,
        "successCount": 9988,
        "pendingCount": 12
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.RecrawlUrisResponse",
        "failedUris": [
          "https://example.com/page-9989",
          "https://example.com/page-9990",
          "https://example.com/page-9991",
          "https://example.com/page-9992",
          "https://example.com/page-9993",
          "https://example.com/page-9994",
          "https://example.com/page-9995",
          "https://example.com/page-9996",
          "https://example.com/page-9997",
          "https://example.com/page-9998",
          "https://example.com/page-9999",
          "https://example.com/page-10000"
        ],
        "failureSamples": [
          {
            "uri": "https://example.com/page-9989",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9990",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9991",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9992",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9993",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9994",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9995",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9996",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9997",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          },
          {
            "uri": "https://example.com/page-9998",
            "failureReasons": [
              {
                "corpusType": "DESKTOP",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              },
              {
                "corpusType": "MOBILE",
                "errorMessage": "Page was crawled but was not indexed by UCS within 24 hours."
              }
            ]
          }
        ]
      }
    }

    レスポンス フィールドの説明は次のとおりです。

    • createTime。長時間実行オペレーションが開始された時刻。
    • updateTime。長時間実行オペレーションのメタデータが最後に更新された時刻。メタデータは、オペレーションが完了するまで 5 分ごとに更新されます。
    • validUrisCountrecrawlUris メソッドの呼び出しで 10,000 個の有効な URI を指定したことを示します。
    • successCount。9,988 個の URI が正常にクロールされたことを示します。
    • pendingCount。12 個の URI がまだクロールされていないことを示します。
    • done。値が true の場合、再クロール オペレーションが完了したことを示します。
    • failedUris。再クロール オペレーションがタイムアウトする前にクロールされなかった URI のリスト。
    • failureInfo。クロールに失敗した URI に関する情報。10 個を超える URI のクロールが失敗した場合でも、最大で 10 個の failureInfo 配列値が返されます。
    • errorMessagecorpusType による URI のクロールが失敗した理由。詳細については、エラー メッセージをご覧ください。

タイムリーな更新

最新のインデックスを確実に取得するには、新規または更新したページに対して手動更新を行うことをおすすめします。

エラー メッセージ

再クロール オペレーションのステータスをモニタリングしているときに、operations.get メソッドのポーリング中に再クロール オペレーションがタイムアウトすると、operations.get はクロールされなかったウェブページのエラー メッセージを返します。次の表に、エラー メッセージ、エラーが一時的なもの(一時的なエラーで自動的に解決されるもの)かどうか、および、recrawlUris メソッドを再試行する前に実行できるアクションを示します。一時的なエラーはすべてすぐに再試行できます。一時的でないエラーはすべて、修正を適用した後に再試行できます。

エラー メッセージ 一時的なエラーですか? 再クロール再試行前のアクション
ページはクロールされたが、24 時間以内に Vertex AI Search によってインデックス登録されなかった recrawlUris メソッドを呼び出すときに、uris フィールドの値に operations.get レスポンスの failedUris 値を使用します。
サイトの robots.txt によってクロールがブロックされました × ウェブサイトの robots.txt ファイルで URI のブロックを解除し、Googlebot ユーザー エージェントがウェブサイトをクロールできるようにして、再クロールを試してください。詳しくは、robots.txt ファイルの作成と送信方法をご覧ください。 robots.txt ファイルにアクセスできない場合は、ドメイン所有者にお問い合わせください。
ページにアクセスできない × recrawlUris メソッドを呼び出すときに指定した URI を確認します。URI パターンではなく、リテラル URI を指定してください。
クロールがタイムアウトした recrawlUris メソッドを呼び出すときに、uris フィールドの値に operations.get レスポンスの failedUris 値を使用します。
Google クローラーによってページが拒否された recrawlUris メソッドを呼び出すときに、uris フィールドの値に operations.get レスポンスの failedUris 値を使用します。
Google クローラで URL をクロールできなかった × リダイレクトが複数ある場合は、最後のリダイレクトの URI を使用して再試行します。
ページが見つかりませんでした(404) × recrawlUris メソッドを呼び出すときに指定した URI を確認します。URI パターンではなく、リテラル URI を指定してください。

`4xx` エラーコードを返すページは、インデックスから削除されます。

ページには認証が必要です × ウェブサイトの高度なインデックス登録では、認証を必要とするウェブページのクロールはサポートされていません。

削除されたページの処理方法

ページが削除された場合は、削除された URL を手動で更新することをおすすめします。

自動更新または手動更新中にウェブサイトのデータストアがクロールされると、ウェブページが 4xx クライアント エラーコードまたは 5xx サーバー エラーコードで応答した場合、応答しないウェブページはインデックスから削除されます。