SEO Plugin Stack-Up: Yoast vs Rank Math vs Brndle’s Own JSON-LD, What Overlaps

Yoast SEO and Rank Math each build a complete schema.org graph on every page they touch, WebSite, WebPage, Organization or Person, usually Article, and BreadcrumbList once breadcrumbs are switched on. Brndle, the theme itself, emits exactly one schema type: FAQPage, from one block, and nothing else. We confirmed that split down to the actual PHP in our read of Brndle’s compatibility source. What that post didn’t do is put Yoast’s and Rank Math’s own default output next to Brndle’s, which is the actual question a developer has before shipping: if I install Yoast or Rank Math on a Brndle site, what exactly am I getting from each, and where’s the one spot, FAQ schema, where a second plugin or block can quietly duplicate what Brndle already produces?
That spot is not hypothetical. Both Yoast and Rank Math ship their own native FAQ block, and each one emits its own FAQPage JSON-LD independently of anything the theme does, Yoast calls its version a structured data content block, Rank Math calls its version “FAQ by Rank Math.” Drop either one onto a page that already has Brndle’s native brndle/faq block filled in with the same questions, and the page now carries two FAQPage entities describing the same content at the same URL. That is precisely the failure mode Google’s Rich Results Test flags as redundant rather than silently preferring the better of the two. This post lays out what each plugin actually emits by default, reading their own documentation instead of guessing, lines that up against Brndle’s one confirmed exception and its six deliberate non-emissions, and closes with a decision framework for which plugin to run and how to keep FAQ schema singular no matter which one you pick.
Table of contents
- Yoast SEO’s real default schema output
- Rank Math’s real default schema output
- Where Brndle sits: one exception, six deliberate non-emissions
- The full matrix: who emits what, type by type
- The decision framework: pick a plugin, don’t double up on FAQ
- How to verify your own site in Rich Results Test
- FAQ
- The takeaway
Yoast SEO’s real default schema output
Yoast’s own structured data documentation describes its approach as one connected graph rather than a checklist of isolated types: “Yoast SEO automatically creates a structured data graph for every page, connecting key elements like articles, authors, products, and organizations.” Read past that framing line and the graph resolves into a predictable, repeatable set of pieces, built from what the page is and how the site’s SEO settings are configured, not from anything the theme supplies.
- WebSite. A site-level node present on effectively every page, carrying the site name and, when the setting is on, a
SearchActionthat can power Google’s sitelinks search box. This piece doesn’t vary by page type; it is the anchor the rest of the graph hangs off. - Organization or Person. Whichever one Yoast’s Site Representation setting (under Search Appearance → General, “Site representation”) says the site is run by. Pick organization and you get an
Organizationnode with a logo and social profiles; pick person and you get aPersonnode instead. Only one of the two exists in the graph at a time, this is the setting Rank Math mirrors with its own knowledge-graph choice, and it is also the setting Brndle’s author-page enrichment has to work around, since a site-brandPersonnode and an individual author’sPersonnode can coexist and must not be conflated. - WebPage. A per-page node whose exact subtype shifts with context (a post gets one shape, an archive or search results page gets another), referencing the
WebSitenode above it and the content node below it. - Article or BlogPosting. Added to single posts, with an
authorreference pointing back to the Person node and apublisherreference pointing to the Organization node, which is exactly the two-node reference structure Brndle’s compatibility layer enriches rather than replaces. - BreadcrumbList. Tied to Yoast’s breadcrumbs feature (Search Appearance → Breadcrumbs). When that feature is on, the graph gets a
BreadcrumbListnode built from the page’s position in the site’s content hierarchy. Turn breadcrumbs off and this node does not appear, independent of whether a visual breadcrumb trail is rendered anywhere on the page. - LocalBusiness. Not part of the free plugin’s automatic output. It ships with the separate Local SEO add-on, and only appears once that add-on is installed and a business location is configured. Worth separating out explicitly, because “Yoast emits LocalBusiness schema” and “Yoast SEO free emits LocalBusiness schema by default” are different claims, and only the first one is accurate.
- FAQPage and HowTo, opt-in per block. Yoast’s own documentation is direct about this piece being separate from the automatic page-level graph above: “our structured data content blocks for the WordPress block editor make it easy to add structured data to your FAQs and How-Tos.” Unlike
WebSite,WebPage,Organization/Person,Article, andBreadcrumbList, which appear automatically whenever the relevant setting is on, Yoast’s FAQ schema only exists on a page if someone has specifically dropped Yoast’s FAQ content block into that page’s content and filled it in. That distinction, automatic graph pieces versus an opt-in content block, is exactly the one that matters for the duplication risk this post is about.
Put plainly: on a typical single post with Yoast active and breadcrumbs turned on, you should expect to see WebSite, WebPage, Organization or Person, Article, and BreadcrumbList in the Rich Results Test, every time, with no action needed from the person writing the post. FAQPage only shows up if that post specifically uses Yoast’s own FAQ content block.
Rank Math’s real default schema output
Rank Math’s own knowledge base is more granular than Yoast’s about which pieces are automatic and which require a setting, type by type, in its documentation for rich snippets and schema. Quoting it directly, rather than summarizing from memory, matters here because the exact wording (“added by default,” “automatically added once”) is the difference between a schema piece you get for free and one you have to turn on.
- WebSite. “The WebSite Schema contains the details of your site, including its name, alternative name, and whether a person or organization owns it. It is added to your site by default.” No setting to flip; it is simply there.
- WebPage. Rank Math’s documentation says this type “specifies that a page is a webpage” and “is added by default to your webpages.” Same automatic behavior as Yoast’s equivalent node, just under a plainer name.
- ProfilePage. “The ProfilePage Schema is added to your author pages by default.” This is a piece Yoast’s documentation doesn’t call out by the same name for author archives, and it is worth knowing about specifically if your site has public author pages, since it is one more type that can collide with a page-builder plugin that also decorates author pages.
- Person or Organization. “The Person Schema is included by default when the site is operated on behalf of a person. Similarly, the Organization Schema is added by default when the site is operated on behalf of an organization.” Functionally the same single-node-at-a-time behavior as Yoast’s Site Representation setting, just configured from Rank Math’s own Titles & Meta → Knowledge Graph screen instead.
- Article. Documented as the recommended default schema type for blog content, applied to posts once a post type’s default schema is configured under Titles & Meta → Posts. In practice this is close to automatic on a typical blog, since Article is the type Rank Math suggests out of the box for the post post-type, but it is technically a per-post-type setting rather than an unconditional default the way
WebSiteandWebPageare. - BreadcrumbList. Here Rank Math’s own wording is explicit about the gate: this schema is “automatically added once breadcrumbs are activated via Rank Math SEO → General Settings → Breadcrumbs.” Until that toggle is flipped, there is no
BreadcrumbListnode in Rank Math’s graph at all, not a stripped-down one, none. That single setting is the whole difference between a page with a complete five-node graph and one missing its breadcrumb entity entirely. - FAQPage, via a dedicated block. Rank Math’s documentation states it plainly: “With Rank Math’s FAQ Block, adding the appropriate FAQ Schema to your blog posts is effortless.” The “FAQ by Rank Math” block is available directly in the WordPress block editor, and like Yoast’s equivalent, it is opt-in per page, the schema exists only where that specific block has been added and filled in, not as part of the automatic graph every page gets.
The practical shape is close to Yoast’s: a handful of graph pieces that show up automatically once the relevant setting is configured (WebSite always, WebPage always, ProfilePage on author pages, Person/Organization from the Knowledge Graph setting, Article from the per-post-type default, BreadcrumbList once breadcrumbs are turned on), plus one opt-in block-level type, FAQPage, that only appears where someone deliberately placed it. The gate on BreadcrumbList is the one piece worth remembering by name, because it is easy to assume a plugin that is “already handling schema” is handling breadcrumb schema too, when in Rank Math’s case that specific node needs its own setting turned on first.
Where Brndle sits: one exception, six deliberate non-emissions
The facts in this section were established in full, against the theme’s actual PHP source, commit history, and planning documents, in our earlier post on Brndle’s JSON-LD emission. This post builds on that work rather than repeating the investigation; what follows is the condensed version needed to place Brndle correctly against the two plugins above.
Exactly one surface in Brndle writes a <script type="application/ld+json"> tag onto a rendered page: the brndle/faq block, rendered by resources/views/blocks/faq.blade.php, which builds a FAQPage graph with a mainEntity array of Question/Answer pairs from the block’s own items and prints nothing at all when there are zero valid items:
$schema = null;
if (!empty($faqItems)) {
$schema = [
'@context' => 'https://schema.org',
'@type' => 'FAQPage',
'mainEntity' => array_map(function ($item) {
return [
'@type' => 'Question',
'name' => wp_strip_all_tags($item['question']),
'acceptedAnswer' => [
'@type' => 'Answer',
'text' => wp_strip_all_tags($item['answer']),
],
];
}, $faqItems),
];
}
Nothing else in the theme writes schema, and that is a documented, enforced boundary rather than an oversight. The planning document behind Brndle 2.0.0, plans/2026-05-03-theme-audit-roadmap.md, states the rule in terms that name every type it covers: “Do NOT emit Article / BreadcrumbList / Person / Organization / WebSite / WebPage JSON-LD from the theme. Both plugins emit complete schema graphs. Adding the theme’s own schema produces duplicate @type entries that Google flags as ‘redundant’ in Rich Results Test.” That list of six types maps almost exactly onto the automatic graph pieces described above for both Yoast and Rank Math, which is the whole point. Brndle’s theme team read both plugins’ default output, the same material covered in the two sections above, and drew the exclusion list directly from it.
On a site running neither plugin, Brndle does not step in and cover the gap itself. app/Compatibility/SeoPluginNotice.php detects the absence of both and shows a dismissible admin notice stating that post pages will publish “without Article / Person / Breadcrumb structured data” because the theme “deliberately does not emit competing schema.” Person schema is the one place Brndle still contributes something once a plugin is active, and it does so as enrichment rather than a second entity: via wpseo_schema_person for Yoast and rank_math/json_ld for Rank Math, Brndle appends social links and a job title to the Person node the plugin already built, matched only to nodes whose @id or url pattern-matches an author page, specifically so a site-brand Person entity (the Organization-vs-Person site representation choice described in both sections above) never gets an author’s social links merged into it by mistake.
One gap the earlier post flagged and this one inherits: Brndle’s README lists “Breadcrumbs” under its Yoast/Rank Math compatibility bullet, but the only thing that currently ships is a theme-support detection flag (add_theme_support('yoast-seo-breadcrumbs')), not a template that actually calls yoast_breadcrumb() or rank_math_the_breadcrumbs() to print a visible trail. The BreadcrumbList JSON-LD itself is unaffected by that gap either way, since it was never the theme’s job to emit it; what’s missing is the visual HTML trail, not any schema.
The full matrix: who emits what, type by type
Lining up the two sections above against Brndle’s confirmed source gives a single reference table. “Automatic” means the piece appears without anyone adding a block or filling in content; “opt-in block” means it only appears where someone has placed and filled in a specific block.
| Schema type | Yoast SEO | Rank Math | Brndle theme |
|---|---|---|---|
| WebSite | Automatic, every page | Automatic, every page (“added to your site by default”) | Never – excluded since v2.0.0 |
| WebPage | Automatic, every page | Automatic, every page (“added by default to your webpages”) | Never – excluded since v2.0.0 |
| Organization or Person (site identity) | Automatic, from Site Representation setting | Automatic, from Knowledge Graph setting | Never builds the node; enriches the author Person node’s sameAs/jobTitle only |
| ProfilePage (author pages) | Not called out by this name in Yoast’s own docs | Automatic, author pages (“added to your author pages by default”) | Never |
| Article / BlogPosting | Automatic, single posts | Automatic once the post type’s default schema is configured (Article is the suggested default) | Never – excluded since v2.0.0 |
| BreadcrumbList | Gated behind the Breadcrumbs setting (Search Appearance → Breadcrumbs) | Gated behind the Breadcrumbs setting (General Settings → Breadcrumbs), explicitly “automatically added once breadcrumbs are activated” | Never, by design, regardless of whether a visual trail exists |
| FAQPage | Opt-in, via Yoast’s own structured data content block | Opt-in, via the “FAQ by Rank Math” block | Opt-in, via the native brndle/faq block – the one type all three can produce |
| LocalBusiness | Only with the separate Local SEO add-on, configured | Supported via its own Local SEO module/settings, not the base plugin’s unconditional default | Never |
One row carries the entire risk this post exists to flag: FAQPage is the only schema type where Yoast, Rank Math, and Brndle are all three capable of emitting it, and none of the three plugins or theme knows the others exist. Every other row has exactly one possible source, because Brndle has deliberately stayed out of it.
The decision framework: pick a plugin, don’t double up on FAQ
Step 1: run one SEO plugin, not two
This isn’t a Brndle-specific rule, but it is the first thing to rule out before worrying about theme interactions at all. Both Yoast and Rank Math independently build the same five automatic graph pieces, WebSite, WebPage, Organization/Person, Article, BreadcrumbList once enabled, and activating both plugins at once on the same install means both of them are writing that graph simultaneously, which produces exactly the duplicate-entity problem this whole series is about, with neither plugin aware the other exists. Brndle doesn’t resolve this for you, and can’t: its compatibility layer detects “is Yoast active” and “is Rank Math active” independently and will happily enrich a Person node in both plugins’ graphs if both are somehow running. Pick one.
Step 2: turn breadcrumbs on in whichever one you picked
Since Brndle never emits BreadcrumbList schema under any configuration, that node exists on your site only if the SEO plugin’s own breadcrumbs setting is switched on, Search Appearance → Breadcrumbs in Yoast, General Settings → Breadcrumbs in Rank Math. Skipping this step doesn’t create a duplication risk, it creates a silent gap: no breadcrumb schema anywhere on the site, with nothing in Search Console or a casual glance at the page flagging that it’s missing, because a missing optional node doesn’t look like an error.
Step 3: FAQ schema gets exactly one owner per page
This is the actual decision the matrix above points to. Three legitimate FAQ UIs can now produce FAQPage schema for the same questions: Brndle’s native brndle/faq block, Yoast’s structured data FAQ content block, and Rank Math’s “FAQ by Rank Math” block. Pick one per page, not more:
- Default to Brndle’s native
brndle/faqblock. It’s server-rendered, zero-JS, themed to match Brndle’s own tokens out of the box, and it doesn’t depend on an SEO plugin being active at all, the schema still emits even on a site running neither Yoast nor Rank Math. For a Brndle site, this is the block with the fewest moving parts. - If you specifically prefer the SEO plugin’s FAQ block, for its own editing UI, or because an existing content workflow already uses it, that is a legitimate choice too. The requirement is exclusivity, not which block wins: use Yoast’s or Rank Math’s FAQ block for that page’s questions, and do not also fill in Brndle’s
brndle/faqblock with the same content on that page. - Never place two FAQ-schema-emitting blocks on the same page for the same questions. If a page genuinely needs two separate FAQ groups covering different content, each with its own heading and its own distinct set of questions, that’s a legitimate two-
FAQPagesituation and the Rich Results Test will show two valid entries rather than a redundant flag, the problem is specifically restating the same questions twice, not having more than one FAQ block anywhere on a site. - If you want FAQ-adjacent UI without schema, Brndle’s
brndle/tabs-accordionblock in accordion mode is built for exactly this. It’s documented as a “neutral disclosure pattern” that never emitsFAQPageJSON-LD, specifically so a visually similar block can’t accidentally claim the same schema type a real FAQ block already owns.
Step 4: everything else is the plugin’s job, full stop
Article, Person, Organization, WebSite, WebPage, ProfilePage, and BreadcrumbList have exactly one possible source on a Brndle site: whichever SEO plugin you chose in Step 1. There is no theme setting to check, no second block that might be competing, and no scenario where Brndle contributes a second node for any of those types, the 2.0.0 roadmap document ruled that out by name, and the compatibility source confirms it was actually built that way. The only thing Brndle does in this territory is enrich the Person node’s sameAs and jobTitle fields on the plugin’s own entity, which modifies two keys on an object the plugin still fully owns rather than adding a competing one.
How to verify your own site in Rich Results Test
Reading plugin documentation and theme source tells you what should be true. A live page tells you what your specific combination of plugin, plugin settings, theme version, and any third plugin you’ve also installed actually produced. Run this check after any change to your SEO plugin setup, not just once at launch.
- Open the Rich Results Test at search.google.com/test/rich-results and enter the URL of a published page that has at least one FAQ block on it.
- Count detected items by type. You should see exactly one entry per type: one
FAQPageif the page has a filled-in FAQ block from any single source, oneArticle/BlogPosting, oneBreadcrumbListif breadcrumbs are enabled, and onePersonorOrganizationdepending on your site representation setting. TwoFAQPageentries on one page means two FAQ blocks (theme, Yoast, or Rank Math) are covering the same or overlapping questions, go back to that page in the editor and remove one. - View page source and search for
application/ld+json. Use View Page Source, not just the DOM inspector, since this shows what was actually sent before any client-side script ran. Count the script tags directly; this number should match what the Rich Results Test reports. - If you just switched SEO plugins, re-run this check on a handful of pages. A caching layer can keep serving an old plugin’s schema for a while after you’ve deactivated it, which looks identical to a genuine duplication bug until you clear the cache and test again.
- Check Search Console’s structured data Enhancements reports over time for the relevant type. A single-page spot check only catches what’s wrong on the one URL you tested; Search Console’s site-wide reports surface duplicate or conflicting entity warnings across your whole indexed site as Google re-crawls it.
If a duplicate FAQPage shows up, the fix per this post’s own matrix is narrow: check whether the page has both Brndle’s brndle/faq block and either plugin’s FAQ block filled in for the same questions, and remove one. If a duplicate of any other type shows up, Article, Person, Organization, WebSite, WebPage, BreadcrumbList, it cannot be coming from Brndle by the architecture confirmed above; check for both SEO plugins being active at once, a stale cached page, or schema manually pasted into the page from before it moved to Brndle.
FAQ
Does Brndle emit any of the schema types Yoast or Rank Math also produce?
No, with one exception. Brndle’s brndle/faq block emits FAQPage JSON-LD, which both Yoast and Rank Math can also produce through their own FAQ blocks. Every other type covered in this post, WebSite, WebPage, Organization/Person, ProfilePage, Article, and BreadcrumbList, is never emitted by Brndle, by an explicit rule written into the theme’s own planning documents since version 2.0.0.
Which plugin should a Brndle site run, Yoast or Rank Math?
The theme doesn’t favor either one. Brndle’s compatibility layer treats both symmetrically, the same Person-enrichment pattern exists for each, wired to that plugin’s own filter hook, and the same theme-support breadcrumb detection checks for both. The choice comes down to the plugins’ own feature sets, UI, and pricing, not anything Brndle requires. The one setting worth checking regardless of which you pick is that plugin’s breadcrumbs toggle, since Brndle never substitutes for it.
Does Yoast add BreadcrumbList schema automatically, with no setting required?
No. It is tied to Yoast’s own breadcrumbs feature under Search Appearance → Breadcrumbs. Turn that setting off, or never turn it on, and the BreadcrumbList node does not appear in Yoast’s graph, independent of whether any visual breadcrumb trail is rendered on the page.
Does Rank Math add BreadcrumbList schema automatically?
Also no, and Rank Math’s own documentation is explicit about the gate: the schema is “automatically added once breadcrumbs are activated via Rank Math SEO → General Settings → Breadcrumbs.” Until that setting is turned on, there is no BreadcrumbList node in Rank Math’s output for any page.
If I use Brndle’s native FAQ block, should I also add Yoast’s or Rank Math’s FAQ block to the same page?
Not for the same questions. Doing so produces two FAQPage entities describing the same content on one URL, which Google’s Rich Results Test flags as a redundant duplicate rather than picking the better one. Use exactly one FAQ-schema-emitting block per set of questions on a page.
What happens if a page ends up with both Brndle’s FAQ block and a plugin’s FAQ block filled in with the same questions?
Both still emit valid, well-formed FAQPage JSON-LD independently, Brndle’s block has no awareness of Yoast’s or Rank Math’s blocks and vice versa, so nothing errors or gets suppressed automatically. The Rich Results Test will show two FAQPage entries for the one page and flag the situation as redundant. The fix is manual: open the page in the editor and remove the content from one of the two blocks.
Can I run both Yoast and Rank Math on the same Brndle site?
You can install both, but running both active at once means two plugins independently building the same automatic graph pieces, WebSite, WebPage, Organization/Person, Article, and BreadcrumbList once each has breadcrumbs enabled, with neither aware the other exists. That produces the exact duplicate-entity problem this post is about, and it is unrelated to anything Brndle does; it would happen on any theme. Run one SEO plugin per site.
Does Brndle’s Person-schema enrichment work the same way for both plugins?
The outcome is the same, appending social links to sameAs and filling jobTitle only when empty, but the hooks differ because the plugins expose schema differently. Yoast uses a single filter, wpseo_schema_person. Rank Math needs two: rank_math/snippet/rich_snippet_person_entity for a standalone Person snippet, and rank_math/json_ld to walk the full assembled graph looking for a Person node, since Rank Math doesn’t expose a single dedicated Person filter the way Yoast does.
If I switch a live Brndle site from Yoast to Rank Math, will I get duplicate schema during the transition?
Only if both plugins are active at the same time, even briefly, or if a caching layer keeps serving pages rendered while the old plugin was still active after you’ve switched. Deactivate the old plugin fully, clear any page or object cache, and re-run the Rich Results Test against a few live URLs before considering the migration done, don’t rely on the admin screen alone to confirm the switch took effect on the public-facing pages.
How do I confirm there’s no duplicate schema on my own site right now, in five minutes?
Run a published page through Google’s Rich Results Test at search.google.com/test/rich-results and count the detected items by type; you should see exactly one of each type the page is expected to have. Then View Page Source and search for application/ld+json to count the raw script tags directly, which should match. Any type beyond FAQPage showing up twice cannot be coming from Brndle, by the architecture confirmed in this post and its predecessor, check for two active SEO plugins, a stale cache, or leftover manually pasted schema from a previous theme.
The takeaway
Yoast and Rank Math both build a genuinely complete schema graph on their own, five automatic pieces between WebSite, WebPage, Organization/Person, Article, and BreadcrumbList, plus their own opt-in FAQ block. Brndle was built to add exactly nothing to that graph except two enriched fields on the Person node, and to emit exactly one type of its own, FAQPage, from exactly one block. The two plugins’ default output and Brndle’s exception overlap at a single point: three different sources can all produce FAQPage schema for the same questions, and none of them know the other two exist. Pick one SEO plugin, turn its breadcrumbs setting on, pick one FAQ block per page and stick with it, and the rest of the schema graph takes care of itself exactly the way the theme’s own planning documents intended it to. Verify it on a live page in the Rich Results Test rather than trusting a changelog, including this one.
Sources, read on 12 November 2026
- brndle.com: JSON-LD Schema Emission in Brndle, FAQPage, Breadcrumbs, and What’s Still Manual, the full source-level investigation this post builds on
- Yoast: The ultimate guide to structured data / schema, Yoast’s own description of its automatic graph and its FAQ/How-To structured data content blocks
- Rank Math: Rich Snippets (Schema) – Knowledge Base, the per-type default behavior for WebSite, WebPage, ProfilePage, Person/Organization, Article, BreadcrumbList, and the FAQ by Rank Math block
- Google Search Central: FAQPage structured data
- Google Rich Results Test
- Schema Markup Validator