Trong nguồn cấp dữ liệu theo lô, phiên bản của một thực thể được xác định thông qua trường dateModified
trong phong bì của nguồn cấp dữ liệu:
{
"@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 */
]
}
Tất cả các thực thể được liệt kê trong trường dataFeedElement
sẽ có cùng một dấu thời gian, như được liệt kê trong phong bì.
Ví dụ: bạn có thể có nguồn cấp dữ liệu sau đây với hai thực thể:
{
"@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"
...
}
]
}
Cả thực đơn và thực thể nhà hàng, sau khi nhận và xử lý, sẽ được tạo phiên bản riêng là "2018-12-28T06:30:00:123-07:00".
Tạo phiên bản bằng các bản cập nhật gia tăng
Khi gửi một thực thể bằng thông tin cập nhật về khoảng không quảng cáo, phiên bản sẽ được đặt thông qua trường update_time
(trong trường hợp lệnh gọi thêm/cập nhật) hoặc trường delete_time
(trong trường hợp lệnh gọi xoá). Vì các trường này không bắt buộc, nên dấu thời gian mặc định được đặt thành thời điểm Google nhận được lệnh gọi.
Ví dụ 1: đặt update_time một cách rõ ràng
Giả sử bạn nhận được lệnh gọi gia tăng sau đây vào lúc 28/12/2018 06:30:10:123-07:00 cho một nhà hàng hoàn toàn mới. Dưới đây là yêu cầu POST HTTP cho thực thể đó với mã nhận dạng "http://www.provider.com/somerestaurant", giả sử nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Dưới đây, nội dung tải trọng JSON chứa trường update_time
. Thực thể có mã nhận dạng "http://www.provider.com/somerestaurant" sẽ được tạo phiên bản là 6:30:00 chứ không phải thời điểm nhận được thực thể (mười giây sau đó vào lúc 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"
},
"update_time":"2018-12-28T06:30:00:123-07:00"
}
Ví dụ 2: đặt update_time ngầm
Giả sử bạn nhận được lệnh gọi gia tăng sau đây vào lúc 28/12/2018 06:30:10:123-07:00 cho một nhà hàng hoàn toàn mới. Dưới đây là yêu cầu POST HTTP cho thực thể đó với mã nhận dạng "http://www.provider.com/somerestaurant", giả sử nguồn cấp dữ liệu sử dụng giản đồ khoảng không quảng cáo v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Dưới đây, nội dung tải trọng JSON không chứa trường update_time
. Do đó, thực thể có mã nhận dạng "http://www.provider.com/somerestaurant" sẽ có phiên bản là 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"
}
}
Phân phối phiên bản giữa lô và tăng dần
Một thực thể được gửi đến Google sẽ chỉ được xử lý và phân phát nếu có phiên bản mới nhất. Xin lưu ý rằng các thực thể được gửi qua lô thường mất vài ngày để được xử lý, trong khi các thực thể được gửi qua API tăng dần sẽ được xử lý ngay lập tức.
Các phương pháp hay nhất
- Đặt các trường
update_time
vàdateModified
theo thứ tự tăng dần và theo lô, tương ứng, theo thời điểm thực thể được sửa đổi trong hệ thống của bạn. - Nếu một nguồn cấp dữ liệu theo lô (tệp) liệt kê nhiều thực thể cấp cao nhất (ví dụ: bạn ghép nối nhà hàng với các dịch vụ và thực đơn), hãy cập nhật dấu thời gian khi dữ liệu của một thực thể được cập nhật.
- Trong các lệnh gọi gia tăng, bạn nên đặt rõ ràng trường
update_time
. - Điều quan trọng là sau khi thực hiện một lệnh gọi gia tăng, dấu thời gian của nguồn cấp dữ liệu tương ứng (
dateModified
) cũng được cập nhật trước khi Google tìm nạp lại.
Ví dụ:
Google tìm nạp tệp sau vào lúc 11 giờ sáng ngày 28 tháng 12 năm 2018 cho một nhà hàng hoàn toàn mới:
{
"@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"
...
}
]
}
Các thực thể này được xử lý thành công và được tạo phiên bản là "2018-12-28T06:30:00-07:00". Vì nguồn cấp dữ liệu theo lô cần thời gian để xử lý nên các nguồn cấp dữ liệu này thường được phân phát sau 2 ngày.
Tuy nhiên, vào lúc 1 giờ chiều, hệ thống của đối tác đã cập nhật số điện thoại của nhà hàng, dẫn đến lệnh gọi gia tăng sau đây mà Google nhận được vào lúc 13:05 (5 giây sau):
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
được cung cấp rõ ràng và lớn hơn (gần đây hơn) phiên bản trước (6:30 sáng cùng ngày), vì vậy, thực thể nhà hàng hiện có phiên bản là "2018-12-28T13:00:00-07:00". Tuy nhiên, thực đơn và các thực thể dịch vụ vẫn có phiên bản là "2018-12-28T06:30:00-07:00".
Đã có một lệnh gọi tăng dần, vì vậy, nguồn cấp dữ liệu theo lô sẽ được cập nhật bằng dấu thời gian tương ứng mới. Ngoài ra, các thay đổi tương ứng sẽ được áp dụng cho các thực thể liên quan (thực thể nhà hàng đã cập nhật số điện thoại).
{
"@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"
...
}
]
}
Vào lúc 23:00 ngày hôm sau (29/12/2018), nguồn cấp dữ liệu sẽ được tìm nạp lại. Nhà hàng vẫn có cùng phiên bản (13:00 ngày 28 tháng 12), vì vậy, thực thể này sẽ bị xoá và phiên bản hiện tại sẽ được giữ lại. Tuy nhiên, các thực thể Trình đơn và Dịch vụ được cập nhật bằng phiên bản mới.
Dấu thời gian của sơ đồ trang web
Tiêu đề phản hồi last-modified
trong sơ đồ trang web không ảnh hưởng đến phiên bản của một thực thể. Điều này ảnh hưởng đến thời điểm Google tìm nạp nguồn cấp dữ liệu.
Các phương pháp hay nhất
- Chỉ cập nhật tiêu đề phản hồi khi tất cả tệp đều được cập nhật và sẵn sàng được tìm nạp.
- Sử dụng rõ ràng
update_time
vàdelete_time
theo cách tăng dần. - Đặt
update_time
,delete_time
vàdateModified
thành thời điểm dữ liệu thay đổi ở phía bạn.