← Oleksii Turovskyi
Work in progressSEOv3.0.3GPL-2.0-or-later

Yoast Video SEO Booster

Get embedded YouTube and Vimeo videos out of Search Console's "video is not the main content" bucket — with a Yoast-integrated video sitemap and a dedicated watch page per video.

  • Get embedded videos out of Search Console's "not the main content" bucket
  • /video-sitemap.xml registered as a Yoast Sitemap Provider
  • Dedicated watch page per video — the video is the only content on the URL Google indexes
  • Schema.org VideoObject JSON-LD on every page that contains a video
Not yet available — writeup in progress.Install instructions ↓
WordPress
6.0+
PHP
8.0+
Required plugins
Yoast SEO (wordpress-seo)

The problem#

You embed a YouTube video in a blog post. Months later, you open Search Console's Video indexing report — and the video is sitting under "Not indexed" with the reason "Video is not the main content of the page".

This is the single most common Video SEO failure on WordPress, and it has two roots:

  1. Yoast SEO does not generate a video-sitemap.xml. Without it, Google has to discover the video through on-page heuristics — fine for a video-first site, useless for a blog where every post is mostly text with a video embedded somewhere in the middle.
  2. Even when Google finds the video, it weighs it against the page. On a 1,500-word post, Google decides the text is the main content and the embedded video is decorative. The page won't appear in the video carousel, and Search Console flags it accordingly.

The plugin attacks both halves at once:

  1. It generates video-sitemap.xml and registers it as a Yoast Sitemap Provider, so it appears under /sitemap_index.xml next to post-sitemap.xml and page-sitemap.xml. Each <video:video> entry carries the fields Google's video crawler actually reads — thumbnail_loc, duration, content_loc, player_loc, publication_date, channel info from the YouTube Data API.
  2. For every discovered video it creates a virtual watch page at /video-watch-page/?video_id=… where the embedded video is the only meaningful content on the page. That URL is what ends up in the video sitemap as <loc>, and that URL is what Google indexes as the canonical "video page". The original blog post stays indexed for text search — separately, on its own URL.

Net effect: instead of one URL that Google can't decide what to do with, you ship two — a text page that ranks for text queries, and a watch page that ranks for video queries.

Full case-study writeup in progress. The plugin is shipped and stable at v3.0.3. Check back soon, or reach out via the contact form for early access.

What ships in v3.0.3#

  • Automatic video detection across post types: YouTube, Vimeo, local media, ACF fields
  • [yv_video] shortcode for manual control
  • Per-post metabox for sitemap fields (duration, rating, view count, live-broadcast flag)
  • Virtual watch page at /video-watch-page/?video_id=... with VideoObject JSON-LD
  • Canonical + OpenGraph URL rewriting via Yoast filters (no duplicate tags)
  • One-click re-indexing tool in plugin settings

Stack#

  • WordPress 6.0+, PHP 8.0+, hard dependency on Yoast SEO
  • PSR-4 autoloaded under AlexTur\YoastVideoSeoBooster\
  • Yoast Sitemap Provider integration (wpseo_exclude_from_sitemap_by_post_ids, modern VideoSitemapProvider class)
  • YouTube Data API v3 client with per-video caching
  • Self-hosted updates via Plugin Update Checker v5

FAQ

Why doesn't Google index videos embedded in WordPress blog posts by default?
Two reasons. First, Yoast SEO doesn't generate a video sitemap — Google has to discover videos via on-page heuristics. Second, on a long blog post, Google decides the surrounding text is the main content and the embedded video is decorative, so the video lands in Search Console under 'Video is not the main content of the page'. This plugin fixes both: a proper video sitemap and a dedicated watch page where the video is the only content.
Does this plugin replace Yoast SEO?
No — it requires Yoast SEO to be active. It hooks into Yoast's Sitemap Provider API and the Yoast indexable system to register the video sitemap and inject canonical/OpenGraph signals for the virtual watch page.
How are videos discovered?
The plugin scans post content for YouTube/Vimeo oEmbed URLs and direct links, the `[yv_video]` shortcode, raw `<video>` and `<source>` tags, and ACF fields of type oembed/url/text/file. Local-video discovery is opt-in.
Do I need a YouTube Data API key?
It's optional but recommended. With a key, `video-sitemap.xml` includes title, description, thumbnail, duration, channel name, and publish date — all fields Google uses to rank video results.
When is the full writeup coming?
Plugin is shipped and stable at v3.0.3. The case-study writeup — including how the virtual watch page works around Yoast's sitemap exclusions — is being assembled. Subscribe via RSS to be notified.

View as Markdown · for AI agents and offline reading

Other plugins

Other tools

Not a WordPress site? I also ship Chrome extensions — small browser utilities for SEO, AI workflows, and research.