squirrelscan
GitHub

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, with Add schema for video rich results as 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 IDvideo/video-schema
CategoryVideo
ScopePer-page
Severitywarning
Weight5/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.

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.

Type to search…

↑↓ navigate↵ openesc close