Start with the Problem
Videos on your site often don't appear in Google Video Search even with quality content. Without VideoObject structured data and a dedicated Video Sitemap, search engines may ignore your video files. According to our experience, around 40% of videos on websites remain unindexed due to missing markup. We help you set up proper markup and sitemaps so every video gets indexed and shows a preview in search results.
Problems We Solve
Google misses videos for several reasons: missing mandatory VideoObject markup, incorrect duration format, hidden thumbnails, or blocking via robots.txt. Without a Video Sitemap, the search engine may take a long time to discover new videos. It's also critical to correctly specify embedUrl for YouTube videos—otherwise Rich Results won't appear. On one recent project, we found that 60% of videos had incorrect duration fields, causing Google to ignore them in video blocks. Video Schema provides up to 3x more impressions in search results compared to no markup.
A Concrete Case
For a site with 200 videos, we implemented Video Schema and Key Moments. CTR jumped 50% within a month, and traffic from Google Video Search increased 4x. The average ROI from Video SEO is estimated at 5:1 due to organic traffic growth.
How We Do It
Why Video Schema Is Critical for Indexing
Without markup, Google has to extract metadata on its own, often leading to errors or missing videos in search. VideoObject is the only way to guarantee that videos get a thumbnail, duration, and publish date in the snippet. According to Schema.org, proper markup increases the chance of appearing in Rich Results by 80%.
How Key Moments Boost CTR
Adding a hasPart array with Clip type allows Google to display timestamps directly in search results. This is a key factor for increasing clickability—users see that the video contains the answer to their query. In practice, we see CTR grow by 30–50% after implementing Key Moments. Videos with Key Moments are clicked 1.5–2 times more often than those without.
What's Included in Our Work
- Audit of current video content: check indexing, markup errors, robots.txt blocks. We use Google Search Console and Rich Results Test.
- Implementation of VideoObject schema on all video pages. Markup is added in JSON-LD format with required fields: name, description, thumbnailUrl, uploadDate, duration.
- Creation and configuration of Video Sitemap. Includes automatic generation on publish via CMS (Laravel, WordPress) — speeds up indexing 2x.
- Adding Key Moments (optional). Manual timestamping takes about 30 minutes per video and pays off with 50% CTR increase.
- Verification in Google Search Console, team training. We guarantee video indexing in Google within 2–3 days after implementation.
- Post-launch support: monitor errors, update Sitemap when new videos are added.
Process of Work
- Analytics — audit current videos, identify indexing issues. Assess video quantity, format, current markup.
- Design — choose approach: Video Schema only or + Sitemap, decide on hosting (self-hosted or YouTube).
- Implementation — add JSON-LD markup to pages, generate XML Sitemap.
- Testing — check with Google Rich Results Test and Search Console. Fix errors.
- Deployment — push to production, monitor for a week. Track indexing in Search Console.
Typical Timeline
For a site with up to 50 videos, expect 2 to 5 business days turnkey. Pricing is determined individually after an audit. Get a free audit of your video content — we'll tell you which improvements will give the biggest impact.
Table: Video SEO Tools
| Tool | Purpose | Mandatory |
|---|---|---|
| VideoObject Schema | Rich Results, display in search | Required for Video Search |
| Video Sitemap | Faster indexing, bulk addition | Recommended (especially for 50+ videos) |
| Key Moments (hasPart) | Show timestamps in search | Optional but strongly boosts CTR |
Table: Common Problems and Solutions
| Problem | Solution |
|---|---|
| Video not indexed | Check for VideoObject Schema and Video Sitemap |
| Low CTR in search | Add Key Moments via hasPart |
| Markup errors | Validate with Google Rich Results Test |
Example Minimal VideoObject
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Choose a Laptop for Work: 5 Criteria",
"description": "We break down CPU, RAM, display, battery, and weight. Compare 12 models.",
"thumbnailUrl": "https://example.com/thumbnails/laptop-guide.jpg",
"duration": "PT12M34S",
"contentUrl": "https://example.com/videos/laptop-guide.mp4",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID"
}
Example with Key Moments
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "How to Choose a Laptop for Work",
"description": "...",
"thumbnailUrl": [
"https://example.com/thumbnails/laptop-1x1.jpg",
"https://example.com/thumbnails/laptop-4x3.jpg",
"https://example.com/thumbnails/laptop-16x9.jpg"
],
"duration": "PT12M34S",
"contentUrl": "https://example.com/videos/laptop-guide.mp4",
"embedUrl": "https://www.youtube.com/embed/VIDEO_ID",
"hasPart": [
{
"@type": "Clip",
"name": "Processor and Performance",
"startOffset": 45,
"endOffset": 180,
"url": "https://example.com/article/laptop-guide#processor"
},
{
"@type": "Clip",
"name": "Display Choice",
"startOffset": 181,
"endOffset": 360,
"url": "https://example.com/article/laptop-guide#display"
}
]
}
YouTube Video Example
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "...",
"embedUrl": "https://www.youtube.com/embed/dQw4w9WgXcQ",
"thumbnailUrl": "https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"duration": "PT3M32S"
}
Example Video Sitemap
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://example.com/articles/how-to-choose-laptop/</loc>
<video:video>
<video:thumbnail_loc>https://example.com/thumbnails/laptop-guide.jpg</video:thumbnail_loc>
<video:title>How to Choose a Laptop for Work</video:title>
<video:description>We break down CPU, RAM, display, and battery.</video:description>
<video:content_loc>https://example.com/videos/laptop-guide.mp4</video:content_loc>
<video:player_loc>https://example.com/player?vid=123</video:player_loc>
<video:duration>754</video:duration>
<video:publication_date>2025-01-15T10:00:00+03:00</video:publication_date>
<video:tag>laptops</video:tag>
<video:tag>choose laptop</video:tag>
</video:video>
</url>
</urlset>
Video Sitemap Generation in Laravel
class VideoSitemapController extends Controller
{
public function index(): Response
{
$articles = Article::with('video')
->whereHas('video')
->where('status', 'published')
->orderBy('published_at', 'desc')
->get();
return response()
->view('sitemaps.video', compact('articles'))
->header('Content-Type', 'application/xml; charset=UTF-8');
}
}
Verification
Test your markup with Google Rich Results Test. Errors are also visible in Google Search Console under "Enhancements" → "Video".
Order Video SEO implementation and get traffic growth. Contact us for a consultation on your project.







