Get a Free Consultation

Video Schema Generator

Create VideoObject JSON-LD with thumbnails, duration, key moments and a LIVE badge. Paste a YouTube link to fill the player and thumbnail for you, preview the result, then copy the code into your video page. Free, no sign-up, and nothing leaves your browser.

Updated Key moments with Clip or SeekToAction Type 2:30, get PT2M30S

Your video

Jump to your JSON-LD code
1Start from YouTube optional

Sets the embed URL and adds YouTube’s thumbnail images. Self-hosting? Skip this and add your file URL in step 4.

2Video details

Converted to ISO 8601 when you leave the field.

3Thumbnails * 1 to 5 image URLs
4Where the video plays give at least one

The player address, for YouTube, Vimeo and other hosts.

The video file itself, for self-hosted video.

Key moments

Live stream, publisher and access

Adds a BroadcastEvent so Google can show a LIVE badge.

Publisher

Links to your Organization schema by @id.

Access and engagement

Region fields take two-letter country codes, comma separated. Only add counts that are shown on the page.

Sets isFamilyFriendly to true.

What is video schema?

Video schema is structured data, based on the schema.org VideoObject type, that describes a video on your page: its title, thumbnail, upload date, duration and where it plays. You add it as JSON-LD to the page that shows the video.

Google uses video markup to find and understand videos, and can show them in Search, the Videos tab, Discover and Google Images with a thumbnail, duration, key moments or a LIVE badge.

Google requires three properties: name, thumbnailUrl and uploadDate. Everything else is recommended, and the more you add, the more features your video can be eligible for.

VideoObject example

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "How to Add Video Schema Markup",
  "description": "A two-minute walkthrough of VideoObject JSON-LD.",
  "thumbnailUrl": [
    "https://i.ytimg.com/vi/VIDEO_ID/maxresdefault.jpg"
  ],
  "uploadDate": "2026-10-14T09:00:00+05:30",
  "duration": "PT2M30S",
  "embedUrl": "https://www.youtube.com/embed/VIDEO_ID",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Filling in the fields",
      "startOffset": 40,
      "endOffset": 105,
      "url": "https://www.example.com/videos/schema/?t=40"
    }
  ]
}

Which VideoObject properties does Google require?

Three properties are required. The rest are recommended and unlock specific video features.

Based on Google’s Video structured data documentation. Last checked October 2026.
PropertyWhat to addGoogle status
nameThe video’s title, as shown on the pageRequired
thumbnailUrlOne or more crawlable thumbnail imagesRequired
uploadDateFirst publish date in ISO 8601, with a time zoneRequired
contentUrl, embedUrlThe video file, the player, or bothRecommended
description, durationA short summary and the length, such as PT2M30SRecommended
hasPart or SeekToActionKey moments, set by you or found by GoogleRecommended
publicationA BroadcastEvent for live streamsNeeded for LIVE
expires, regionsAllowed, ineligibleRegionWhen and where the video is availableIf it applies
interactionStatisticView count shown on the pageIf it applies

Why isn’t my video showing in Google?

Valid markup is only one part. Google shows video results mainly for watch pages: pages where the video is the main content, not a clip tucked beside an article. These four checks cover the most common reasons a video is not indexed.

Make it the main contentPlace the video prominently, near the top, on a page dedicated to it.
Keep files crawlableDo not block the thumbnail, file or player in robots.txt or behind a login.
Use stable thumbnailsThumbnail URLs should not change or expire.
Check Search ConsoleThe Video indexing report shows which pages Google found and why some were not indexed.

File, player and page URLs

{
  "contentUrl": "https://cdn.example.com/demo.mp4",
  "embedUrl": "https://www.youtube.com/embed/VIDEO_ID",
  "url": "https://www.example.com/videos/demo/"
}

How do you get key moments for a video?

Key moments let searchers jump to a section of your video from the results. There are two ways to mark them up, and you use one or the other, not both.

Clip

You choose the moments

List each chapter with a name, start and end time in seconds, and a URL that starts the video at that point. Best when you know your chapters.

"hasPart": [{
  "@type": "Clip",
  "name": "Testing in Google",
  "startOffset": 105,
  "endOffset": 150,
  "url": "https://www.example.com/v/?t=105"
}]

SeekToAction

Google finds the moments

Tell Google how your URLs jump to a time, and it identifies the key moments itself. Best when you have many videos and no chapter data.

"potentialAction": {
  "@type": "SeekToAction",
  "target": "https://www.example.com/v/?t={seek_to_second_number}",
  "startOffset-input":
    "required name=seek_to_second_number"
}

For videos hosted on YouTube, Google can also read chapters from the YouTube description. Key moments are never guaranteed; Google decides whether to show them.

How do you get a LIVE badge on a stream?

Add a BroadcastEvent inside the video’s publication property, with isLiveBroadcast set to true and the stream’s start time. Add the end time once you know it. Google also recommends notifying it through the Indexing API when a stream starts, so the page is crawled in time.

For the type itself, use VideoObject for almost everything. For a film, a TV episode or a music video, this generator outputs two types, such as ["VideoObject", "Movie"], so Google’s video features still read it.

Live stream markup

"publication": {
  "@type": "BroadcastEvent",
  "isLiveBroadcast": true,
  "startDate": "2026-11-02T18:00:00+05:30",
  "endDate": "2026-11-02T19:30:00+05:30"
}

How do you add video schema to a page?

The generator above writes the code. These four steps take it live.

  1. Paste the video link

    Fill the player and thumbnail from YouTube, or add your own file URL.

  2. Add the details

    Enter the title, upload date and duration, plus key moments if you have them.

  3. Copy the code

    Copy the script tag, or download the JSON file.

  4. Paste and test

    Add it to the video page’s head, then run the Rich Results Test.

Add one VideoObject per video, on the page that shows it. Video plugins and some themes already output this markup, so check your page source first and avoid publishing two copies.

Where do you paste the code on popular platforms?

Add the code only to the page that shows the video.

WordPress

Check whether your SEO or video plugin already adds VideoObject. If not, add the script to the post with a plugin such as WPCode.

Shopify

Paste the script into the template for the product or page that shows the video, before the closing head tag.

Wix

Open the page’s SEO settings, choose Advanced SEO, then Structured data markup, and paste the JSON.

Google Tag Manager

Create a Custom HTML tag with the script and fire it only on the video page.

Video schema questions, answered

Short answers on fields, key moments, live streams and indexing.

What is video schema used for?

Video schema describes a video’s title, thumbnail, upload date, duration and where it plays. Google uses it to find and understand videos and can show them in Search, the Videos tab and Discover with thumbnails, key moments or a LIVE badge.

Which fields does Google require for VideoObject?

Google requires name, thumbnailUrl and uploadDate. It recommends description, duration, contentUrl or embedUrl, and key moments. The upload date needs a time zone.

Can I use video schema for a YouTube video?

Yes. Put the markup on your own page that embeds the video, use the YouTube embed URL as embedUrl and a YouTube thumbnail as thumbnailUrl. Paste the YouTube link into this generator to fill both.

What is the difference between contentUrl and embedUrl?

contentUrl points to the video file itself and is used for self-hosted video. embedUrl points to an embeddable player, such as a YouTube or Vimeo embed. You can include either or both.

How do I write the duration?

Duration uses ISO 8601, such as PT2M30S for two minutes thirty seconds or PT1H5M9S for one hour five minutes nine seconds. Type 2:30 or 1:05:09 in this generator and it converts the value.

Should I use Clip or SeekToAction for key moments?

Use Clip when you know your chapters and want to name them yourself. Use SeekToAction when you want Google to find the moments, by telling it how your URLs jump to a time. Use one or the other, not both.

How do I get a LIVE badge?

Add a BroadcastEvent in the publication property with isLiveBroadcast set to true and the start time. Google also recommends using the Indexing API so the page is crawled while the stream is live.

Why is my video not showing in Google?

Google mainly shows video results for watch pages, where the video is the main content. Check that the video is prominent, the files and thumbnails are crawlable, and look at the Video indexing report in Search Console.

Does video schema help with AI Overviews?

Google says AI features need no special markup. Video schema still gives search engines clear facts about your video, which supports accurate understanding. It does not guarantee being cited.

Is this video schema generator free?

Yes. It is completely free, with no sign-up and no limit. Everything runs in your browser, so your details are never uploaded to a server.

Videos not getting indexed?

Search Savvy’s technical SEO team builds proper watch pages, fixes video indexing issues and adds structured data across your video library.

Call our SEO team