To make an article eligible for video rich results, embed a VideoObject
in the article's video property. Google requires name, description,
thumbnailUrl, and uploadDate; contentUrl and/or embedUrl are strongly
recommended.
article = %SchemaOrg.Article{
headline: "Watch: building schema_org",
author: %SchemaOrg.Person{name: "Mike Kostov"},
video: %SchemaOrg.VideoObject{
name: "Building schema_org",
description: "A walkthrough.",
thumbnail_url: "https://example.com/thumb.jpg",
upload_date: "2026-06-30",
content_url: "https://example.com/video.mp4",
embed_url: "https://example.com/embed/abc",
duration: "PT8M30S"
}
}
SchemaOrg.to_json_ld(article)produces:
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Watch: building schema_org",
"author": { "@type": "Person", "name": "Mike Kostov" },
"video": {
"@type": "VideoObject",
"name": "Building schema_org",
"description": "A walkthrough.",
"thumbnailUrl": "https://example.com/thumb.jpg",
"uploadDate": "2026-06-30",
"contentUrl": "https://example.com/video.mp4",
"embedUrl": "https://example.com/embed/abc",
"duration": "PT8M30S"
}
}duration uses ISO 8601 duration
format (PT8M30S = 8 min 30 s). To attach several clips, pass a list to
video:.
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} />