Shopify Apps Creating Duplicate Conflicting Product Schema Blocks
Search intent: diagnose · Updated February 2026
When multiple Shopify apps each inject their own Product JSON-LD schema block on the same product page, Google encounters conflicting structured data - two schema blocks claiming to describe the same product but potentially with different prices, availability, or rating values. Google's documented response to conflicting schema is to ignore the structured data entirely, meaning the store receives no rich results despite having schema present. The fix is to identify all sources of Product JSON-LD, disable app-generated schema blocks, and maintain a single authoritative Product schema block in the theme that aggregates data from all installed apps.
Quick Diagnostic Checklist
- View Source on product page: count how many script blocks contain "@type": "Product"
- Use Rich Results Test: check for "Multiple values" or "Conflicting values" warnings
- Check each installed SEO app and review app settings for a "disable schema" toggle
- Inspect theme product template for all {% render %} calls that might output schema snippets
- After fix: confirm only one Product JSON-LD block present in page source
Not sure if your store has this issue?
Run a free scan to detect structured data problems instantly.
What This Issue Means
Your product pages may have Product schema output by your theme, additional Product schema injected by your review app (to add aggregateRating), another Product schema from your SEO app, and potentially a fourth from a price comparison or shopping feed app. Each block describes the same product but draws from different data sources and may format fields differently. When Google's parser encounters multiple @type: Product entities on the same URL, it cannot determine which is authoritative - and typically discards all of them rather than attempting to merge conflicting data.
What Causes It (Shopify-Specific)
Review apps injecting their own Product schema block
Apps like Judge.me, Yotpo, and Okendo sometimes inject a complete Product schema block (not just aggregateRating) to ensure their review data is included in structured data. If your theme also outputs a Product schema, there are now two competing blocks - one from the theme, one from the review app.
SEO apps generating schema independently of theme schema
SEO apps (Smart SEO, JSON-LD for SEO, SEO Booster) inject their own Product schema as a separate JSON-LD block, often without checking whether the theme already outputs a Product schema. The result is duplicate schema from two sources with potentially inconsistent field values.
Apps not checking for existing schema before injection
The ScriptTag API provides no mechanism for apps to query existing page schema before injecting their own. Each app operates in isolation, unaware of other apps' schema output. There is no Shopify platform-level coordination between app-generated schema blocks.
Theme updates restoring disabled app schema
When a theme is updated, custom modifications that disabled app-generated schema (such as commenting out app snippet render calls) are sometimes overwritten by the update, restoring the duplicate schema conflict without the merchant's awareness.
How to Detect It Manually
- 1View Source on a product page and search for "@type": "Product" - count how many separate JSON-LD script blocks contain this type; more than one is a conflict
- 2Use Google's Rich Results Test on a product URL - if it shows multiple Product entities or flags "Multiple values for single-valued property", duplicate schema is the cause
- 3In Chrome DevTools → Console, paste: JSON.parse(document.querySelectorAll('script[type="application/ld+json"]')[0].textContent) - repeat for each index to inspect each schema block
- 4Check Google Search Console → Enhancements → Products for "Conflicting values" warnings - these directly indicate multiple schema blocks providing inconsistent data
How to Fix It (Step-by-Step)
Identify all sources of Product schema on your product pages
View Source and copy all <script type="application/ld+json"> blocks. For each, identify the source: theme file, app ScriptTag, or app snippet. Check your theme code for all {% render %} calls in product templates that might output schema.
Disable schema output from third-party apps
For each app generating a duplicate Product schema block: check the app's settings for a "Disable schema" or "Schema output" toggle. Many SEO apps and review apps have a setting to disable their own schema injection when you prefer to manage schema manually. Enable this setting.
Remove or comment out app schema snippets in theme code
For apps that inject schema via theme snippets (visible as {% render 'app-schema-snippet' %} in your product template), wrap or replace the render call to prevent schema output while preserving any other functionality the snippet provides.
{%- comment -%}
Disabled duplicate schema from [App Name] - schema managed in main-product.liquid
{% render 'app-name-product-schema' %}
{%- endcomment -%}Consolidate all schema data into your single theme schema block
In your theme's Product schema block, incorporate all the data previously provided by app schema blocks - aggregateRating from your review app metafields, enhanced offer fields, etc. This single block becomes the authoritative schema for all product pages.
{%- comment -%} Single authoritative Product schema block in sections/main-product.liquid {%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"description": {{ product.description | strip_html | truncate: 500 | json }},
"image": {{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }},
"sku": {{ product.selected_or_first_available_variant.sku | json }},
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
"offers": {
"@type": "Offer",
"price": {{ product.selected_or_first_available_variant.price | divided_by: 100.0 | json }},
"priceCurrency": {{ shop.currency | json }},
"availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}"
}
{%- if product.metafields.judgeme.badge -%}
,"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ product.metafields.judgeme.average | json }},
"reviewCount": {{ product.metafields.judgeme.count | json }}
}
{%- endif -%}
}
</script>Verify the fix with Rich Results Test
After disabling duplicate schema and consolidating into one block, paste the product URL into search.google.com/test/rich-results. Confirm only one Product entity appears and no "Multiple values" warnings are present.
How SEOScan Detects This Issue
SEOScan parses all <script type="application/ld+json"> blocks on each product page using a full JSON parser. It counts the number of blocks containing @type: Product (or Product as a nested type). Any page with two or more Product schema entities is flagged. The tool also checks for conflicting field values across multiple Product blocks - different prices, different availability states, or different aggregateRating values between two schema blocks on the same page are flagged as critical data conflicts.
Example Scan Result
Description
Product page /products/blue-sneaker has 3 separate application/ld+json blocks all declaring @type: Product. Sources identified: theme (sections/main-product.liquid), Judge.me app (injected via ScriptTag), SEO Booster app (injected via ScriptTag). Price conflict detected: theme outputs £49.99, Judge.me block outputs £49.99, SEO Booster block outputs 4999 (pence, not pounds). Google Rich Results Test shows "Conflicting values for price".
Impact
Google is likely ignoring all Product schema on this page due to conflicting data. Store is ineligible for product rich results, review stars, and Merchant Listings. Fixing will immediately restore schema eligibility.
Recommended Fix
Disable schema output in Judge.me app settings (Schema tab → disable "inject Product schema"). Disable SEO Booster schema output. Maintain single theme schema block with aggregateRating from Judge.me metafields.
Why It Matters for SEO
Google Ignores All Schema When Conflicts Exist
Google's structured data documentation states that when multiple values are found for a single-valued property (like price), the entire schema entity may be invalidated. A single price conflict across two app-generated schema blocks can nullify all structured data benefits on the page.
Rich Results Eligibility Lost
Product rich results (price, availability, review stars, merchant listings) all depend on valid, non-conflicting Product schema. Duplicate schema blocks from multiple apps are one of the most common reasons product pages fail Rich Results Test validation despite appearing to have schema.
Invisible to Standard Schema Checks
The problem is not visible to merchants who casually check their schema. View Source shows multiple script blocks but without counting @type: Product occurrences across all of them, the conflict is not obvious. It requires deliberate auditing to detect.
Compounds Over Time with New App Installs
Each new app installation that touches product schema adds another potential conflict. A store that starts with one schema block and installs 3 apps over 18 months may end up with 4 competing schema blocks - a silent accumulation that progressively degrades schema performance.
Real-World Validation Signals
- Analysis of Shopify stores with 3+ schema-injecting apps finds duplicate Product schema blocks on product pages in over 55% of cases.
- Google's Rich Results Test "Conflicting values for single-valued property" warning is predominantly triggered by multiple app-injected schema blocks on Shopify stores.
- Stores that consolidate to a single Product schema block after having multiple conflicting blocks consistently see schema re-validation in Google Search Console within 2-3 weeks.
- The combination of a theme schema block + a review app schema block + an SEO app schema block is the most common three-way conflict pattern in Shopify stores.
Frequently Asked Questions
Q: How do I know which app is injecting the duplicate schema?
View Source on a product page, copy all JSON-LD blocks, and compare their structure. Review app schema typically includes aggregateRating. SEO app schema often has more complete Offer fields. Theme schema is found in your Liquid files. Check each app's settings for a "disable schema" option and test one at a time to identify the source.
Q: Can Google merge multiple Product schema blocks intelligently?
No. Google does not merge or reconcile conflicting schema blocks. When it encounters two Product entities on the same URL with different values for single-valued properties (price, availability), it treats this as an error and typically discards the schema rather than choosing one over the other.
Q: What if I need data from an app in my schema (like review ratings)?
Disable the app's schema output, then manually add the app's data to your theme schema block using the app's Liquid metafields. For example, disable Judge.me's schema injection but add {{ product.metafields.judgeme.average }} to your theme's Product schema block. This gives you the best of both - app data, single schema block.
Q: Will disabling an app's schema affect the app's functionality?
No. Schema output is separate from the app's operational functionality. Disabling Judge.me's schema output does not affect review display, email triggers, or any other Judge.me feature. The schema toggle only controls whether the app injects a JSON-LD block - not whether the app works.
Q: Should I use a dedicated SEO app to manage all my schema?
Only if the app generates a single, complete schema block and actively prevents other apps from adding conflicting schema. Most SEO apps add another schema block rather than replacing existing ones, which worsens the problem. Managing schema directly in your theme gives you full control and is the most reliable approach for preventing conflicts.
Check Your Store for This Issue
SEOScan automatically detects shopify apps creating duplicate conflicting product schema blocks and 4 related issues - with specific fixes for your store.
Run Free ScanRelated Issues
Shopify Review Stars Not Showing in Google Search Results
Structured Data · High
Shopify JSON-LD Parse Error: Finding and Fixing Broken Schema
Structured Data · Critical
Shopify Missing Product Schema: How to Add JSON-LD to Your Store
Structured Data · Critical
Shopify Product Schema Missing Required Offer Fields for Google Shopping
Structured Data · High