웹페이지 새로고침

데이터 스토어에서 기본 웹사이트 검색을 사용하는 경우 매장 색인의 최신성은 Google 검색에서 제공되는 최신성을 반영합니다.

데이터 스토어에서 고급 웹사이트 색인 생성이 사용 설정된 경우 데이터 스토어의 웹페이지는 다음과 같은 방식으로 새로고침됩니다.

  • 자동 새로고침
  • 수동 새로고침

이 페이지에서는 두 가지 방법을 모두 설명합니다.

자동 새로고침

Vertex AI Search는 다음과 같이 자동 새로고침을 실행합니다.

  • 데이터 스토어를 만들면 포함된 페이지의 초기 색인이 생성됩니다.
  • 초기 색인 생성 후에는 새로 발견된 페이지의 색인을 생성하고 최선을 다해 기존 페이지를 다시 크롤링합니다.
  • 쿼리 빈도가 30일 동안 50회인 데이터 스토어를 정기적으로 새로고침합니다.

수동 새로고침

고급 웹사이트 색인 생성이 사용 설정된 데이터 스토어에서 특정 웹페이지를 새로고침하려면 recrawlUris 메서드를 호출하면 됩니다. uris 필드를 사용하여 크롤링할 각 웹페이지를 지정합니다. recrawlUris 메서드는 지정된 웹페이지가 크롤링될 때까지 또는 24시간 후에 시간 초과될 때까지 실행되는 장기 실행 작업입니다. recrawlUris 메서드의 시간이 초과되면 메서드를 다시 호출하여 크롤링할 웹페이지를 지정할 수 있습니다. operations.get 메서드를 폴링하여 재크롤링 작업의 상태를 모니터링할 수 있습니다.

재크롤링 한도

웹페이지를 크롤링할 수 있는 빈도와 한 번에 크롤링할 수 있는 웹페이지 수에는 제한이 있습니다.

  • 1일당 호출. recrawlUris 메서드의 최대 호출 횟수는 프로젝트당 하루에 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 메서드 호출에서 유효한 URI 4,000개를 지정했음을 나타냅니다.
      • successCount: 2,215개의 URI가 성공적으로 크롤링되었음을 나타냅니다.
      • pendingCount: 아직 크롤링되지 않은 URI가 1,785개 있음을 나타냅니다.
      • 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 메서드 호출에서 유효한 URI 4,000개를 지정했음을 나타냅니다.
      • 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분마다 업데이트됩니다.
    • validUrisCount: recrawlUris 메서드 호출에서 유효한 URI 10,000개를 지정했음을 나타냅니다.
    • successCount: 9,988개의 URI가 성공적으로 크롤링되었음을 나타냅니다.
    • pendingCount: 아직 크롤링되지 않은 URI가 12개 있음을 나타냅니다.
    • 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 서버 오류 코드로 응답하면 응답하지 않는 웹페이지가 색인에서 삭제됩니다.