Structured Data Errors in WordPress: Fix Schema Markup Issues
If Search Console has started showing "Invalid structured data" or "Missing field" warnings under Enhancements, your WordPress site is almost certainly running more than one thing that outputs schema markup at once. It's one of the most common issues we see on client sites, and it's rarely a "wrong plugin" problem — it's usually two right plugins fighting each other.
What structured data actually does
Structured data (schema markup, usually written as JSON-LD) is a block of code in your page's <head> that tells Google what a page is — a product, a recipe, an article, a local business — in a format it can parse without guessing. Get it right and you're eligible for rich results: star ratings, prices, FAQ dropdowns, breadcrumbs in the SERP. Get it wrong and Google either ignores the block or, worse, flags the whole page in Search Console.
The catch on WordPress: schema doesn't come from one place. Your theme might emit it, your SEO plugin definitely does, WooCommerce adds its own for products, and a review or FAQ plugin adds more on top. Search Console doesn't care who wrote it — it just reports what it finds in the rendered HTML.
Common Search Console errors and what they actually mean
| Error in Search Console | What's really going on |
|---|---|
| "Duplicate field 'name'" or repeated blocks | Two plugins (or the theme + a plugin) are each printing their own JSON-LD for the same entity |
| "Missing field 'price'" / "Missing field 'availability'" (Product) | A WooCommerce product is missing stock status or a variable product has no default price set |
| "Invalid image URL" or "Image ratio not supported" | The featured image is too small (Google wants at least 1200px wide for most rich result types) or the URL is relative instead of absolute |
| "Missing field 'author'" (Article) | The post was published under a generic "admin" user or the theme's author markup was removed by a caching/minify plugin |
| "Invalid Product Snippet — reviews without aggregateRating" | A review plugin outputs individual review markup but never rolls it up into an aggregateRating block |
Symptom → Cause → Fix
Symptom: warnings appeared right after you activated an SEO plugin
Cause: Most themes (especially anything built on Elementor, Divi, or Avada) already inject basic schema for Organization, WebSite, or BreadcrumbList. When you then install Yoast, Rank Math, or All in One SEO, the plugin adds its own — often for the exact same entities. Now you've got two <script type="application/ld+json"> blocks describing the same page.
Fix: Check your theme's SEO or "Schema Markup" settings panel (usually under Appearance → Theme Options or a dedicated tab) and turn its schema output off, keeping only the SEO plugin's version. If you can't find a toggle, view the page source and search for ld+json to see exactly how many blocks are present and where they diverge.
# quick way to check from the command line without opening dev tools
curl -s https://yourdomain.com/sample-page/ | grep -o '<script type="application/ld+json">.*</script>'
# or pull just the JSON blocks and pretty-print each one
curl -s https://yourdomain.com/sample-page/ | grep -oP '(?<=application/ld\+json">).*?(?=</script>)' | while read -r block; do echo "$block" | python3 -m json.tool; echo "---"; done
Symptom: only WooCommerce product pages are flagged
Cause: Variable products (size/color options) often have no price set on the parent product itself — only on the variations. Google's Product schema wants a price at the top level, so it comes back empty even though your storefront displays a price range correctly.
Fix: In WooCommerce settings, make sure "Enable price ranges" is on for variable products (WooCommerce 8.5+ handles this natively), and check that every variation has stock status explicitly set to "In stock" or "Out of stock" — not left blank. If you're on an older WooCommerce version, an SEO plugin update usually fixes the schema output without you touching product data at all.
Symptom: warnings cleared in the Rich Results Test but Search Console still shows them a week later
Cause: This isn't a bug — Search Console's Enhancement reports only refresh when Google recrawls the URL, which can take days depending on your crawl budget. Meanwhile, a page cache or CDN (Cloudflare, LiteSpeed Cache, WP Rocket) may still be serving the old HTML with the broken schema to Googlebot even after you fixed it.
Fix: Purge the page cache for the affected URLs specifically, then use the Rich Results Test on the live URL (not a cached copy) to confirm the new markup is actually being served. In Search Console, use "Validate Fix" on the specific issue rather than waiting for the next full crawl — it triggers a targeted recheck.
Symptom: reviews show on the page but no star rating appears in search results
Cause: Review plugins commonly output a Review schema type for each individual review, but Google's rich snippet for star ratings needs an aggregateRating object (average score + review count) attached to the parent Product or LocalBusiness entity. Without that rollup, the reviews are valid schema but invisible to search results.
Fix: Check your review plugin's schema settings for an "aggregate rating" toggle — it's often off by default because Google has policies against fabricating ratings, so plugins make you opt in explicitly. If your plugin doesn't support it, WooCommerce's built-in review system does generate aggregateRating automatically once a product has at least one approved review.
Prevention checklist
- Pick exactly one source of schema per entity type — theme or SEO plugin, never both.
- After any theme or plugin update, re-run the Rich Results Test on 2-3 representative page types (a post, a product, your homepage).
- Use "Validate Fix" in Search Console instead of waiting for a full recrawl — it's faster and gives a clear pass/fail per issue.
- Keep featured images at 1200px+ wide; Google silently drops rich results below its minimum size requirement.
- If you run a multi-plugin stack (SEO plugin + WooCommerce + a reviews plugin), audit the live JSON-LD once a quarter — plugin updates change default schema behavior more often than people expect.
When it's not a plugin problem at all
Occasionally the markup itself is fine and the issue is that Googlebot can't render the page the same way a browser does — usually because a security plugin or the server's ModSecurity rules are blocking Googlebot's user agent from certain resources. If the Rich Results Test's "View Tested Page" screenshot looks broken or blank, check your firewall logs for blocked Googlebot requests before chasing the schema markup any further.
Frequently asked questions
Why does Search Console show structured data errors even though my page looks fine in the browser?
Search Console reads the raw JSON-LD in your page source, not the visual layout. A page can look perfect while its schema markup has a missing field, a duplicate block, or an invalid value that only shows up when you inspect the actual code.
Should I disable my theme's built-in schema or my SEO plugin's schema?
Keep the SEO plugin's output and disable the theme's, if there's an option to. SEO plugins update their schema logic more frequently to match Google's changing requirements, while theme-level schema is often abandoned after the theme's initial release.
How long does it take for Search Console to reflect a schema fix?
It depends on your site's crawl budget, but typically a few days to two weeks for a full report refresh. Using the "Validate Fix" button on a specific issue is faster than waiting, since it requests a targeted recrawl rather than a full site crawl.
Can caching or a CDN cause structured data errors that aren't really there anymore?
Yes. If Googlebot fetches a cached version of your page, it sees whatever schema was baked into that cached HTML — even if you fixed the live version hours ago. Purge the cache for the specific URL and re-test with the live Rich Results Test tool to confirm.
Do I need structured data on every page, or just products and articles?
No — only add schema types that match real content on the page (Product, Article, FAQPage, LocalBusiness, etc.). Adding schema for content that isn't actually there, or that doesn't match what's visible to users, violates Google's structured data guidelines and can get rich results suppressed for the whole site.