VideoObject schema: video on a page with no markup for it
Without VideoObject markup a search engine cannot tell there is a video on the page. squirrel detects video elements and embeds, then checks the schema.
What VideoObject is
VideoObject is the schema.org type describing a video: its name, description, thumbnail and upload date, plus optional duration, content URL and embed URL. Google requires name, thumbnailUrl and uploadDate, and recommends description, for a video to be eligible for its video features.
Without it, a search engine has to infer the title, description and thumbnail from the page. Google can still discover a video that way, so the markup is not a precondition for appearing at all; what it does is describe the video accurately and open the enhancements that depend on it.
What squirrel checks
The rule runs on every crawled page. A page counts as having video when it contains any <video> element, or an iframe whose src contains youtube or vimeo. It emits a single check named video-schema:
- Info when no video was detected. Message:
No video content detected. - Pass when the page’s schema types include
VideoObject. Message:VideoObject schema present for video content. - Warn otherwise. Message:
Video content without VideoObject schema, withAdd schema for video rich resultsas the value. Severity warning, weight 5.
Detection covers only YouTube and Vimeo iframes, so a video embedded from another host is not counted. The schema check reads the parser’s list of schema types, which covers top-level and @graph nodes; it does not validate that the required properties are present.
How to fix it
{"@context":"https://schema.org","@type":"VideoObject","name":"How to structure URLs","description":"…","thumbnailUrl":"https://example.com/thumb.jpg","uploadDate":"2026-03-12T09:00:00+11:00","duration":"PT6M14S","embedUrl":"https://www.youtube.com/embed/…"}Emit the node from the same data that renders the player, so the title and description cannot drift from what the page shows. uploadDate should include a timezone offset, since Google otherwise assumes Googlebot’s own, and duration is an ISO 8601 duration.
Check the result in Google’s Rich Results Test. This rule confirms the type exists, not that the required properties are there.
| Rule ID | video/video-schema |
| Category | Video |
| Scope | Per-page |
| Severity | warning |
| Weight | 5/10 |
Enable / disable
Disable this rule
[rules]
disable = ["video/video-schema"]Disable all Video rules
[rules]
disable = ["video/*"]Enable only this rule
[rules]
enable = ["video/video-schema"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- schema/video: the structured data checks over the same node.
- video/video-thumbnail: the poster image, and the thumbnailUrl the schema needs.
- video/video-accessible: captions on the same videos.
- crawl/schema-noindex-conflict: rich markup on a page that is not indexable.
Video findings ship in every audit next to the SEO, performance and agent experience rules. See Fix SEO issues with AI for how an agent works through a report.
References
Check your site
Run squirrel audit https://example.com and open the Video section of the report. Each page with video is reported with whether VideoObject markup is present. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.