일괄 피드에서 항목의 버전은 피드의 봉투에 있는 dateModified
필드를 통해 결정됩니다.
{
"@context": "http://schema.googleapis.com",
"dateModified": "2018-12-28T06:30:00:123-07:00",
"@type": "DataFeed",
"dataFeedElement": [
/* All the items that are part of this feed go here */
]
}
dataFeedElement
필드에 나열된 모든 항목에는 봉투에 나열된 것과 동일한 타임스탬프가 있습니다.
예를 들어 다음과 같이 두 개의 항목이 있는 피드가 있을 수 있습니다.
{
"@context": "http://schema.googleapis.com",
"@type": "DataFeed",
"dateModified": "2018-12-28T06:30:00:123-07:00",
"dataFeedElement": [
{
"@type": "Restaurant",
"@id": "http://www.provider.com/somerestaurant",
...
},
{
"@type": "Menu",
"@id": "http://www.provider.com/somerestaurant/menu/1"
...
}
]
}
메뉴 및 레스토랑 항목은 수신 및 처리되면 '2018-12-28T06:30:00:123-07:00'과 같이 개별 버전이 지정됩니다.
증분 업데이트로 버전 관리
인벤토리 업데이트를 사용하여 항목을 전송할 때 버전은 update_time
필드 (추가/업데이트 호출의 경우) 또는 delete_time
필드 (삭제 호출의 경우)를 통해 설정됩니다. 이 필드는 선택사항이므로 기본 타임스탬프는 Google에서 호출을 수신한 시점으로 설정됩니다.
예 1: update_time이 명시적으로 설정됨
완전히 새로운 레스토어에 대해 2018-12-28T06:30:10:123-07:00에 다음과 같은 증분 호출이 수신되었다고 가정해 보겠습니다. 데이터 피드에서 v1 인벤토리 스키마를 사용한다고 가정하면 ID가 'http://www.provider.com/somerestaurant'인 항목의 HTTP POST 요청은 다음과 같습니다.
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
아래 JSON 페이로드 본문에는 update_time
필드가 포함되어 있습니다. ID가 'http://www.provider.com/somerestaurant'인 항목은 수신 시점 (10초 후 6:30:10)이 아닌 6:30:00으로 버전이 지정됩니다.
{
// This envelope is to be used for incremental.
"entity": {
// Note: "data" is not serialized as a string in our example for readability.
"data": "[entity in JSON format serialized as a string]",
"vertical": "FOODORDERING"
},
"update_time":"2018-12-28T06:30:00:123-07:00"
}
예 2: update_time이 암시적으로 설정됨
완전히 새로운 레스토어에 대해 2018-12-28T06:30:10:123-07:00에 다음과 같은 증분 호출이 수신되었다고 가정해 보겠습니다. 피드에서 v1 인벤토리 스키마를 사용한다고 가정할 때 ID가 'http://www.provider.com/somerestaurant'인 항목의 HTTP POST 요청은 다음과 같습니다.
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
아래 JSON 페이로드 본문에는 update_time
필드가 포함되지 않습니다. 따라서 ID가 'http://www.provider.com/somerestaurant'인 항목은 6:30:10 버전으로 설정됩니다.
{
// This envelope is to be used for incremental.
"entity": {
//Note: "data" is not serialized as a string in our example for readability.
"data": "[entity in JSON format serialized as a string]",
"vertical": "FOODORDERING"
}
}
일괄 버전과 증분 버전 간 버전 관리
Google에 전송된 항목은 최신 버전이 있는 경우에만 처리되고 게재됩니다. 일괄 처리를 통해 전송된 항목은 일반적으로 처리하는 데 며칠이 걸리는 반면 증분 API를 통해 전송된 항목은 즉시 처리됩니다.
권장사항
- 시스템에서 항목이 수정된 시점에 따라 증분 및 일괄 처리에서 각각
update_time
및dateModified
필드를 설정합니다. - 일괄 피드 (파일)에 두 개 이상의 최상위 항목이 나열된 경우 (예: 레스토랑을 서비스 및 메뉴와 페어링) 항목의 데이터가 업데이트될 때 타임스탬프를 업데이트합니다.
- 증분 호출에서는
update_time
필드를 명시적으로 설정하는 것이 좋습니다. - 증분 호출이 이루어지면 Google에서 다시 가져오기 전에 상응하는 피드 타임스탬프 (
dateModified
)도 업데이트되어야 합니다.
예
Google은 2018년 12월 28일 오전 11시에 완전히 새로운 레스토랑에 관한 다음 파일을 가져옵니다.
{
"@context": "http://schema.googleapis.com",
"@type": "DataFeed",
"dateModified": "2018-12-28T06:30:00-07:00",
"dataFeedElement": [
{
"@type": "Restaurant",
"@id": "http://www.provider.com/newrestaurant",
...
},
{
"@type": "Menu",
"@id": "http://www.provider.com/newrestaurant/menu/1"
...
}
{
"@type": "Service",
"@id": "http://www.provider.com/newrestaurant/service/1"
...
}
]
}
이러한 항목은 성공적으로 처리되고 '2018-12-28T06:30:00-07:00'으로 버전이 지정됩니다. 일괄 피드는 처리하는 데 시간이 걸리므로 일반적으로 2일 후에 게재됩니다.
하지만 오후 1시에 파트너 시스템에서 음식점 전화번호를 업데이트하여 다음과 같은 증분 호출이 발생하고 Google은 5초 후인 13:05에 이를 수신합니다.
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
// This envelope is to be used for incremental.
"entity": {
//Note: "data" is not serialized as a string in our example for readability.
"data": "[entity in JSON format serialized as a string]",
"vertical": "FOODORDERING"
},
"update_time":"2018-12-28T13:00:00-07:00"
}
update_time
는 명시적으로 제공되며 이전 버전 (같은 날 오전 6시 30분)보다 크므로 (최신 버전) 식당 항목의 버전이 '2018-12-28T13:00:00-07:00'으로 설정됩니다. 그러나 메뉴 및 서비스 항목은 여전히 '2018-12-28T06:30:00-07:00'으로 버전이 지정됩니다.
증분 호출이 있었으므로 일괄 피드가 새 상응하는 타임스탬프로 업데이트됩니다. 또한 상응하는 변경사항이 관련 항목에 적용됩니다 (식당 항목의 전화번호가 업데이트됨).
{
"@context": "http://schema.googleapis.com",
"@type": "DataFeed",
"dateModified": "2018-12-28T13:00:00-07:00",
"dataFeedElement": [
{
"@type": "Restaurant",
"@id": "http://www.provider.com/newrestaurant",
...
},
{
"@type": "Menu",
"@id": "http://www.provider.com/newrestaurant/menu/1"
...
}
{
"@type": "Service",
"@id": "http://www.provider.com/newrestaurant/service/1"
...
}
]
}
다음 날 (2018-12-29) 오후 11시에 피드가 다시 가져옵니다. 레스토랑의 버전은 여전히 동일하므로 (12월 28일 오후 1시) 이 항목은 삭제되고 현재 버전은 유지됩니다. 하지만 메뉴 및 서비스 항목은 새 버전으로 업데이트됩니다.
사이트맵 타임스탬프
사이트맵의 last-modified
응답 헤더는 항목의 버전에 영향을 주지 않습니다. Google에서 피드를 가져오는 시점에 영향을 미칩니다.
권장사항
- 모든 파일이 최신 상태이고 가져올 준비가 되었을 때 만 응답 헤더를 업데이트합니다.
- 증분에서
update_time
및delete_time
를 명시적으로 사용합니다. update_time
,delete_time
,dateModified
를 데이터가 변경되는 시점으로 설정합니다.