Strukturierte Daten in News

Strukturierte Daten werden im JSON-LD (Linked Data)-Format ausgegeben (Allegmeine Infos zu strukturierten Daten: https://developers.google.com/search/docs/advanced/structured-data/intro-structured-data?hl=de.

Strukturierte Daten für google können immer nur für ein Element/Seite ausgegeben werden, nicht für die Listenansicht.

Ich habe ein neues Partial angelegt und in dem Template Templates\News\Detail.html eingebunden:

 

<n:headerData>
   <script type="application/ld+json">{
      <f:render partial="List/StructuredData" arguments="{newsItem: newsItem,settings:settings}" />
   }
   </script>
</n:headerData>

 

Über den Viehlelper n:headerData können neue Daten zum Header hinzugefügt werden (siehe https://docs.typo3.org/p/georgringer/news/main/en-us/Reference/ViewHelpers/HeaderDataViewHelper.html ).

StructuredData.html:

 

"@context": "https://schema.org",
"@type": "Event",
"name": {newsItem.title->f:format.json()->f:format.htmlentitiesDecode()},
"description":  <f:if condition="{newsItem.teaser}"><f:then>{newsItem.teaser -> f:format.crop(maxCharacters: '{settings.cropMaxCharacters}', respectWordBoundaries:'1') -> f:format.json()->f:format.htmlentitiesDecode()}</f:then>
    <f:else>{newsItem.bodytext -> f:format.crop(maxCharacters: '{settings.cropMaxCharacters}', respectWordBoundaries:'1') ->  f:format.json()->f:format.htmlentitiesDecode()}</f:else>
</f:if>,
"startDate": "<f:format.date format="Y-m-d">{newsItem.datetime}</f:format.date>",<f:if condition="{newsItem.eventEnd}">
"endDate": "<f:format.date format="Y-m-d">{newsItem.eventEnd}</f:format.date>",</f:if>
"location": {
"@type": "Place",
"name": ""
}

 

Ich habe hier das Event-Schema genommen: https://schema.org/Event

Die richtige Codierung habe ich nur mit f:format.json()->f:format.htmlentitiesDecode() hinbekommen. M. M. nach funktioniert format.json() nicht richtig.

Das ganze kann man dann mit dem Google-Developer-Tool testen: https://search.google.com/test/rich-results