Malformed JSON-LD, wrong case on @type, or typo'd property names like adress cause schema.org parsers to silently discard the block, which strips local-pack rich results (stars, hours, address card) from Google and Bing SERPs. The reference-integrity taxon applies: a structurally broken block is indistinguishable from no structured data at all, costing click-through in geo queries where competitors with valid LocalBusiness markup win the visual real estate.
High because one syntax error nullifies the entire block and kills rich-result eligibility across every page that renders it.
Parse every JSON-LD payload at build time with JSON.parse and assert @context === 'https://schema.org' and a valid @type before injecting the <script> tag. Centralize this in src/components/structured-data.tsx so one validator covers every page, then confirm with Google's Rich Results Test.
const schema = JSON.parse(jsonLdString)
if (schema['@context'] !== 'https://schema.org') throw new Error('bad @context')
if (!schema['@type']) throw new Error('missing @type')
ID: marketing-local-seo.local-schema.schema-validation
Severity: high
What to look for: Examine all JSON-LD blocks statically for structural validity: properly formed JSON (no syntax errors), correct use of @context and @type, property names that match schema.org vocabulary (no typos like "adress" or "telephon"), and no use of invented types.
Pass criteria: Count all JSON-LD blocks and validate each one. 100% of JSON-LD blocks must be syntactically valid JSON, use correct @context: "https://schema.org", have a valid @type value, and use property names that match schema.org vocabulary without obvious typos.
Fail criteria: Any JSON-LD block has invalid JSON syntax, a missing or incorrect @context, an invented or misspelled @type, or property names with obvious typos that would prevent schema parsers from recognizing them.
Skip (N/A) when: No JSON-LD structured data exists anywhere in the project, or whole-audit N/A rule applies.
Detail on fail: Describe the specific error. Example: "JSON-LD in layout.tsx has malformed JSON — missing closing brace" or "@type is set to 'localBusiness' (lowercase) — schema.org types are case-sensitive, must be 'LocalBusiness'" or "Property 'adress' appears to be a typo of 'address' in the LocalBusiness schema"
Remediation: Fix the specific issue reported. Validate JSON with JSON.parse() or in src/components/structured-data.tsx:
// Validate at build time
const schema = JSON.parse(jsonLdString) // throws on syntax error
if (!schema['@context'] || !schema['@type']) throw new Error('Missing required JSON-LD fields')
After fixing, validate using Google's Rich Results Test.