---
title: Yoast Video SEO Booster
description: "Fix Search Console's 'video is not the main content of the page' error on WordPress + Yoast SEO. Generates video-sitemap.xml and a dedicated watch page per video."
tagline: 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.
category: SEO
status: wip
version: 3.0.3
date: 2026-05-18
requires:
  php: '8.0'
  wp: '6.0'
  plugins:
    - Yoast SEO (wordpress-seo)
license: GPL-2.0-or-later
screenshot: /plugins/yoast-video-seo-booster/screenshot.png
screenshotAlt: Yoast Video SEO Booster settings page with video-sitemap.xml preview
keywords:
  - video is not the main content of the page
  - Search Console video indexing
  - Yoast video sitemap
  - WordPress video SEO plugin
  - VideoObject schema WordPress
tags:
  - seo
  - yoast
  - video
  - schema
  - sitemap
outcomes:
  - 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
faq:
  - q: Why doesn't Google index videos embedded in WordPress blog posts by default?
    a: "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."
  - q: Does this plugin replace Yoast SEO?
    a: "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."
  - q: How are videos discovered?
    a: "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."
  - q: Do I need a YouTube Data API key?
    a: "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."
  - q: When is the full writeup coming?
    a: "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."
---

## 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](/#contact) 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
