Article with a video clip

Copy Markdown View Source

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"> string

In a Phoenix HEEx template (needs :phoenix_live_view):

<SchemaOrg.HTML.json_ld data={@article} />