Multiple conflicting schema markup can confuse search engines and prevent rich results from appearing. Understanding how to properly organize and combine schema types is crucial for effective structured data implementation.
Multiple schema conflicts occur when pages have competing or redundant structured data:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
<!-- Conflicting Schema Example --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "Product Name", "price": 99.99 } </script> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "Different Name", "price": 89.99 } </script> <!-- Better: Combined Schema --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "Product Name", "offers": { "@type": "Offer", "price": 99.99, "priceCurrency": "USD" }, "review": { "@type": "Review", "reviewRating": { "@type": "Rating", "ratingValue": "4.5" } } } </script>
Multiple conflicting schemas affect your website in several ways:
SEO Impact
Technical Issues
Performance Impact
First, check for multiple schemas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
// Function to detect schema conflicts function detectSchemaConflicts() { const schemas = document.querySelectorAll( 'script[type="application/ld+json"]' ); const types = {}; Array.from(schemas).forEach(schema => { try { const data = JSON.parse(schema.textContent); const type = data['@type']; types[type] = (types[type] || 0) + 1; } catch (e) { console.error('Invalid schema JSON:', e); } }); return { total: schemas.length, duplicateTypes: Object.entries(types) .filter(([_, count]) => count > 1) .map(([type]) => type) }; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
<!-- Before: Separate Schemas --> <script type="application/ld+json"> { "@type": "Product", "name": "Product Name", "price": 99.99 } </script> <script type="application/ld+json"> { "@type": "Review", "itemReviewed": "Product Name", "reviewRating": { "@type": "Rating", "ratingValue": "4.5" } } </script> <!-- After: Combined Schema --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Product", "name": "Product Name", "offers": { "@type": "Offer", "price": 99.99, "priceCurrency": "USD" }, "review": { "@type": "Review", "reviewRating": { "@type": "Rating", "ratingValue": "4.5" } } } </script>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
function SchemaManager({ schemas }) { // Combine related schemas const combinedSchema = useMemo(() => { const base = schemas[0]; // Merge additional schemas schemas.slice(1).forEach(schema => { Object.entries(schema).forEach(([key, value]) => { if (key !== '@context' && key !== '@type') { base[key] = value; } }); }); return base; }, [schemas]); return ( <Head> <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(combinedSchema) }} /> </Head> ); }
Organization Rules
Implementation Guidelines
Quality Control
Indexguru's SEO Analyzer
Development Tools
Testing Resources
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
{ "@context": "https://schema.org", "@type": "Product", "name": "Product Name", "offers": { "@type": "Offer", "price": 99.99, "priceCurrency": "USD" }, "review": [{ "@type": "Review", "reviewRating": { "@type": "Rating", "ratingValue": "4.5" }, "author": { "@type": "Person", "name": "Reviewer Name" } }] }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{ "@context": "https://schema.org", "@type": "Article", "headline": "Article Title", "author": { "@type": "Person", "name": "Author Name" }, "publisher": { "@type": "Organization", "name": "Publisher Name", "logo": { "@type": "ImageObject", "url": "logo.png" } } }
Good schema organization leads to:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<!-- Bad: Redundant Data --> <script type="application/ld+json"> { "@type": "Product", "name": "Product A", "price": 99.99 } </script> <script type="application/ld+json"> { "@type": "Product", "name": "Product A", "price": 89.99 } </script> <!-- Good: Single Source --> <script type="application/ld+json"> { "@type": "Product", "name": "Product A", "offers": { "@type": "Offer", "price": 99.99, "priceCurrency": "USD" } } </script>
While multiple schema types can provide rich information about your content, they need to be properly organized to be effective. By following these guidelines and regularly auditing your schema implementation, you can ensure your structured data works effectively.
Need help managing multiple schema markup? Try Indexguru's SEO tools to automatically detect schema conflicts and get actionable recommendations for improvement.
Takes 5 minutes to setup