ウェブページを更新する

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

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

  • 自動更新
  • 手動更新

このページでは、両方の方法について説明します。

自動更新

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

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

手動更新

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

再クロールに関する制限

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

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

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

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

REST

コマンドラインを使用してデータストア内の特定のウェブページをクロールするには、次の操作を行います。

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

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

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

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

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

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

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

REST

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

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

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

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

    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 配列値が返されます。
    • errorMessage。URI がクロールされなかった理由(corpusType による)。詳細については、エラー メッセージをご覧ください。

タイムリーな更新

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

エラー メッセージ

再クロール オペレーションのステータスをモニタリングしているときに、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 サーバー エラーコードで応答した場合、応答しないウェブページはインデックスから削除されます。