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:
- 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. - 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:
- It generates
video-sitemap.xmland registers it as a Yoast Sitemap Provider, so it appears under/sitemap_index.xmlnext topost-sitemap.xmlandpage-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. - 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, modernVideoSitemapProviderclass) - YouTube Data API v3 client with per-video caching
- Self-hosted updates via Plugin Update Checker v5