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