Most fashion brands that add video to their product pages never tell Google the video exists. The file sits in a lazy-loaded carousel, wrapped in a JavaScript player, with no structured data and no sitemap entry. Shoppers see it. Googlebot mostly does not.
That gap is fixable in an afternoon. VideoObject schema markup is the structured data that describes a video to search engines: its title, thumbnail, upload date, duration, and where the actual file lives. Google's own documentation says that while it tries to understand videos automatically, you can influence what shows in video results (description, thumbnail, upload date, duration) by marking them up, and that markup makes it easier for Google to find the video at all.
This guide is written for the person who owns the store's product pages day to day. It covers what to mark up, the exact fields Google requires, how product pages differ from "watch pages" (this is the part most guides get wrong), how to implement it on Shopify, and how to check it is working.
Why Product Video Schema Matters for Fashion Brands
Fashion is a visual category, and a growing share of search happens in visual surfaces. Google can show videos on the main results page, in the Videos tab, in Google Images, and in Discover. If your product videos are not discoverable, those surfaces show someone else's content, often a reseller's or a creator's review of your own product.
Schema helps in three concrete ways:
- Discovery. Structured data plus a video sitemap gives Google a direct, machine-readable list of your videos instead of relying on it to parse your player.
- Control. You choose the thumbnail, the title, and the description Google uses, instead of whatever frame or text it guesses.
- Consistency at scale. When you generate dozens or hundreds of product videos per month, a templated schema block means every new video ships with correct metadata on day one.
If you are already investing in motion content for your PDPs (we covered why in AI model videos for product pages), schema is the cheap step that makes that investment visible to search.
The Watch Page Rule: What Product Pages Can and Cannot Get
Before you write a line of JSON-LD, understand one distinction from Google's video SEO guidelines, because it sets expectations correctly.
Google defines a watch page as a page whose main purpose is to show a single video. Its examples of watch pages include a video landing page or a news video page. Its examples of pages that are not watch pages include, word for word, "a product page with a 360 video of a product" and "a video category page that lists multiple videos of equal prominence."
Google states that to be eligible for video features (video results on the main search results page, Video mode, Key Moments, and other rich formats), you should create a dedicated watch page for each video "if it makes sense for your business."
What this means for a fashion store:
| Page type | Is it a watch page? | What schema does for it |
|---|---|---|
| Product detail page (PDP) with a model video | No, the product is the main content | Helps Google understand and associate the video; limited eligibility for video rich features |
| Collection page with a video gallery | No, multiple videos of equal prominence | Same as above |
| Dedicated "lookbook video" or "styling video" page per product | Yes, if the video is the main content | Full eligibility for video features |
| Blog post reviewing an embedded video | No | Helps context, not video features |
So the honest answer is: mark up the video on your PDP anyway, because it costs nothing and helps Google understand the page, but if you want your videos to compete in video results, you also need watch pages.
A practical watch page pattern for fashion
You do not need a watch page for every SKU. Pick the products that matter:
- Hero products and bestsellers that already get search demand.
- Seasonal launches where you want visibility for "how to style" or "on model" queries.
- Campaign videos that show a full look or capsule.
For each, create a simple page (for example /videos/linen-wrap-dress-styling) where the video is the first and largest element, with a unique title, a short description, and a clear link to buy. Then link it from the PDP. You now have one page optimized for the product query and one optimized for the video query, and they support each other instead of competing.
The VideoObject Fields Google Requires
Google's VideoObject documentation lists three required properties and a set of recommended ones. Get the required ones right and you pass validation. Get the recommended ones right and you give Google everything it needs.
Required
name- the video title. Google asks that this be unique for each video on your site.thumbnailUrl- a URL to the video's unique thumbnail image.uploadDate- when the video was first published, in ISO 8601 format. Google recommends including timezone information.
Recommended
description- unique text describing the video. HTML is ignored.contentUrl- a URL to the actual video file bytes (for example an.mp4). Google is explicit: do not point this at the page where the video lives.embedUrl- a URL to the player for that specific video, usually thesrcof an iframe. Again, not the page URL.duration- in ISO 8601 duration format, such asPT0M18Sfor 18 seconds.expires- only if the video will stop being available. Skip it otherwise.hasPart-Clipsegments, used for Key Moments on longer videos.regionsAllowed/ineligibleRegion- only if you restrict by country.
For product videos, which are usually 6 to 30 seconds of a model moving in the garment, you can ignore hasPart. Key Moments are built for long-form content, not a 15-second PDP clip.
The three URLs people mix up
This trips up more implementations than anything else. A video has at least three URLs:
- Watch page URL - the web page that embeds the video. This is not in VideoObject at all; it is the page the JSON-LD lives on.
embedUrl- the player.contentUrl- the raw file on your CDN.
If you put the PDP URL into contentUrl, the markup validates as syntactically fine and still fails at its real job.
A Copy-Paste JSON-LD Template for a Fashion PDP
Here is a working pattern for a product page that already has Product structured data. Keep them as two separate blocks so your theme's existing Product schema stays untouched.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "Linen Wrap Dress in Sage - On Model Video",
"description": "See the Linen Wrap Dress in Sage on a model, walking and turning, showing drape, length, and fit in natural light.",
"thumbnailUrl": [
"https://cdn.example.com/videos/linen-wrap-dress-sage-thumb-16x9.jpg",
"https://cdn.example.com/videos/linen-wrap-dress-sage-thumb-1x1.jpg"
],
"uploadDate": "2026-10-07T09:00:00+00:00",
"duration": "PT0M18S",
"contentUrl": "https://cdn.example.com/videos/linen-wrap-dress-sage.mp4",
"embedUrl": "https://player.example.com/embed/linen-wrap-dress-sage",
"about": {
"@type": "Product",
"name": "Linen Wrap Dress",
"color": "Sage",
"sku": "LWD-SAGE"
}
}
</script>
A few notes on this template:
- Name and description per variant. If the sage and black colorways each have their own video, each needs its own unique
nameanddescription. Duplicate metadata across 40 colorways is a common reason videos get ignored. - The
aboutproperty ties the video to the product it shows. It is a schema.org property, and while Google does not list it as a requirement, it makes the relationship explicit. Alternatively, reference the video from your Product block usingsubjectOf. - Multiple thumbnails in different aspect ratios are allowed and give Google options for different surfaces.
- Use the real duration. Pull it from your video metadata, do not hardcode a guess.
Implementing VideoObject on Shopify
Most Shopify themes output Product schema automatically but say nothing about video, even when the product media includes one. You have three realistic options.
Option 1: Edit the theme template (most control)
Shopify product media objects expose video sources through Liquid. In your main product section, loop over product.media, find items where media.media_type == 'video', and output a VideoObject block using:
product.titleplus variant or color forname- the media's preview image for
thumbnailUrl - the MP4 source URL from
media.sourcesforcontentUrl - the product's
published_at(or a metafield you control) foruploadDate - a metafield for
durationanddescriptionif your video source does not expose them
Store the per-video description in a product metafield so merchandisers can edit it without touching code. This is the cleanest long-term setup.
Option 2: Use your video app's schema output
Many video and shoppable video apps inject their own structured data. Check before you add your own, because two VideoObject blocks for the same video with conflicting data is worse than one. If you are choosing an app, structured data output belongs on the evaluation checklist next to load speed and analytics (we compared options in best Shopify product video apps for fashion brands).
Option 3: Tag manager injection (last resort)
You can inject JSON-LD via a tag manager, and Google can render JavaScript. But it adds a dependency and a delay, and it is easy for the injected data to drift out of sync with the page. Use it only if you cannot edit the theme.
Shopify gotchas
- Lazy-loaded players. If your video loads only after a click or a scroll, Google may never see the player. Schema helps here because the metadata is in the HTML even when the player is not.
- YouTube or Vimeo embeds. Google says it may index the video both on your page and on the platform's own page. You should still add structured data to your page, and check that your host allows Google to fetch the file if you want the full set of features.
- Shopify-hosted video URLs. Make sure the URL you put in
contentUrlis stable and does not change between page loads.
Stable URLs and Thumbnails: The Silent Indexing Killers
Google's documentation calls this out directly: some CDNs use quickly expiring URLs, and if a video's thumbnail URL changes too often, Google may not be able to index the video. It asks for a single unique and stable thumbnail URL for each video, and stable video file URLs too if you want features like video previews.
For fashion brands generating content at volume, this is where problems hide:
- Signed URLs with expiry tokens in
contentUrlorthumbnailUrlwill work for shoppers and fail for indexing. - Re-uploading a video to fix a color or crop often creates a new URL. Update the schema in the same deploy.
- Reusing one thumbnail across every colorway undermines the "unique thumbnail" guidance.
Keep the thumbnail URL the same across your structured data and your video sitemap. Google explicitly asks for consistent information between the two.
Thumbnail checklist
- A real frame or still of the product on a model, not a logo card
- Unique per video
- Served from a stable URL that is crawlable (not blocked by robots.txt)
- Mostly opaque (Google's guidance requires at least 80% of pixels to be nearly fully opaque)
Add a Video Sitemap
Structured data tells Google about a video when it crawls the page. A video sitemap tells Google the video exists before it gets there. For stores with hundreds of product videos, both are worth doing.
A minimal entry looks like this:
<url>
<loc>https://www.example.com/products/linen-wrap-dress</loc>
<video:video>
<video:thumbnail_loc>https://cdn.example.com/videos/linen-wrap-dress-sage-thumb-16x9.jpg</video:thumbnail_loc>
<video:title>Linen Wrap Dress in Sage - On Model Video</video:title>
<video:description>See the Linen Wrap Dress in Sage on a model, showing drape, length, and fit.</video:description>
<video:content_loc>https://cdn.example.com/videos/linen-wrap-dress-sage.mp4</video:content_loc>
</video:video>
</url>
The <loc> is the page that embeds the video. Shopify's native sitemap does not include video entries, so you will need an app or a custom-generated sitemap file submitted in Search Console alongside the default one.
File Formats and Page Speed
Google supports a long list of video file types, including MP4, WebM, MOV, M4V, and M3U8. For product pages, MP4 (H.264) with a WebM alternative covers nearly every browser and is crawlable.
Schema does nothing if the video drags your page into poor Core Web Vitals. A few rules for PDP video:
- Use a poster image so the player area renders immediately and does not shift layout.
- Set explicit width and height (or aspect-ratio) on the player container to avoid layout shift.
- Keep PDP clips short. 10 to 20 seconds is enough to show drape and movement.
- Compress aggressively. A 1080p, 15-second clip does not need to be 20 MB.
- Do not autoplay with sound, and consider loading the video file only once the player is near the viewport, while keeping the schema in the initial HTML.
How to Test and Monitor Your Markup
Ship it, then verify. Do not assume.
- Rich Results Test. Paste a PDP URL into Google's Rich Results Test and confirm it detects a VideoObject with no errors on the required fields.
- URL Inspection in Search Console. Check the live URL and confirm Google sees the video and the rendered page.
- Video indexing report. Search Console has a Video pages report that shows which pages have an indexed video and, more importantly, why others do not. Common reasons include "video is not the main content of the page" (the watch page rule again) and "cannot determine video position and size."
- Template changes. Every time you change the product template or the video app, re-test a sample of PDPs. Schema breaks quietly.
Expect this message for PDPs: "Video isn't on a watch page." That is not an error you need to fix on the product page. It is Google confirming the distinction covered above. If you want video features, the answer is a dedicated watch page, not a different schema.
Common Mistakes Fashion Stores Make
- Pointing
contentUrlat the product page. It must be the video file. - Copying one name and description across all colorways. Each video needs unique text.
- Expiring CDN links in thumbnails or files.
- Duplicate, conflicting VideoObject blocks from a theme plus an app.
- Marking up videos that are not visible on the page. Only describe what shoppers can actually see.
- Forgetting
uploadDatetimezone, which makes dates ambiguous. - Treating schema as a ranking hack. It improves understanding and eligibility. It does not replace good content, fast pages, and real demand.
Where AI Product Video Fits Into This
The main reason fashion brands skip video schema is not technical. It is that they only have video for a handful of products, so the effort does not seem worth it. Schema pays off when video is the default for every product, not the exception.
That is the problem AI production solves. Platforms like Tellos turn existing product photos into on-model videos at catalog scale, using the latest generation models (Kling, Sora, and others) as the underlying technology and wrapping them in a fashion-specific workflow: consistent models, brand-safe styling, and exports sized for PDPs, collection pages, and social. Once every SKU has a video, the schema template above becomes a one-time setup that covers the whole catalog.
A workable rollout looks like this:
- Generate video for your top 50 products first.
- Add the VideoObject template to your product page and fill metafields.
- Create watch pages for your 10 highest-demand products.
- Publish a video sitemap and submit it in Search Console.
- Check the Video pages report after a few weeks and fix what it flags.
- Expand to the full catalog once the template is proven.
If you want to see how video affects the other side of the equation, conversion, read our breakdown of product video conversion rates in ecommerce. And if your videos also live on collection pages, our guide to shoppable video galleries for Shopify collection pages covers that layout.
Key Takeaways
- VideoObject requires
name,thumbnailUrl, anduploadDate. Adddescription,contentUrl,embedUrl, anddurationtoo. - Product pages are not watch pages in Google's definition. Mark them up anyway, and build dedicated watch pages for hero products if you want video features.
- Stable, unique URLs for thumbnails and files matter as much as the markup itself.
- Add a video sitemap, because Shopify's default sitemap does not include video.
- Test with Rich Results Test and the Video pages report, and re-test after every template change.
- Schema scales when video does. Make video the default for every product, then let one template cover the catalog.
Make Video the Default for Every Product
Schema markup only matters if you have the videos to mark up. Tellos turns your existing product photos into on-model fashion videos for every SKU, ready for your PDPs, collection pages, watch pages, and social channels, without a reshoot.
Start creating product videos with the Tellos AI Video Studio
