Schema plugins for WordPress: what structured data does, and how to add it with or without one

What structured data changes in search, how to see what your site already outputs, which WordPress plugins write it, and the code for the cases no plugin covers.

Published by AI Knows Us · Updated 14 October 2026

A WordPress schema plugin writes structured data into your pages as JSON-LD, a block of machine readable facts that sits in the HTML and says what the page is about: an article with this author and this date, a local business with these hours, a product with this price and this availability. Structured data does two jobs. It makes a page eligible for rich results in Google, the star ratings, breadcrumbs, prices and FAQ expanders that change how a listing looks. And it states your facts in a form every machine reader parses identically, which is how a search engine learns that your company, your logo and your social profiles are all the same entity. Adding it does not move a page up the results on its own. It changes what the listing looks like and how reliably machines understand you, and both of those change clicks.

This page covers the plugin decision, the setup that matters, and the markup for cases a plugin leaves out. For a full walkthrough of one plugin's settings, see Yoast SEO or Rank Math and its schema builder.

Check what your site already outputs first

Most WordPress sites with an SEO plugin installed are already emitting structured data, and a second schema plugin on top of it produces two competing blocks. Look before you install anything.

curl -s https://example.com/ | grep -c 'application/ld+json'

One match per block. If that returns 2 or 3, read each block before you add a fourth. Then run the page through Google's Rich Results Test, which shows which rich result types the page qualifies for, and the Schema Markup Validator, which parses everything including types Google does not use.

The plugin options

PluginWhat it gives youBest for
Yoast SEOA connected graph of Organization, WebSite, WebPage, Article and Person by default, with Premium adding more types and an API for developersSites that want correct defaults with very few decisions
Rank MathA visual schema builder, per post type defaults, custom schema templates, and a validator link built into the editorTeams that want to shape the markup themselves without code
All in One SEOSchema settings per post type plus a catalogue of additional types in the paid tiersExisting All in One SEO sites consolidating onto one plugin
A code snippet in a child theme or snippets pluginExactly the properties you write, nothing elseOne or two pages that need a type the plugins do not output

One SEO plugin, one source of structured data. That is the whole rule. Running Yoast and Rank Math together, or either of them alongside a standalone schema plugin, is the most common cause of conflicting blocks on a WordPress site.

The five settings that do the work

  • Organization or person. Every modern SEO plugin asks this once and uses the answer everywhere. A company picks Organization. A consultant publishing under their own name picks Person.
  • Name, URL and logo. Set them in the plugin rather than relying on the theme. A square logo at 112 pixels or larger is the practical floor.
  • Social profiles. These become sameAs values, which is how a search engine confirms that your LinkedIn page, your directory listings and your site describe one company. Organization schema goes into what that block does and does not do.
  • Per post type mapping. Blog posts as Article, service pages as WebPage, and anything commercial mapped deliberately rather than left on the default.
  • Breadcrumbs. Turn the plugin's breadcrumb trail on and output it in the template. It produces BreadcrumbList markup and gives Google the path it shows under your title.

Hand coding the cases a plugin leaves out

Put this in a child theme's functions.php or a code snippets plugin. It outputs an Organization block on the front page only, with the sameAs profiles that tie your identity together.

add_action( 'wp_head', function () {
    if ( ! is_front_page() ) {
        return;
    }
    $data = array(
        '@context' => 'https://schema.org',
        '@type'    => 'Organization',
        'name'     => 'Example Boots',
        'url'      => 'https://example.com/',
        'logo'     => 'https://example.com/wp-content/uploads/logo.png',
        'sameAs'   => array(
            'https://www.linkedin.com/company/example-boots',
            'https://www.youtube.com/@exampleboots',
        ),
    );
    echo '<script type="application/ld+json">'
        . wp_json_encode( $data )
        . '</script>' . "\n";
}, 20 );

For a shop or a clinic, LocalBusiness carries the facts that get you named in a city. Note the opening hours format, which is the field most often written wrongly:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ShoeStore",
  "name": "Example Boots",
  "url": "https://example.com/",
  "telephone": "+44 20 7946 0000",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "14 Carter Lane",
    "addressLocality": "London",
    "postalCode": "EC4V 5AA",
    "addressCountry": "GB"
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "18:00"
    }
  ]
}
</script>

Google's reference for this type is its local business structured data documentation, and LocalBusiness schema explained covers which properties earn their place.

The rules that keep markup valid

  • Mark up what is visible. A price, a rating or a review in the markup must be on the page for a user to see. Google's structured data guidelines are explicit about this, and mismatches are the usual reason rich results stop showing.
  • JSON-LD, not microdata. It is Google's stated preference and it separates the data from the layout, so a theme change does not break it.
  • One block per entity. Two Article blocks on one post is an error, not redundancy.
  • FAQPage only where Google still shows it. Keep the questions on the page for readers regardless, because the content earns its place even when the expander does not appear.
  • Watch the Search Console enhancement reports. Every rich result type you qualify for gets its own report, and an error there is a fix with a known deadline rather than a mystery.

A thirty minute setup, in order

  1. Count the existing JSON-LD blocks and remove any duplicate plugin.
  2. Set Organization or Person, name, URL, logo and social profiles once.
  3. Map each post type to a schema type deliberately.
  4. Turn breadcrumbs on in the plugin and output them in the template.
  5. Run three representative URLs through the Rich Results Test: the home page, a blog post, and your most commercial page.
  6. Add a hand written block only for what is still missing.

What gets asked about schema plugins for WordPress

Does structured data improve rankings?

It changes eligibility and appearance rather than position. The gain shows up as a higher click through rate on the same ranking, and as machines describing your business accurately.

Do I need a separate schema plugin if I already use an SEO plugin?

No. Yoast, Rank Math and All in One SEO all output structured data. Add a second plugin only when you need a type yours does not support, and check for duplicate blocks afterwards.

Which schema types are worth the effort on a normal site?

Organization or LocalBusiness, BreadcrumbList, Article on posts, and Product on anything you sell. Those four cover most of what Google reads from a WordPress site.

Will a page builder strip my markup?

Output via wp_head or your SEO plugin and it survives layout changes. Markup pasted into a text widget inside a builder is the version that goes missing after a redesign.

How often should I recheck it?

After every theme change, plugin update that touches the head, and site migration. A quarterly pass through the Rich Results Test on three URLs keeps you working from current data.

The reader you have not marked up for yet

Plugins and hand written code both describe your pages to a machine reader. One reader is new: an assistant that takes your organisation, product and FAQ markup and uses it to answer a buyer. If it reads a field wrongly, the buyer hears the error.

Once the markup is live, ask the assistants the questions it covers. AI Knows Us runs such questions across assistants and keeps the replies, so a wrong field is something you find by looking and not through a complaint.

Read next

Or browse the whole archive.

See what AI says about you.

The first scan is free, it needs no account, and it asks the questions your buyers ask.

Free. No card. We ask 5 real buyer questions on 2 AI apps.

Already sure you want this? Join the waitlist. We open on 31 October 2026. It costs an email address. No card, and nothing is charged. Or talk to a person if you have a question first. Or read how we fix what it finds.