An article or blog post is the most common rich result. Use BlogPosting (or
Article / NewsArticle) with an author and a publisher carrying its logo.
article = %SchemaOrg.BlogPosting{
headline: "Shipping schema_org",
description: "How we built a typed Schema.org library.",
image: "https://example.com/cover.jpg",
date_published: "2026-06-30",
date_modified: "2026-06-30",
author: %SchemaOrg.Person{name: "Mike Kostov", url: "https://example.com/mike"},
publisher: %SchemaOrg.Organization{
name: "Acme Inc.",
logo: %SchemaOrg.ImageObject{url: "https://example.com/logo.png"}
}
}
SchemaOrg.to_json_ld(article)produces:
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Shipping schema_org",
"description": "How we built a typed Schema.org library.",
"image": "https://example.com/cover.jpg",
"datePublished": "2026-06-30",
"dateModified": "2026-06-30",
"author": {
"@type": "Person",
"name": "Mike Kostov",
"url": "https://example.com/mike"
},
"publisher": {
"@type": "Organization",
"name": "Acme Inc.",
"logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
}
}Dates are passed through verbatim — use ISO 8601 strings (or
Date.to_iso8601/1 / DateTime.to_iso8601/1). To attach media to the article,
see Article with a video clip and
Article with an audio clip.
Embed it in a page
SchemaOrg.to_script_tag(article) # HTML-safe <script type="application/ld+json"> stringIn a Phoenix HEEx template (needs :phoenix_live_view):
<SchemaOrg.HTML.json_ld data={@article} />