Camera beside a laptop displaying a product video and editing timeline on a clean wooden desk.

VideoObject Schema: Creator, Author & JSON-LD Examples

Technical SEO / Video structured data

Choose the right video properties, inspect your WordPress output, and separate markup corrections from video-indexing problems.

By Rahul S., Founder / SEO Strategist at SearchCounselCo. Last updated September 30, 2026.

What is VideoObject schema?

VideoObject is structured data describing a video. Start with accurate metadata for a video people can watch, then check the published output. A useful implementation connects the correct video, creator and resources; validation and indexing are separate checks. This guide provides examples for self-hosted files, YouTube embeds and existing author markup, plus a correction worksheet.

What changed: On September 24, 2026, Google documented creator and author support and clarified interaction types. The documentation update does not announce a new ranking boost or make creator information compulsory.

Identity

Who made the video?

Map the video creator before copying the article byline.

Resources

Which URL does what?

Keep the watch page, player and video file distinct.

Output

What is published?

Check the complete page after templates and plugins run.

Evidence

What did the test prove?

Record code checks, live tests and indexing separately.

Required and recommended VideoObject properties

The Google VideoObject reference currently requires name, thumbnailUrl and uploadDate. Recommended properties include description, duration, contentUrl or embedUrl, creator information and applicable interaction statistics.

Property Google status Implementation decision
name Required Use the video title.
thumbnailUrl Required Supply its thumbnail image URL.
uploadDate Required Use first video publication, not the article refresh date.
description Recommended Explain what this particular video covers.
duration Recommended Represent 4 minutes 12 seconds as PT4M12S.
contentUrl / embedUrl Recommended Identify the file or player correctly.
creator / author Recommended Identify who created or published the video.
interactionStatistic Recommended, if applicable Use supported, video-specific counts.

Three different rule sets can appear in a tutorial: the Schema.org vocabulary, Google feature requirements, and a plugin specification. Record which rule set a warning comes from. A plugin may require additional fields for its own output. That does not automatically make them Google-required properties.

For the broader relationship between visible content and structured data, read our schema markup guide. This walkthrough focuses on the video implementation.

VideoObject creator versus author: what should you use?

Google accepts either property. The supplied person or organization needs name or alternateName; an identifying URL helps connect the identity. Existing accurate author markup does not need renaming simply to follow the updated examples.

Your situation Recommended decision
Existing author correctly identifies the video creator Keep it and inspect its values.
Company produces a training video Use the company identity where that describes the video correctly.
Article writer embeds someone else’s tutorial Identify the video creator separately from the article author.
Agency uploads a client’s video Establish responsibility; do not automatically assign the agency founder.
Identity is not established Investigate the source; do not invent an optional identity.

Our practical rule is to settle identity before editing code. Write down who created or published the video, the supporting record, and the profile or organization page. Do not add both properties merely to increase the field count.

contentUrl, embedUrl and the watch-page URL

The video file and player have different roles in the VideoObject vocabulary. Treat URL selection as a source-mapping task rather than guessing from a browser address bar.

Resource Illustrative URL Where it belongs
Watch page https://example.com/watch/catalog-import/ The page hosting the viewing experience.
Video file https://example.com/media/catalog-import.mp4 contentUrl
Video player https://www.youtube.com/embed/DemoVideo01 embedUrl
Thumbnail image https://example.com/media/catalog-import.jpg thumbnailUrl

For a third-party embed, inspect the iframe source. For a self-hosted video, inspect its configured source file. Record the resource separately from the page containing it. Do not invent an MP4 address for a YouTube upload.

Three complete VideoObject JSON-LD examples

Example scope: All names, dates, domains, video IDs and counts below are fictional demonstration values. The YouTube ID does not identify a verified video. Replace every example value with verified metadata before implementation. The code is displayed as educational text, not emitted as structured data for this article.

Example 1: self-hosted video with an organization creator

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "@id": "https://example.com/watch/catalog-import/#video",
  "name": "How to import a product catalog",
  "description": "A demonstration of preparing a CSV file and checking imported product values.",
  "thumbnailUrl": [
    "https://example.com/media/catalog-import.jpg"
  ],
  "uploadDate": "2026-09-10T09:00:00+00:00",
  "duration": "PT4M12S",
  "contentUrl": "https://example.com/media/catalog-import.mp4",
  "creator": {
    "@type": "Organization",
    "name": "Example Commerce",
    "url": "https://example.com/about/"
  }
}

This fixture models a company-owned tutorial with a known file. Its stable identity refers to the same video wherever the template references it. No interaction counts are included because the demonstration does not assume an analytics source.

Example 2: YouTube embed with a person creator

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "@id": "https://example.com/tutorials/export-orders/#video",
  "name": "How to export customer orders",
  "description": "A walkthrough of selecting an order date range and exporting a CSV file.",
  "thumbnailUrl": [
    "https://i.ytimg.com/vi/DemoVideo01/hqdefault.jpg"
  ],
  "uploadDate": "2026-09-12T14:30:00+00:00",
  "duration": "PT3M8S",
  "embedUrl": "https://www.youtube.com/embed/DemoVideo01",
  "creator": {
    "@type": "Person",
    "name": "Jordan Vale",
    "url": "https://example.com/team/jordan-vale/"
  }
}

This version uses the player URL and omits an unavailable video file. Replace the demonstration ID in both the player and thumbnail addresses. Check the actual thumbnail resource rather than assuming an image filename exists. The creator is the tutorial maker, who may differ from the article author.

Example 3: keep author and add separate interaction counters

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "@id": "https://example.com/watch/export-orders/#video",
  "name": "How to export customer orders",
  "description": "A walkthrough of selecting an order date range and exporting a CSV file.",
  "thumbnailUrl": [
    "https://example.com/media/export-orders.jpg"
  ],
  "uploadDate": "2026-09-12T14:30:00+00:00",
  "duration": "PT3M8S",
  "contentUrl": "https://example.com/media/export-orders.mp4",
  "author": {
    "@type": "Person",
    "name": "Jordan Vale",
    "url": "https://example.com/team/jordan-vale/"
  },
  "interactionStatistic": [
    {
      "@type": "InteractionCounter",
      "interactionType": {
        "@type": "WatchAction"
      },
      "userInteractionCount": 2180
    },
    {
      "@type": "InteractionCounter",
      "interactionType": {
        "@type": "LikeAction"
      },
      "userInteractionCount": 64
    },
    {
      "@type": "InteractionCounter",
      "interactionType": {
        "@type": "CommentAction"
      },
      "userInteractionCount": 9
    },
    {
      "@type": "InteractionCounter",
      "interactionType": {
        "@type": "ShareAction"
      },
      "userInteractionCount": 12
    }
  ]
}

The fictional source record assumes 2,180 watches, 64 likes, nine comments and 12 reshares. Each number describes a different interaction. This example illustrates the data structure; it is not a performance claim or evidence that engagement counts improve rankings.

Where interactionStatistic values should come from

Google documents WatchAction, LikeAction, CommentAction and ShareAction. InteractionCounter associates an interaction type with its count. Keep the event and the counted object clear.

Input situation Our recommended handling
Reliable watches count for this video Record the source and retrieval date before inclusion.
Article pageviews are available Do not relabel them as video watches.
Combined engagement total is available Do not split it into guessed event counts.
The interface shows 2.1K Obtain the precise integer or omit the optional counter.
No count is available Omit it; unknown is different from a measured zero.
Multiple hosting platforms have different totals Keep each source identifiable; do not merge totals without a defensible method.

Assign an update owner if counts are published. An automated integration should read the intended video record and handle missing values explicitly. A manual setup should have a review date. Fields that no one can maintain add avoidable uncertainty.

How to implement video schema in WordPress

1. Inspect the existing page before adding another block

Open the published source and inspect rendered output where scripts generate markup. Search for VideoObject, the video title and its player or file address. Note which plugin, theme, video block or custom template produces each occurrence. Include Microdata and graph references in the inspection; a search for one JSON-LD block is not a complete audit.

An Article node and a VideoObject node describe different things. Two genuine videos can also need separate descriptions. The concern is inconsistent descriptions of the same video, not a universal rule allowing only one schema block.

2. Choose the component responsible for the video metadata

Prefer editing the existing source when it already models the intended video. If several components compete, decide which will own the relevant fields and reconcile the others. Change only the conflicting video output; preserve unrelated Article, Person and Organization relationships.

Rank Math’s video schema documentation describes its field controls and marks several capabilities as PRO. Yoast’s VideoObject specification describes graph nodes and output conditions. Use the documentation for your installed product and version. Do not assume every tutorial describes the free tier or the interface currently installed.

3. Add manual code only when the setup needs it

For a manual integration, the JSON belongs in an application/ld+json script element associated with the page containing the real video. Use a supported template or schema integration. Some WordPress roles and editors strip script elements; confirm the public output rather than assuming a saved editor block survived.

The examples here display the JSON payload only. Copying a visible code block into a paragraph does not create structured data. Likewise, publishing this educational guide does not justify outputting its fictional VideoObjects.

4. Recheck the delivered page after saving

Clear the relevant cache if it serves an older version. Revisit the public page while signed out, compare the output with the metadata record, and test the published URL. Preserve a before-and-after excerpt so a future template change can be investigated.

Worked example: correcting a mismatched video record

Controlled demonstration, not a client case study. A fictional commerce site has a catalog-import tutorial. A custom WordPress template is assumed to build its VideoObject from article metadata. The following defects are constructed to illustrate a correction; no WordPress installation or live Google test was used for this example.

Source record Demonstration value
Video title How to import a product catalog
First video publication September 10, 2026, 09:00 UTC
Duration 4 minutes 12 seconds
Creator Example Commerce
File https://example.com/media/catalog-import.mp4
Thumbnail https://example.com/media/catalog-import.jpg
Engagement source Unavailable; omit the counters.
Affected template input Before correction After correction
File address Watch-page URL Media file URL from the video source record.
Creator mapping URL without a name Organization type, name and identity URL.
Publication mapping Article update date: September 30 Original video date: September 10.
Counter conversion Formatted string: 2.1K Counter removed because a verified integer is unavailable.

Example 1 is the corrected payload. A local check compared it with the fictional source record, including publication time, file URL and creator. The intentionally incorrect fixture was also checked to confirm that the comparison detects the mismatches.

Evidence collected on September 30, 2026 Result What remains unverified
JSON parsing for all three complete examples Passed Whether WordPress preserves the code.
Required-property presence and selected value checks Passed for the corrected examples Full vocabulary and Google validation.
Before-versus-source comparison Detected the wrong URL, date, identity and counter Behavior of a real template integration.
Published URL / Rich Results Test Not performed Live extraction, resource access and eligibility.
Search Console indexing and performance Not measured Recrawl, video indexing, rankings and traffic.

For a real implementation, extend this record with the affected URL, product versions, actual emitted code, dated URL-test results and the indexed state after recrawling. That converts an instructional example into implementation evidence without attributing an unobserved outcome to the correction.

Validate the markup, then investigate video indexing

Use a sequence that identifies where the implementation fails. Our technical SEO guide explains the broader crawl, render and index checks; the steps below keep the video work focused.

Check How to investigate What a successful check establishes
Syntax Parse the JSON payload. The JSON can be read.
Vocabulary Use the Schema Markup Validator. Vocabulary/type feedback for the submitted markup.
Google markup Run the Rich Results Test on code, then the published URL. Detected supported markup and reported issues for that test.
Page and resources Inspect the rendered page, player and resource addresses. The actual viewing implementation can be assessed.
Indexing Review URL Inspection and the Video indexing report. Google’s reported indexed state, rather than a prediction.

Google’s structured-data policies also require representative content. Passing a technical test does not guarantee a rich result. An example that parses successfully still needs truthful values, usable resources and an appropriate page.

Why can the markup pass while the video is not indexed?

Google’s video SEO guidance separates page indexing from video indexing. Video-indexing eligibility depends on a suitable watch page and accessible video resources. A blog where video supplements the text is a different page type from a page whose main purpose is watching one video.

Observed situation Next investigation
Page is not indexed Investigate page discovery, directives and canonical selection first.
Video is absent from rendered output Inspect how and when the player is inserted.
Player loads only after a click Check whether Google can discover the video without interaction.
Thumbnail cannot be reached Check the actual address, hosting access and consistency.
Video is supplementary to the article Assess whether a dedicated watch page serves a real user need.
Indexing report reflects an older crawl Compare recorded crawl time with the implementation date.

Do not respond to every indexing issue by adding more optional fields. Keep a record of the reported issue, the suspected cause, the smallest relevant change, and the evidence needed to confirm it. A code-mode test cannot establish what the published page delivers.

Measure results without confusing the datasets

Once the page is indexed, track its relevant queries and search performance separately from the video’s indexed state. Our GSC Performance report guide explains how to keep page, query, country, device and date filters consistent.

Record implementation and recrawl dates alongside other page changes. Compare equivalent periods when enough observations exist. A change in clicks after a template correction does not, by itself, isolate the effect of schema.

VideoObject schema FAQ

Does adding creator improve rankings?

The September documentation clarification establishes support, not a demonstrated ranking benefit. Add accurate identity because it describes the video; do not sell it as a ranking shortcut.

Should I put my article author in the video creator field?

First establish the relationship. Someone who writes an article around another person’s video is not automatically its creator. Keep the article and video records distinct.

Can I use VideoObject for a YouTube embed?

Example 2 illustrates that setup. Verify the real video, embed address, thumbnail and metadata. The fictional ID in this guide must be replaced before use.

Is more than one VideoObject always a problem?

No. Inspect what each object describes and how graph references connect it. Separate videos and repeated references are different from contradictory metadata for one video.

Should this tutorial emit the example VideoObjects?

No. These are displayed teaching examples. Live structured data should represent the actual page content; fictional videos must not become machine-readable claims about this article.

The one thing to do next

Choose one published video page and compare its complete output with a source record containing the video title, first publication date, creator, thumbnail, player and file address. Correct the mismatches, then test the published URL. If several templates or plugins disagree, our technical SEO services can help diagnose the output and resource-access problem.

Sources used

Sources checked September 30, 2026. The worksheets and implementation sequence are editorial guidance. Demonstration values are fictional. Local code checks do not establish Google validation or indexing. No client outcome is claimed.

Scroll to Top