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.
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.
Adds a BroadcastEvent so Google can show a LIVE badge.
Links to your Organization schema by @id.
Region fields take two-letter country codes, comma separated. Only add counts that are shown on the page.
Sets isFamilyFriendly to true.
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.
{
"@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"
}
]
}Three properties are required. The rest are recommended and unlock specific video features.
| Property | What to add | Google status |
|---|---|---|
name | The video’s title, as shown on the page | Required |
thumbnailUrl | One or more crawlable thumbnail images | Required |
uploadDate | First publish date in ISO 8601, with a time zone | Required |
contentUrl, embedUrl | The video file, the player, or both | Recommended |
description, duration | A short summary and the length, such as PT2M30S | Recommended |
hasPart or SeekToAction | Key moments, set by you or found by Google | Recommended |
publication | A BroadcastEvent for live streams | Needed for LIVE |
expires, regionsAllowed, ineligibleRegion | When and where the video is available | If it applies |
interactionStatistic | View count shown on the page | If it applies |
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.
{
"contentUrl": "https://cdn.example.com/demo.mp4",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID",
"url": "https://www.example.com/videos/demo/"
}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.
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"
}]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.
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.
"publication": {
"@type": "BroadcastEvent",
"isLiveBroadcast": true,
"startDate": "2026-11-02T18:00:00+05:30",
"endDate": "2026-11-02T19:30:00+05:30"
}The generator above writes the code. These four steps take it live.
Fill the player and thumbnail from YouTube, or add your own file URL.
Enter the title, upload date and duration, plus key moments if you have them.
Copy the script tag, or download the JSON file.
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.
Add the code only to the page that shows the video.
Check whether your SEO or video plugin already adds VideoObject. If not, add the script to the post with a plugin such as WPCode.
Paste the script into the template for the product or page that shows the video, before the closing head tag.
Open the page’s SEO settings, choose Advanced SEO, then Structured data markup, and paste the JSON.
Create a Custom HTML tag with the script and fire it only on the video page.
Short answers on fields, key moments, live streams and indexing.
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.
Google requires name, thumbnailUrl and uploadDate. It recommends description, duration, contentUrl or embedUrl, and key moments. The upload date needs a time zone.
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.
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.
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.
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.
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.
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.
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.
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.
Video pages often carry article, product or breadcrumb markup too.
Search Savvy’s technical SEO team builds proper watch pages, fixes video indexing issues and adds structured data across your video library.