> ## Content Index
> Fetch the complete content index at: https://www.livain.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Your SEO plugin is shipping broken schema. I fixed what mine emitted.
- URL: https://www.livain.com/blog/your-seo-plugin-is-shipping-broken-schema/
- Published: 2026-06-23T06:50:00.000Z
- Updated: 2026-08-29T07:18:49.000Z
- Description: WordPress plugins inject structured data whether you've checked it or not — empty properties, wrong page types, malformed regions. The afternoon I spent fixing what mine shipped to Google.
- Author: Remco Livain
- Tags: SEO, Structured Data, Marketing Tech, AI

I'm building a Swiss directory site, and last week I spent an afternoon doing something that sounds deeply unsexy: cleaning up the structured data my own plugins were emitting. It turned out to be one of the higher-leverage SEO sessions I've had in a while, precisely because almost nobody bothers to check it.

Here's the thing most people miss. If you run a content site on WordPress with an SEO plugin and a directory plugin, you are already publishing structured data. JSON-LD is being injected into every page whether you've looked at it or not. The question isn't whether you have schema. It's whether the schema you're shipping is accurate — and out of the box, it usually isn't.

### What the plugins were actually emitting

When I inspected the rendered output, the directory plugin was dutifully producing a LocalBusiness block for every listing. Good. Except it was padding that block with empty `review`, empty `image`, and empty `sameAs` properties — placeholders with nothing in them. The region was a free-text string instead of an ISO code. The description was the raw page body, markdown headings and FAQ markup and all, rather than a clean lead paragraph.

Google's [general structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies?ref=livain.com) are clear that markup should describe real, user-visible content accurately. Empty and malformed properties aren't neutral. At best they're ignored; at worst they erode trust in the whole block. So I wrote hooks into the child theme to intercept what the plugins generate and fix it before it reaches the page: drop the empty properties, convert the region to its ISO code, and feed a clean description instead of the marked-up body.

> You don't have schema because you installed a plugin. You have schema when you've actually read what it emits.

### The list pages were lying about what they were

The bigger problem was a level up. The category and location pages — the ones listing many businesses — were being labelled as `Article` or `WebPage`. They are neither. They're collections. So I switched them to `CollectionPage` and added an `ItemList` reflecting the actual ranked order of the listings on the page.

This matters because it tells a search engine the truth about the page's job. A list page that announces itself as an article is sending a confused signal. A list page that declares itself a collection with an ordered item list is sending a precise one. Google explicitly [supports multiple schema types on a single page](https://www.searchenginejournal.com/google-on-using-multiple-types-of-schema-markup-on-same-page/412457/?ref=livain.com) as long as each one genuinely describes content that's there — so a location page can legitimately carry a breadcrumb, a collection type, and an item list at once.

I also rebuilt the breadcrumb trail to be geographic and properly nested: country, then region, then town, then business — with the town only linked when a page for it actually exists. Google's [guidance on nesting and multiple items](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data?ref=livain.com) rewards markup that mirrors the real site hierarchy. And I wired in a reciprocal link from each business profile back up to its town page, so the internal link mesh and the structured data tell the same story.

### Why this is the kind of work AI makes worth doing

This is fiddly, surgical work — diffing live output against local source, validating each block, deploying a single file at a time so I don't smear the whole theme. Five years ago I'd have either skipped it or paid someone a day's rate to do half of it. With AI handling the mechanical parts — reading the plugin's emitted JSON, generating the hook code, checking validity — I could do all of it in an afternoon and actually verify every page afterward.

But the AI didn't know that a list page shouldn't be an Article, or that an empty `sameAs` is worse than no `sameAs`. That judgment is the same edge I keep coming back to: [deep domain expertise is the leverage](https://www.livain.com/blog/the-death-of-generic-ai-why-deep-domain-expertise-is-the-only-real-leverage-left/), and the tooling just removes the friction. It's the technical-SEO cousin of how [a platform finally fixing its rendering](https://www.livain.com/blog/lovable-just-fixed-its-biggest-seo-problem/) can unlock indexing overnight, and it sits right alongside the argument that [pain points, not keywords, will decide your SEO future](https://www.livain.com/blog/why-pain-points-not-keywords-will-decide-your-seo-future/) — both are about giving machines an honest, structured account of what your page is for.

Go view-source on your own most important page and search for `application/ld+json`. Read what's in there. I'd bet you find at least one empty property your plugin has been quietly broadcasting to Google for months.

### Sources & further reading

**External** — Google Search Central, [General structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies?ref=livain.com); Google Search Central, [Intro to how structured data works](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data?ref=livain.com) (nesting and multiple items); Search Engine Journal, [Google on using multiple types of schema on the same page](https://www.searchenginejournal.com/google-on-using-multiple-types-of-schema-markup-on-same-page/412457/?ref=livain.com).

**Related posts** — [The death of generic AI](https://www.livain.com/blog/the-death-of-generic-ai-why-deep-domain-expertise-is-the-only-real-leverage-left/); [Lovable just fixed its biggest SEO problem](https://www.livain.com/blog/lovable-just-fixed-its-biggest-seo-problem/); [Why pain points, not keywords, will decide your SEO future](https://www.livain.com/blog/why-pain-points-not-keywords-will-decide-your-seo-future/).