tạo phiên bản v1 trong nguồn cấp dữ liệu hàng loạt

Trong nguồn cấp dữ liệu hàng loạt của bạn, 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 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 2 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"
      ...
    }
  ]
}

Sau khi được nhận và xử lý, cả thực thể thực đơn và nhà hàng đều 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 tính năng cập nhật kho hàng, phiên bản sẽ được thiết lập thông qua trường update_time (trong trường hợp là lệnh gọi thêm/cập nhật) hoặc delete_time (trong trường hợp lệnh gọi xoá). Do những trường này là không bắt buộc, dấu thời gian mặc định được đặt thành thời điểm Google nhận được cuộc gọi.

Ví dụ 1: update_time được đặt rõ ràng

Giả sử cuộc gọi tăng dần sau đây được nhận vào 2018-12-28T06:30:10:123-07:00 cho một nhà hàng hoàn toàn mới. Đây là yêu cầu POST qua HTTP cho thực thể đó có mã nhận dạng là "http://www.provider.com/some Thay", 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

Ở bên dưới, phần nội dung tải trọng JSON chứa trường update_time. Thực thể có Mã "http://www.provider.com/some Thay" dẫn đến thực thể này được được tạo phiên bản là 6:30:00 chứ không phải khi nhận được (mười giây sau đó 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: update_time được đặt ngầm

Giả sử cuộc gọi tăng dần sau đây được nhận vào 2018-12-28T06:30:10:123-07:00 cho một nhà hàng hoàn toàn mới. Đây là yêu cầu POST qua HTTP cho thực thể đó có mã nhận dạng "http://www.provider.com/some Xoay", giả sử nguồn cấp dữ liệu sử dụng phiên bản 1 giản đồ khoảng không quảng cáo:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Bên dưới, nội dung tải trọng JSON không chứa trường update_time. Chiến lược phát hành đĩa đơn thực thể có mã nhận dạng "http://www.provider.com/some Thay" do đó, dẫn đến thực thể này đang được tạo 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"
  }
}

Tạo phiên bản giữa lô và tăng dần

Một thực thể gửi đến Google chỉ được xử lý và phân phát nếu có thông tin 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 nhận được xử lý, trong khi các thực thể được gửi thông qua API gia tăng được xử lý ngay lập tức.

Các phương pháp hay nhất

  • Thiết lập các trường update_timedateModified theo mức độ gia tăng và hàng loạt. tương ứng, theo thời điểm đối tượng được sửa đổi trong hệ thống của bạn.
  • Nếu một nguồn cấp dữ liệu 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), sau đó cập nhật dấu thời gian thành dữ liệu của một thực thể sẽ đượ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.
  • Sau khi thực hiện lệnh gọi tăng dần, nguồn cấp dữ liệu tương ứng bắt buộc timestamp (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 đây vào lúc 11 giờ sáng ngày 28 tháng 12 năm 2018 cho một phiên bản hoàn toàn mới nhà hàng:

{
  "@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"
      ...
    }
  ]
}

Những 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 hàng loạt mất nhiều thời gian để xử lý, nên những thường được phân phát 2 ngày sau đó.

Tuy nhiên, vào lúc 1 giờ chiều, hệ thống của đối tác sẽ nhận được thông tin cập nhật cho điện thoại của nhà hàng số điện thoại này, dẫn đến cuộc gọi gia tăng sau đây mà Google nhận được 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 một cách rõ ràng và lớn hơn (gần đây hơn) so với 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 là phiên bản là "2018-12-28T13:00:00-07:00". Tuy nhiên, thực thể trình đơn và dịch vụ vẫn được tạo phiên bản là "2018-12-28T06:30:00-07:00".

Có một lệnh gọi gia tăng, vì vậy nguồn cấp dữ liệu hàng loạt được cập nhật bằng dấu thời gian tương ứng. Ngoài ra, các thay đổi tương ứng cũng được áp dụng cho các đối tượng có liên quan (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"
      ...
    }
  ]
}

Ngày tiếp theo (29/12/2018) lúc 11 giờ tối, nguồn cấp dữ liệu được tìm nạp lại. Nhà hàng phiên bản này vẫn giữ nguyên (1 giờ chiều ngày 28 tháng 12), nên 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ụ là đã cập nhật 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 của một thực thể. Trạng thái 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ả cá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_timedelete_time theo mức độ gia tăng.
  • Đặt update_time, delete_timedateModified thành thời điểm dữ liệu thay đổi ở phía bạn.