# WordPress Plugins

> WordPress plugins by Oleksii Turovskyi — performance profiling, Gutenberg A/B testing, Yoast video SEO. Case study and source notes on every page.

**Canonical:** https://alexturik.com/plugins

Plugins I've built and ship under GPL-2.0-or-later. Each page documents the problem solved, the key architectural choices, and the code highlights that matter.

## Plugins

### A/B Testing for Gutenberg

- **URL:** https://alexturik.com/plugins/ab-testing-gutenberg
- **Markdown:** https://alexturik.com/plugins/ab-testing-gutenberg.md
- **Category:** Editor · **Status:** released · **Version:** 4.0.1
- **Requires:** WordPress 6.7+, PHP 8.1+
- **License:** GPL-2.0-or-later

WordPress plugin adding an A/B Test block to Gutenberg — cookieless round-robin variants, click and dwell-time tracking, per-test analytics dashboard.

### Yoast Video SEO Booster

- **URL:** https://alexturik.com/plugins/yoast-video-seo-booster
- **Markdown:** https://alexturik.com/plugins/yoast-video-seo-booster.md
- **Category:** SEO · **Status:** wip · **Version:** 3.0.3
- **Requires:** WordPress 6.0+, PHP 8.0+
- **License:** GPL-2.0-or-later

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.

### WP Deep Performance Analyzer

- **URL:** https://alexturik.com/plugins/wdpa
- **Markdown:** https://alexturik.com/plugins/wdpa.md
- **Category:** Performance · **Status:** wip · **Version:** 3.0.4
- **Requires:** WordPress 6.0+, PHP 8.0+
- **License:** GPL-2.0-or-later

Deep WordPress performance profiling — hook analysis, autoloaded options audit, asset graph, HTTP and AJAX monitoring, object-cache diagnostics.


## What these plugins have in common

All three started as a problem on a client site that no existing plugin solved
without a compromise I was not willing to make. That is the bar: I write a
plugin when the alternative is a workaround I would have to explain to the next
developer.

The result is that none of them are general-purpose. Each one does a narrow
thing thoroughly, on the assumption that you already know why you need it.

## What each one is for

| Plugin | Solves | Status | Requires |
|---|---|---|---|
| [A/B Testing for Gutenberg](/plugins/ab-testing-gutenberg) | Split-testing blocks without cookies or a cache bypass | Released | WP 6.7+, PHP 8.1+ |
| [WP Deep Performance Analyzer](/plugins/wdpa) | Finding *what* is slow, not just *that* it is slow | WIP | WP 6.0+, PHP 8.0+ |
| [Yoast Video SEO Booster](/plugins/yoast-video-seo-booster) | Embedded video that Search Console refuses to index | WIP | WP 6.0+, PHP 8.0+, Yoast SEO |

**A/B Testing for Gutenberg** adds a real A/B Test block to the block editor.
The hard part is not the split — it is splitting behind full-page cache. Most
A/B plugins set a cookie, which makes every response uncacheable and quietly
undoes the performance work the site paid for. This one assigns variants
round-robin at render with no cookie and no session, so WP Rocket, LiteSpeed
and an object cache all keep working.

**WP Deep Performance Analyzer** is twelve profiling tabs: PHP lifecycle
checkpoints with time and memory deltas, the top-20 autoloaded options and
total autoload weight, a `$wp_filter` dump grouped by core / plugin / theme /
mu-plugin, and a log of every outbound HTTP and AJAX call. It answers the
question Query Monitor leaves you with — *which* of these 90 plugins is
actually costing the 400ms.

**Yoast Video SEO Booster** gets embedded YouTube and Vimeo out of Search
Console's "video is not the main content of the page" bucket. It registers a
`/video-sitemap.xml` as a Yoast Sitemap Provider, emits `VideoObject` JSON-LD,
and generates a dedicated watch page per video so the URL Google indexes has
the video as its only content.

## Why token-gated download instead of the WordPress.org repository

These are distributed as signed, short-lived download links from this site
rather than through the plugin directory. Two reasons, and neither is secrecy —
they are GPL-2.0-or-later, and the source is available on request.

The first is that the directory's review queue and guidelines are tuned for
plugins aimed at end users, and these are aimed at developers. The second is
that updates ship through
[plugin-update-checker](https://github.com/YahnisElsts/plugin-update-checker)
against my own update server, which means I can push a fix the same day rather
than waiting on a review.

## What each page contains

Every plugin page is a case study rather than a feature list: the problem as it
appeared on a real site, the architectural choice that solved it, the trade-off
that choice cost, and the code that matters. If you are evaluating whether to
use one, the page is written to let you decide without installing it.

## Related

If the problem is smaller than a plugin, it may already be a
[browser-only tool](/tools) or a [Chrome extension](/extensions) — the same
checks, without installing anything into a WordPress site.

## FAQ

### Are these plugins free?

Yes, all three ship under GPL-2.0-or-later at no cost. The download is
token-gated to keep the update channel honest, not to charge for it — you get a
signed link on the plugin's page without an account.

### Why are two of them marked WIP?

WIP means the plugin runs in production on sites I maintain but the public
documentation, upgrade path, or edge-case handling is not finished. Released
means I would hand it to another developer without a caveat. The status on each
card is the honest one, not a marketing label.

### How do updates reach an installed plugin?

Through plugin-update-checker, which polls my update server rather than the
WordPress.org directory. The plugin's `Update URI` header points there, so
`wp-admin → Plugins` shows updates the same way it does for directory plugins.

### Can I see the source before installing?

Yes — ask, and I will send the repository. The plugins are GPL-licensed, so the
source travels with the zip in any case; the request just saves you the
download.
