jferrandis
8 years agoExpert
[SEO] structured content with LD-JSON
Here is a bunch of code i want to share
I had to implement microdata in community and looking in google specifiction i saw LD-JSON format which sounds to be easier to manipulate than microformat
https://developers.google.com/search/docs/guides/intro-structured-data
So here is my code
<#if config.getString("phase", "prod") == "stage"> <#assign endpoint="http://community.stage.brandname.com/" /> <#else> <#assign endpoint="http://communaute.brandname.com/" /> <@liaMarkupCache ttl="6000000" variation="node" anonymousOnly="false" /> </#if> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Organization", "name": "${text.format('brandName')}", "logo": { "@type": "ImageObject", "url": "${asset.get("/html/assets/logo_inline.png")}", "width": 600, "height": 60 }, "url": "${endpoint}", "sameAs": [ "https://www.facebook.com/brandName", "https://www.youtube.com/user/brandName" ] } </script> <#if page.name="CommunityPage"> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "name": "${coreNode.title}", "url": "${endpoint}", "potentialAction": { "@type": "SearchAction", "target": "${endpoint}/t5/forums/searchpage/tab/message?q={search_term_string}", "query-input": "required name=search_term_string" } } </script> <#else> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ <#list page.content.nav.breadcrumb.crumbs as crumb> { "@type": "ListItem", "position": ${crumb?counter}, "item": { "@id": "${crumb.url}", "name": "${crumb.text}" } }<#if crumb?has_next>,</#if></#list>] } </script> </#if> <#if page.name="BlogArticlePage"> <#-- --> <#-- getData : call to the macros--> <#-- --> <#include "queryhandler"/> <#assign messageDataQuery = rest("2.0","/search?q=" + "SELECT * FROM messages WHERE id = '${page.context.thread.topicMessage.uniqueId}'"?url) /> <#-- call to a macro which render imageURL and image Caption according to dimensions --> <@getMessageImage imageDimensions="" messageId=page.context.thread.topicMessage.uniqueId /> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Article", "mainEntityOfPage": { "@type": "WebPage", "@id": "${page.context.thread.topicMessage.webUi.url}" }, "headline": "${page.context.thread.topicMessage.subject}", <#if messageImageURL?? && messageImageURL!=""> "image": { "@type": "ImageObject", "url": "${endpoint}${messageImageURL}", "height": ${messageImageHeight}, "width": ${messageImageWidth} }, </#if> "datePublished": "${page.context.thread.topicMessage.postDate?datetime}", "dateModified": "${messageDataQuery.data.items[0].current_revision.last_edit_time?number_to_datetime}", "author": { "@type": "Person", "name": "${page.context.thread.topicMessage.author.login}" }, "publisher": { "@type": "Organization", "name": "${text.format('brandName')}", "logo": { "@type": "ImageObject", "url": "${asset.get("/html/assets/logo_inline.png")}", "width": 600, "height": 60 } }, "description": "${messageDataQuery.data.items[0].teaser}" } </script> </#if>
this is working good but for blogArticles, google seems to require AMP-page. Looking for the AMP specifications, it looks hard to respect them in lithium.
Did someone tried to do so?