In Ihren Batchfeeds wird die Version einer Entität über das Feld dateModified
im Envelope des Feeds bestimmt:
{
"@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 */
]
}
Alle im Feld dataFeedElement
aufgeführten Entitäten haben denselben Zeitstempel wie im Umschlag angegeben.
Angenommen, Sie haben den folgenden Feed mit zwei Entitäten:
{
"@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"
...
}
]
}
Sowohl die Menü- als auch die Restaurantentitäten werden nach Erhalt und Verarbeitung einzeln mit der Version „2018-12-28T06:30:00:123-07:00“ versehen.
Versionierung mit inkrementellen Updates
Wenn Sie eine Entität mithilfe von Inventaraktualisierungen senden, wird die Version über das Feld update_time
(bei einem Add-/Update-Aufruf) oder das Feld delete_time
(bei einem Löschaufruf) festgelegt. Da diese Felder optional sind, wird der Standardzeitstempel auf den Zeitpunkt festgelegt, zu dem Google den Anruf erhalten hat.
Beispiel 1: update_time explizit festgelegt
Angenommen, der folgende inkrementelle Aufruf wird am 28.12.2018 um 06:30:10:123-07:00 für ein völlig neues Restaurant empfangen. Hier ist die HTTP-POST-Anfrage für diese Entität mit der ID „http://www.provider.com/somerestaurant“, vorausgesetzt, der Datenfeed verwendet das Inventarschema v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Unten enthält der JSON-Nutzlasttext das Feld update_time
. Die Entität mit der ID „http://www.provider.com/somerestaurant“ wird mit der Version 6:30:00 versehen, nicht mit dem Zeitpunkt, zu dem sie empfangen wurde (zehn Sekunden später um 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"
}
Beispiel 2: update_time implizit festgelegt
Angenommen, der folgende inkrementelle Aufruf wird am 28.12.2018 um 06:30:10:123-07:00 für ein völlig neues Restaurant empfangen. Hier ist die HTTP-POST-Anfrage für diese Entität mit der ID „http://www.provider.com/somerestaurant“, vorausgesetzt, der Feed verwendet das Inventarschema v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Unten enthält der JSON-Nutzlasttext nicht das Feld update_time
. Die Entität mit der ID „http://www.provider.com/somerestaurant“ erhält daher die Versionsnummer 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"
}
}
Versionierung zwischen Batch- und inkrementellen Versionen
Eine an Google gesendete Entität wird nur verarbeitet und ausgeliefert, wenn sie die neueste Version hat. Die Verarbeitung von Entitäten, die über die Batch-API gesendet werden, dauert in der Regel einige Tage. Entitäten, die über die inkrementelle API gesendet werden, werden sofort verarbeitet.
Best Practices
- Legen Sie die Felder
update_time
unddateModified
in „inkrementell“ bzw. „Batch“ fest, je nachdem, wann das Entitätselement in Ihren Systemen geändert wurde. - Wenn in einem Batchfeed (Datei) mehr als eine Entität der obersten Ebene aufgeführt ist (z. B. wenn Sie Ihre Restaurants mit Dienstleistungen und Menüs verknüpfen), aktualisieren Sie den Zeitstempel, wenn die Daten einer Entität aktualisiert werden.
- Bei inkrementellen Aufrufen empfehlen wir dringend, das Feld
update_time
explizit festzulegen. - Nach einem inkrementellen Aufruf muss der entsprechende Feed-Zeitstempel (
dateModified
) aktualisiert werden, bevor Google ihn noch einmal abruft.
Beispiel
Google ruft am 28.12.2018 um 11:00 Uhr die folgende Datei für ein völlig neues Restaurant ab:
{
"@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"
...
}
]
}
Diese Entitäten werden erfolgreich verarbeitet und mit der Version „2018-12-28T06:30:00-07:00“ versehen. Da die Verarbeitung von Batchfeeds einige Zeit in Anspruch nimmt, werden sie in der Regel zwei Tage später ausgeliefert.
Um 13:00 Uhr wird die Telefonnummer des Restaurants jedoch im System des Partners aktualisiert. Dies führt zu einem zusätzlichen Aufruf, der Google 5 Sekunden später, also um 13:05 Uhr, erreicht:
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"
}
Die update_time
ist explizit angegeben und größer (aktueller) als die vorherige Version (6:30 Uhr desselben Tages). Daher hat die Restaurantentität jetzt die Version „2018-12-28T13:00:00-07:00“. Die Menü- und Dienstleistungsentitäten haben jedoch weiterhin die Version „2018-12-28T06:30:00-07:00“.
Es gab einen inkrementellen Aufruf, sodass der Batchfeed mit dem neuen entsprechenden Zeitstempel aktualisiert wird. Außerdem werden die entsprechenden Änderungen auf die relevanten Entitäten angewendet (die Telefonnummer der Restaurantentität wird aktualisiert).
{
"@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"
...
}
]
}
Am nächsten Tag (29.12.2018) um 23:00 Uhr wird der Feed noch einmal abgerufen. Das Restaurant hat weiterhin dieselbe Version (13:00 Uhr am 28. Dezember). Daher wird dieses Element gelöscht und die aktuelle Version beibehalten. Die Entitäten „Menü“ und „Dienst“ werden jedoch mit einer neuen Version aktualisiert.
Sitemap-Zeitstempel
Der last-modified
-Antwortheader in der Sitemap hat keinen Einfluss auf die Version eines Elements. Sie wirkt sich darauf aus, wann der Feed von Google abgerufen wird.
Best Practices
- Aktualisiere den Antwortheader nur, wenn alle Dateien auf dem neuesten Stand sind und abgerufen werden können.
- Verwenden Sie
update_time
unddelete_time
explizit in „inkrementell“. - Legen Sie für
update_time
,delete_time
unddateModified
fest, wann sich die Daten bei Ihnen ändern.