Many sites accidentally output schema from multiple sources — theme, SEO plugin, page builder, manual additions — each declaring the same entity types with different values. The page ends up with three Article blocks declaring three different publish dates, two Organization blocks with different logos, and contradictions Google can't reconcile. The fix is consolidating into a single JSON-LD block with one source of truth using @graph.
curl -s https://yoursite.com/page | grep -c 'application/ld+json'Healthy: 1. Common: 3-5. Problem: 6+. Each block needs justification.
<!-- Yoast SEO -->
<script type="application/ld+json">{...}</script>
<!-- Theme -->
<script type="application/ld+json">{...}</script>
<!-- WP Schema Pro -->
<script type="application/ld+json">{...}</script>
Each is a candidate for consolidation or removal.
<!-- From theme -->
<script type="application/ld+json">
{ "@type": "Organization", "name": "Acme Co", "url": "https://acme.com" }
</script>
<!-- From Yoast -->
<script type="application/ld+json">
{ "@type": "Organization", "name": "Acme Co Ltd.", "url": "https://www.acme.com",
"logo": "https://acme.com/logo.svg" }
</script>
Two declarations of the same Organization with different names and URLs. Google may merge, may pick one, may ignore both. Fix: pick the canonical version, remove the other.
<!-- Block 1 says publish date 2024-01-15 -->
<script type="application/ld+json">
{ "@type": "Article", "datePublished": "2024-01-15" }
</script>
<!-- Block 2 says publish date 2024-02-03 -->
<script type="application/ld+json">
{ "@type": "Article", "datePublished": "2024-02-03" }
</script>
One is your real publish date; the other is from somewhere with stale data. Both fields visible to Google, neither obviously correct. Fix: single source for dates, remove the duplicate.
Common e-commerce pattern: WooCommerce outputs Product schema, then Yoast outputs Product schema, then a "structured data plugin" outputs Product schema. Three blocks, three slightly different formats. Pick one plugin/source, disable schema in the others.
One JSON-LD block with multiple typed entities, all sharing the same context and cross-referenced via @id.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://acme.com/#organization",
"name": "Acme Co",
"url": "https://acme.com",
"logo": "https://acme.com/logo.svg"
},
{
"@type": "WebSite",
"@id": "https://acme.com/#website",
"url": "https://acme.com",
"publisher": { "@id": "https://acme.com/#organization" }
},
{
"@type": "WebPage",
"@id": "https://acme.com/page#webpage",
"url": "https://acme.com/page",
"isPartOf": { "@id": "https://acme.com/#website" },
"inLanguage": "en-GB"
},
{
"@type": "Article",
"@id": "https://acme.com/page#article",
"headline": "Article title",
"datePublished": "2024-01-15",
"isPartOf": { "@id": "https://acme.com/page#webpage" },
"publisher": { "@id": "https://acme.com/#organization" }
},
{
"@type": "BreadcrumbList",
"@id": "https://acme.com/page#breadcrumb",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://acme.com/" },
{ "@type": "ListItem", "position": 2, "name": "Article" }
]
}
]
}
</script>
One block, five typed entities, properly cross-referenced. Google sees a coherent semantic graph instead of contradictory fragments.
If using Yoast (or Rank Math, AIOSEO), let it generate schema. Disable theme schema:
// functions.php - remove theme schema output
function disable_theme_schema() {
remove_action('wp_head', 'theme_function_that_outputs_schema');
}
add_action('init', 'disable_theme_schema');
Or in theme settings, look for "Output schema markup" toggle, turn off.
Shopify themes often include built-in schema. If you've installed an SEO app that adds more, the theme schema typically needs disabling in theme.liquid:
{%- comment -%} Disable built-in schema, app handles it {%- endcomment -%}
{%- comment -%} {% render 'structured-data' %} {%- endcomment -%}
Don't run two structured-data modules simultaneously. Pick one (Schema.org Metatag for Drupal, JSON-LD Schema for Joomla) and disable the others.
Schema conflicts often return when new plugins are installed or themes updated. Defence:
application/ld+json blocks added