Skip to content
Searchpedia SEO field notes Callum Bennett Callum

Tool lab

Yoast Schema Markup

I rely on Yoast's schema markup for site identity and content type defaults, but I've learned where its simplicity becomes a limitation.

Beginner3 min readUpdated 2026-07-27Notes by Callum Bennett

The short verdict

  • Set your site representation to Organisation or Person in Yoast's Site Representation settings first.
  • Use the default schema settings for each content type so posts and pages inherit the right type automatically.
  • Test all schema output with Google Rich Results Test before publishing each new page.
  • If you need LocalBusiness or Product schema, expect to supplement Yoast with a dedicated plugin or manual JSON-LD.
  • Don't assume the plugin's output is correct – conflicts with other plugins can silently break schema.

What it's good at

Ease of use. If you already run Yoast SEO, schema setup is a few clicks away. I used to write all my JSON-LD by hand, but one client site with 200 blog posts made me change my mind. Setting the Site Representation to Organisation in Yoast took thirty seconds and every page on that site referenced the same identity without me touching a line of code. That consistency is a real win for brand schema – Google can see that the site belongs to a single entity.

Content type defaults. Yoast lets you assign a schema type per content type. For example, I set Article for blog posts and WebPage for static pages. Every new post inherits that type automatically. On a recent project with a team of four writers, that meant we did not have to remember to pick Article each time. The schema graph stayed clean across forty posts in three months.

The metabox controls. For individual pages, Yoast gives you a dropdown to override the type – you can switch a blog post from Article to NewsArticle if it fits. I have used this for press releases and time-sensitive content. It is not as granular as manual code, but for the seventy per cent of sites that only need Article, WebPage, or a simple organisation identity, it works well.

I also appreciate that Yoast uses JSON-LD rather than microdata. That is the format Google prefers now, and it keeps the schema out of your markup, which helps with page speed and reduces the risk of HTML errors breaking the structured data. A quick crawl with [Screaming Frog](/screaming-frog/) confirmed that the JSON-LD block was present on every page of my site.

What it's awkward for

Custom or complex schema. If you need LocalBusiness, Product, Event with nested Offers, or any schema that combines multiple types under one thing, Yoast's defaults will not cut it. I learned this the hard way for a client that runs a bakery chain. They needed LocalBusiness on every location page, with opening hours, address, and offers. Yoast cannot output that – its schema graph only supports simple types like Article, WebPage, and Organisation. I had to install a dedicated plugin to cover the gaps, which then conflicted with Yoast's JSON-LD and caused duplicate schema. We ended up disabling Yoast's schema entirely for those pages.

Validation surprises. I have seen cases where the schema output looks right in Yoast's settings but fails validation in Google Rich Results Test. The most common culprit is a missing or incorrect @id reference. Yoast builds a schema graph with @id references back to the site representation. If that representation is not set correctly – for instance, you select Person but should have Organisation – the whole graph breaks. A site I audited last year had Yoast configured with the wrong URL in the WordPress address, so every @id pointed to a non-canonical version of the homepage. The fix was a two-minute change, but the faulty schema had been live for eight months.

Conflicts with other plugins. Yoast's schema output can be blocked or modified by caching plugins, SEO plugins that also output schema, or custom post type managers that do not register types properly. I once diagnosed a case where a page cache plugin stripped the JSON-LD block entirely from cached HTML. The rich result never appeared, even though Yoast was configured correctly. Disabling that cache fixed it, but the loss of rich snippet eligibility for four months hurt the site's click-through rate on Google. If you rely on Yoast for schema, run [Ahrefs](/ahrefs/) or [Rank Tracker](/rank-tracker/) to monitor whether your pages are actually eligible for rich results.

When to avoid Yoast schema entirely. If your site uses multiple schema types on the same page – for example a BlogPosting that is also a CreativeWork series with a separate Person author – Yoast cannot merge them cleanly. You will end up with separate graph nodes that may not connect. For any site that needs product, review, or FAQ schema across many pages, I recommend skipping Yoast's schema and going fully manual with a helper like [Surfer SEO](/surferseo/) that does not interfere.

Alternatives I'd consider

Schema Pro. When I need LocalBusiness, Product, or custom post type support, Schema Pro is my first choice. It costs about $79 per year for a single site, and it lets you assign multiple schema types to a single page with full control over the JSON-LD output. For the bakery chain client, I used Schema Pro to map each location page to LocalBusiness with nested opening hours, and it passed validation first time. The trade-off is that you now have two schema plugins on the site – Yoast for meta tags and Schema Pro for structured data – which adds complexity and a small risk of conflict. I always test each new page with the Rich Results Test before going live.

Rank Math. If you want richer schema controls without leaving the Yoast-style interface, Rank Math is worth a look. It includes more built-in types – FAQ, HowTo, LocalBusiness, Product, and several others – all configurable from a post's metabox. I moved one of my personal sites to Rank Math because its FAQ schema block outputted clean JSON-LD without needing an extra plugin. Rank Math also handles schema validation within the plugin and warns you about missing fields. That is a nice time-saver. However, its interface is busier than Yoast's, and some users find the number of options overwhelming.

Manual JSON-LD. For edge cases like a site that needs a custom schema graph combining events, videos, and a review snippet, nothing beats writing your own JSON-LD. I do this for sites where I need absolute control. It takes about twenty minutes to write and test a complex graph, and then you inject it via a theme function or a plugin like [MozBar](/mozbar/) that lets you verify it on the page. The downside is maintenance: every time you add a new schema type, you need to update the code. For small sites with one or two schemas, manual code is fine. For larger sites, I prefer a plugin that handles it programmatically.

I have also used [Bing Webmaster Tools](/bing-webmaster-tools/) to check how my schema is interpreted by a different search engine – it occasionally flags issues Google does not, which gives me an extra layer of confidence in the manual output. Ultimately, which alternative I choose depends on the number of schema types I need and how often they change. Yoast stays on the site for meta management, but its schema output gets disabled for pages that need something beyond its defaults.

Next step

Quick answers

Does Yoast's schema markup guarantee rich results?

No. Valid schema is a prerequisite, not a guarantee. Google decides whether to display a rich result based on the query, the user, and its own quality thresholds. I have seen perfectly valid Yoast FAQ schema never trigger a rich snippet.

Can I add custom schema types like Recipe or VideoObject with Yoast?

Not directly. Yoast only offers its built-in types: Article, WebPage, CollectionPage, ProfilePage, and a few others. For Recipe or VideoObject you need a plugin like Schema Pro, Rank Math, or manual JSON-LD.

Why might Yoast's schema output fail validation even when settings look correct?

Common reasons: the site representation is set to Person instead of Organisation, the WordPress address contains a typo, a caching plugin strips the JSON-LD block, or another plugin outputs conflicting schema. Always test with Google Rich Results Test and inspect the raw HTML.

Sources

Primary documentation is linked directly. Anything commercial is marked nofollow.

Notes from Callum Bennett.