7 WordPress Schema Plugins, Tested: What Each One Actually Outputs
We installed seven WordPress schema plugins on identical clean installs and captured the exact JSON-LD each one emits. Two produce nothing until you configure them, and one silently deletes WooCommerce product schema.
Every "best schema plugin for WordPress" list ranks plugins by install count and feature checklists copied from their own marketing pages. None of them tell you the thing that matters: what markup actually appears in your page source after you activate the plugin.
So we tested it. Seven plugins, one clean WordPress install each, identical content, and a script that pulls the JSON-LD out of the rendered HTML and audits it against Google's requirements. If you're still deciding whether you need a plugin at all, start with our guide to adding schema markup in WordPress.
The results are not what the roundups suggest. Two of the most-recommended plugins output absolutely nothing until you complete a setup step nobody mentions. One deletes WooCommerce's product schema and, unless you notice, replaces it with nothing. A plugin with 40,000 active installs writes a literal null into the author field on every post it touches.
Here's the full data.
How We Tested
| WordPress | 7.0.2 |
|---|---|
| PHP | 8.4.21 |
| Database | SQLite (SQLite Database Integration 2.2.23) |
| Theme | WordPress default |
| Test date | 30 July 2026 |
| Plugins active | One at a time, except in the conflict tests |
Every plugin saw the same three URLs: a blog post (title, excerpt, featured image at 1200ร630, assigned author with a display name and bio, published category), a static page, and the homepage. For the WooCommerce tests, a simple product with SKU, price, stock status and a featured image.
We wrote a purpose-built extraction harness for this: the same detection approach that powers our Schema Gap Analyzer, pointed at a controlled install instead of a live site. It pulls every <script type="application/ld+json"> block out of the rendered HTML, walks the graph counting typed nodes, checks for Microdata and RDFa alongside JSON-LD, and audits each Article node against Google's documented required properties.
For each plugin we recorded the number of JSON-LD blocks, the number of typed schema nodes, the byte weight of the markup, every @type emitted, whether the Article node carried Google's required fields, whether the author resolved to a real name, and whether the output used a linked @graph or standalone objects. Raw output for all seven plugins is available on request.
The Results at a Glance
| Plugin | Version | Active installs | Nodes on install | Nodes after setup | JSON-LD size | Last updated | Tested to |
|---|---|---|---|---|---|---|---|
| Yoast SEO | 28.1 | 10,000,000 | 14 | 16 | 4,029 B | 21 Jul 2026 | 7.0.2 |
| All in One SEO (free) | 4.9.10 | 3,000,000 | 16 | 16 | 3,641 B | 8 Jul 2026 | 7.0.2 |
| Slim SEO | 4.9.11 | 60,000 | 12 | 12 | 3,243 B | 28 Jul 2026 | 7.0.2 |
| Rank Math | 1.0.275 | 4,000,000 | 0 โ | 7 | 2,286 B | 28 Jul 2026 | 7.0.2 |
| Schema & Structured Data for WP & AMP | 1.63 | 100,000 | 0 โ | 10 | 2,122 B | 27 Jul 2026 | 7.0.2 |
| Schema (Hesham Zebida) | 1.7.9.6 | 40,000 | 7 | 7 | 978 B | 14 Jun 2025 โ | 6.8.6 โ |
| SEOPress (free) | 10.1 | 300,000 | 0 | 0 โ | 0 B | 29 Jul 2026 | 7.0.2 |
| WordPress core alone | 7.0.2 | โ | 0 | โ | 0 B | โ | โ |
"Nodes" counts every object carrying an @type on the blog post URL. More is not automatically better (a well-linked graph of 12 nodes beats a sprawling 16 that repeats itself), but zero is unambiguously bad.
The Finding That Matters Most: Two Plugins Ship Silent
Rank Math outputs nothing until you finish the setup wizard
Install Rank Math, activate it, visit a post. Zero JSON-LD blocks. The Rich Snippet module is enabled by default and the post-type defaults are already set to article, but the schema layer stays dormant until the setup wizard is marked complete.
Once we completed it, Rank Math produced a clean, tightly-linked 7-node graph (BlogPosting, WebPage, WebSite, Organization, Person, ImageObject) with every field Google requires for Article present and correct. Genuinely good output. But there's a window between "I installed the recommended plugin" and "I clicked through a wizard" in which the site has no structured data at all, and nothing in the interface warns you.
SASWP outputs nothing until you create a schema entry
Schema & Structured Data for WP & AMP is a dedicated schema plugin: it does nothing else. Activated on a clean install, it produced zero JSON-LD on posts and pages, and a single bare Organization node on the homepage.
SASWP works on a mapping model. You create a schema entry, choose a type, and set a rule for where it applies (post_type equals post). Until you do, no post gets any markup. After creating one Article mapping, it emitted a reasonable 10-node output.
That is a defensible design (it's an explicit-control plugin, not an automatic one), but it's the opposite of what "install a schema plugin" implies, and it's the single most likely reason a site has a schema plugin active and no schema in the source.
SEOPress free outputs nothing on content, full stop
SEOPress's free version emitted no JSON-LD on posts or pages at all, even with the Rich Snippets toggle on and the Knowledge Graph configured. The only output anywhere was a single WebSite node on the homepage.
Automatic content schema is a SEOPress Pro feature. That's a legitimate commercial decision, but if you install SEOPress free expecting Article markup, you will not get it, and the toggle labelled "Rich snippets" being switched on is actively misleading about that.
The Defect: A 40,000-Install Plugin Writing null Into Every Post
The plugin literally named Schema, by Hesham Zebida, works out of the box with no configuration, which is exactly why it still has 40,000 active installs. But here's what it wrote to our test post:
{
"@type": "BlogPosting",
"headline": "How to Add Schema Markup in WordPress",
"publisher": {
"@type": "Organization",
"name": "Schema Bench",
"logo": { "@type": "ImageObject", "url": "", "width": 600, "height": 60 }
},
"author": {
"@type": "Person",
"name": null,
"url": "http://example.com/author/"
}
}
Three problems in one block:
"name": nullon the author. Not an empty string, a JSON null.author.nameis a required property for Article in Google's documentation. Every post on the site ships an Article node that fails validation."url": ""on the publisher logo: an empty ImageObject with hardcoded 600ร60 dimensions pointing at nothing.- A broken author URL:
/author/with no username appended.
The plugin was last updated 14 June 2025 and declares compatibility only up to WordPress 6.8.6. It has not been tested against WordPress 7.0.
The One That's Been Removed From WordPress.org Entirely
WP SEO Structured Data Schema, a plugin that still shows up in older roundups and still gets searched for by name, was closed by WordPress.org on 4 May 2026 for a security issue. It is no longer downloadable, and closed-for-security plugins do not receive updates.
If it's running on a site you manage, remove it. If you find it recommended in a "best schema plugins" list published this year, that list has not been touched since before May.
Plugin Conflicts: What Happens When Two Are Active
This is where the real damage happens, because almost nobody runs a clean single-plugin install. We tested pairs.
| Combination | JSON-LD blocks | Article nodes | Organization nodes | WebPage nodes | Result |
|---|---|---|---|---|---|
| Yoast + All in One SEO | 2 | 2 | 2 | 2 | Complete duplication, 7,670 B |
| Rank Math + Schema | 2 | 2 | 1 | 2 | Duplicated Article |
| Slim SEO + Schema | 2 | 2 | 2 | 2 | Duplicated Article |
| Yoast + Schema | 1 | 1 | 1 | 1 | Schema suppresses Yoast |
| Yoast + SASWP | 1 | 1 | 1 | 0 | SASWP suppresses Yoast |
Two plugins have deliberate Yoast handling built in. The Schema plugin ships includes/integrations/yoast-seo.php containing:
add_filter( 'wpseo_json_ld_output', 'schema_wp_remove_yoast_json', 10, 1 );
and SASWP does the same more bluntly in output/class-saswp-output-compatibility.php:
add_filter( 'wpseo_json_ld_output', '__return_false' );
Neither has equivalent handling for Rank Math, All in One SEO or Slim SEO. The industry has standardised on "detect Yoast, defer to me" and stopped there. Pair a dedicated schema plugin with any non-Yoast SEO plugin and you get two competing Article nodes describing the same page, with different @id values, on every post.
Google's own guidance is that conflicting duplicate markup makes a page ineligible rather than doubly eligible. This is a self-inflicted wound and it's very common.
The WooCommerce Trap
WooCommerce 10.9.4 emits its own Product schema natively, no plugin required. On our test product it produced a clean Product + Offer + BreadcrumbList graph with SKU, price, currency, availability and priceValidUntil.
Then we added each SEO plugin on top:
| Combination | Blocks | Product nodes | BreadcrumbList | Verdict |
|---|---|---|---|---|
| WooCommerce alone | 1 | 1 | 1 | Clean baseline |
| Woo + Rank Math | 1 | 1 | 0 | Cleanest: replaces Woo's output |
| Woo + Yoast | 2 | 1 | 2 | Duplicate breadcrumbs |
| Woo + All in One SEO | 2 | 1 | 2 | Duplicate breadcrumbs |
| Woo + Slim SEO | 2 | 1 | 2 | Duplicate breadcrumbs |
| Woo + SASWP | 0 | 0 | 0 | All product schema gone |
The full WooCommerce picture, including the properties Woo omits and the variable-product problem, is in our WooCommerce schema markup guide.
That last row is not a typo. Install SASWP on a WooCommerce store and your product pages end up with no structured data whatsoever. The cause is in output/class-saswp-output-compatibility.php:
remove_action( 'wp_footer', array( WC()->structured_data, 'output_structured_data' ), 10 );
// This removes structured data from all frontend pages
SASWP strips WooCommerce's Product markup on the assumption that you will configure a SASWP Product schema to replace it. If you don't, and nothing prompts you to, every product page loses its rich result eligibility silently. No warning, no admin notice, no error in the Rich Results Test other than "no items detected".
What Google Actually Requires, and Who Delivers It
Google's Article documentation requires headline, image, datePublished and author.name. Here's how the output held up:
| Plugin | Article type | headline | image | datePublished | dateModified | author resolves | publisher | Linked @graph |
|---|---|---|---|---|---|---|---|---|
| Yoast SEO | Article | โ | โ | โ | โ | โ | โ | โ |
| Rank Math | BlogPosting | โ | โ | โ | โ | โ | โ | โ |
| All in One SEO | BlogPosting | โ | โ | โ | โ | โ | โ | โ |
| Slim SEO | Article | โ | โ | โ | โ | โ | โ | โ |
| SASWP (configured) | Article | โ | โ | โ | โ | โ | โ | โ standalone |
| Schema (Zebida) | BlogPosting | โ | โ | โ | โ | โ null | โ empty logo | โ standalone |
| SEOPress free | โ | โ | โ | โ | โ | โ | โ | โ |
One configuration note on Yoast: on a completely fresh install with the site representation unset, Yoast emits the Article node with no publisher property at all and no Organization node in the graph. The author resolves correctly, but the publishing entity is simply absent. Setting the site representation (Organisation or Person) in Yoast's settings adds both, taking the graph from 14 nodes to 16 and closing the last required-property gap. Yoast's first-time configuration wizard covers this, but as with Rank Math, skipping it costs you output.
None of the seven plugins emitted FAQPage markup by default. Given Google removed FAQ rich results from Search on 7 May 2026, that's the correct behaviour in 2026, but check your own site, because plugins that were configured to output FAQPage before the change will still be doing it.
So What's the Best Schema Plugin for WordPress?
It depends on one thing: whether anyone will configure it after installing.
Best overall: Rank Math
Cleanest graph for the size (7 nodes, 2,286 bytes, everything linked by @id, no redundancy) and the only plugin that handled WooCommerce without leaving duplicate breadcrumbs behind. Non-negotiable caveat: finish the setup wizard, or you get nothing.
Best if you want it to just work: All in One SEO (free)
The only plugin in the test that produced a complete, valid, fully-populated 16-node graph the instant it was activated, with no wizard and no configuration. If the site owner is not going to touch settings again, this is the safest choice.
Best for large or performance-sensitive sites: Slim SEO
12 well-formed nodes in 3,243 bytes with zero configuration and a genuinely small plugin footprint. Fewer knobs than the others by design. It's the pick when you want correct markup and no admin surface.
The default that's fine: Yoast SEO
Correct, thorough, well-linked output, and the largest at 4,029 bytes on a post, some of which is potentialAction and PropertyValueSpecification scaffolding that does nothing for rich results. If you already run Yoast there is no reason to switch. Set the site representation.
Use with caution: Schema & Structured Data for WP & AMP
Powerful and granular once configured, and the right tool if you need schema types the SEO plugins don't cover. But it outputs nothing until you build a mapping, and it deletes WooCommerce's product schema. Fine in expert hands, dangerous as a set-and-forget install.
Don't use: Schema (Hesham Zebida)
Writes null into the author field of every post, ships an empty publisher logo, and hasn't been updated since June 2025 or tested past WordPress 6.8.
Don't use: WP SEO Structured Data Schema
Closed by WordPress.org on 4 May 2026 for a security issue.
Only if you're buying Pro: SEOPress
The free version does not do content schema. That's a paid feature, and the free plugin's "Rich snippets" toggle doesn't make that clear.
Decision Table
| Your situation | Use |
|---|---|
| Already running Yoast or Rank Math | Keep it. Finish the setup wizard. Don't add a second schema plugin. |
| New site, want it correct with zero admin time | All in One SEO free, or Slim SEO |
| Running WooCommerce | Rank Math, or WooCommerce's native output plus any of Yoast, AIOSEO or Slim SEO, accepting duplicate breadcrumbs. Not SASWP without a Product mapping. |
| Need schema types no SEO plugin covers | SASWP, configured deliberately, with the WooCommerce behaviour understood |
| Need full control, no plugin bloat | Add the JSON-LD manually |
| Managing schema across hundreds of URLs | Plugins stop scaling here, see schema markup at scale |
Three Things to Check on Your Own Site Today
- View source on a post and search for
ld+json. If there's nothing there, your schema plugin is one of the silent ones. - Count the blocks. More than one
ld+jsonblock describing the same page usually means two plugins are competing. - If you run WooCommerce, open a product page in the Rich Results Test. "No items detected" means something removed Woo's native markup.
FAQ: WordPress Schema Plugins
Do I need a schema plugin at all?
WordPress core outputs no structured data on its own, which we verified on a clean 7.0.2 install. So you need either a plugin, theme support, or manual JSON-LD. A plugin is the right answer for most sites.
Can I run two schema plugins at once?
No. In our tests, Yoast plus All in One SEO produced two complete duplicate graphs: two Article nodes, two Organization nodes, two WebPage nodes, on the same page. Pick one.
Why does my plugin show no schema in the Rich Results Test?
The three most common causes, in order: Rank Math's setup wizard was never completed; SASWP has no schema mapping created; or you're on SEOPress free, which doesn't do content schema. All three produce exactly zero output with no error message.
Does more schema markup rank better?
No. Correct, non-conflicting markup that matches visible page content is what matters. The largest output in our test (Yoast, 4,029 bytes) includes scaffolding that has no rich result effect, and the smallest valid output (Rank Math, 2,286 bytes) is arguably the better graph.
Is FAQ schema still worth adding in WordPress?
Not for rich results. Google removed FAQ rich results from Search on 7 May 2026. Existing markup is harmless and can stay, but it no longer produces a visible search feature. More on this in FAQ and HowTo schema after the 2026 deprecation.
Which schema plugin is best for WooCommerce?
Rank Math was the only one that replaced WooCommerce's native output cleanly rather than adding a second breadcrumb trail alongside it. SASWP is the one to avoid, because it removes Woo's product markup without replacing it. Full detail in our WooCommerce schema markup guide.
Testing conducted 30 July 2026 on WordPress 7.0.2 / PHP 8.4.21. Plugin versions as listed. Structured data extracted from rendered front-end HTML and audited programmatically against Google's documented Article requirements. Methodology and raw output available on request.
Not Sure What Your Site Is Actually Emitting?
Use our Schema Gap Analyzer to audit structured data across your pages, or book a consultation for a clean implementation plan.