Why JSON-LD Audits Matter for Ecommerce Stores
JSON-LD is the structured data format Google recommends for ecommerce sites. It tells search engines exactly what a page contains โ product name, price, availability, reviews โ without relying on visible HTML. When JSON-LD is missing, malformed, or outdated, product rich results disappear from search, and AI-powered answer engines skip your data entirely.
A JSON-LD audit is not a one-time task. Product prices change, inventory fluctuates, and site updates break previously valid markup. Running through this 12-item checklist on a recurring basis keeps structured data synchronized with actual page content and protects the rich result placements your store has earned.
The 12-Item JSON-LD Audit Checklist
1. Schema type is correct. PASS: Every product page uses @type: Product. Category pages, blog posts, and homepage use appropriate types (CollectionPage, Article, WebSite). FAIL: Product pages use generic WebPage or no @type at all.
2. @context is present and valid. PASS: Every JSON-LD block opens with "@context": "https://schema.org". FAIL: @context is missing, misspelled, or uses an outdated URL like http://schema.org without HTTPS.
3. Product name matches the visible H1. PASS: The name property in JSON-LD is identical to the H1 tag on the page. FAIL: The name is a generic placeholder, truncated, or pulled from a different field than the displayed title.
4. Price is accurate and current. PASS: The price property matches the displayed sale or regular price at the time of crawl. FAIL: Price reflects a stale cached value, a pre-discount figure, or a wholesale price not shown to consumers.
5. priceCurrency is included. PASS: priceCurrency uses a valid ISO 4217 three-letter code (USD, EUR, GBP). FAIL: The field is missing, uses a symbol like $, or contains a full currency name like 'dollars'.
6. availability is mapped to actual stock. PASS: availability uses a schema.org enumeration โ InStock, OutOfStock, PreOrder, or BackOrder โ and matches the real inventory state. FAIL: The value is hardcoded as InStock regardless of actual stock, or the field is absent.
7. priceValidUntil is set for sale prices. PASS: Any discounted price includes a priceValidUntil date in ISO 8601 format (YYYY-MM-DD) that has not already expired. FAIL: The field is missing on sale pages, or the date is in the past.
8. AggregateRating is present when reviews exist. PASS: Pages with at least one published review include AggregateRating with ratingValue, reviewCount, and bestRating. FAIL: Reviews appear on the page but no AggregateRating block exists in JSON-LD.
9. ratingValue stays within the declared scale. PASS: ratingValue is between 1 and bestRating. If bestRating is 5, ratingValue cannot exceed 5. FAIL: ratingValue exceeds bestRating, or bestRating is omitted and ratingValue is above the default maximum of 5.
10. No blocked rendering of the script tag. PASS: The JSON-LD <script type="application/ld+json"> block is in the page source returned by Googlebot, not injected client-side after a render-blocking delay. FAIL: The block only appears after JavaScript execution and is invisible in raw HTML.
11. No duplicate JSON-LD blocks for the same @type. PASS: Each page has exactly one Product block, one BreadcrumbList block, and so on. FAIL: Multiple Product blocks exist on the same page with conflicting prices, names, or availability values.
12. Markup validates without errors in Google's Rich Results Test. PASS: The URL passes with zero errors and shows eligible rich result types. FAIL: The tool returns critical errors, missing required fields, or flags the page as not eligible for rich results.
High-Priority Failures That Cost Rich Results Immediately
Three checks carry immediate disqualification weight: incorrect or missing @type, price mismatches, and client-side-only rendering. Google's documentation states that structured data must match visible page content; a price discrepancy between JSON-LD and the displayed figure is treated as manipulative and can trigger a manual action.
Client-side rendering is the failure most commonly missed in visual audits. A browser inspector shows the JSON-LD block because JavaScript has already run. The actual test is viewing raw page source or using a tool that fetches pages as Googlebot does. If the script tag is absent from raw HTML, Googlebot may never process it.
Common Ecommerce Scenarios That Break Multiple Checks at Once
Flash sales create cascading failures. When a 48-hour discount goes live, the displayed price updates but the JSON-LD price โ often cached at the CDN layer โ stays at the original figure. This simultaneously fails checks 4 (price accuracy) and 7 (priceValidUntil). A product that sells out during the sale then also fails check 6 (availability).
Theme or platform updates frequently reintroduce duplicate JSON-LD blocks. The new theme injects its own Product block while the old one, added via a third-party app, persists. Search engines receive conflicting signals and suppress rich results until the conflict is resolved. Auditing after every theme update is not optional โ it is a standard deployment step.
Tools to Run This Checklist Efficiently
Google's Rich Results Test handles individual URL checks for items 1, 2, 3, 5, 8, 9, and 12. It renders JavaScript, so also test raw HTML separately using curl or a browser's View Source to catch item 10. Google Search Console's Enhancements report surfaces item 11 (duplicate types) and item 6 (availability mismatches) at scale across the full site.
For ongoing price and availability accuracy (items 4, 6, 7), a crawl-based monitoring tool that re-fetches pages on a scheduled interval is necessary. Manual spot-checks are insufficient for stores with more than a few hundred SKUs or frequent inventory changes. Set alerts for pages where JSON-LD price diverges from the visible price by any amount.
Actionable Fix Priority Order After the Audit
Fix failures in this sequence: rendering issues first (item 10), then data accuracy failures (items 4, 6, 7), then missing required fields (items 2, 3, 5), then rating errors (items 8, 9), then structural problems (items 1, 11), and finally validation errors (item 12). This order prioritizes what prevents Google from reading markup at all before addressing what it reads incorrectly.
After fixing, resubmit affected URLs in Google Search Console using the URL Inspection tool and request indexing. Rich result eligibility does not restore automatically on the next crawl cycle โ a manual resubmission accelerates re-evaluation. Expect 1-4 weeks for rich results to reappear after confirmed fixes.