Skip to main content
Checklist

JSON-LD Checklist: 12 Items Every Ecommerce Store Should Audit

By ยท Updated ยท 7 min read

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.

Frequently asked questions

How often should an ecommerce store audit its JSON-LD structured data?

Run a full 12-item audit after every site deployment, theme update, or major promotional event. For stores with dynamic pricing or frequent stock changes, automate monitoring of price and availability fields on a daily crawl schedule. Static structured data on stable catalog pages can be audited monthly.

Does a JSON-LD validation error always cause rich results to disappear?

Not always, but critical errors โ€” missing required fields like price or availability, or a price that contradicts the visible page โ€” reliably suppress rich results. Warnings for recommended fields like priceValidUntil reduce eligibility for enhanced formats but do not always remove basic rich results entirely.

What is the difference between a JSON-LD warning and a JSON-LD error in Google's Rich Results Test?

Errors flag missing required properties or invalid values that make the markup non-compliant with schema.org requirements โ€” these block rich result eligibility. Warnings flag missing recommended properties that improve result quality but are not mandatory. Fix all errors first; then address warnings to maximize the richness of displayed search results.

Can duplicate JSON-LD Product blocks on one page cause a manual action?

Duplicate blocks alone do not typically trigger manual actions, but conflicting data โ€” two blocks with different prices โ€” can. Google treats contradictory structured data as a quality issue. The practical consequence is suppressed rich results, not a penalty, unless the conflict appears intentionally manipulative, such as a JSON-LD price far below the displayed price.

Is client-side rendered JSON-LD ever acceptable for ecommerce?

Google states it can process JavaScript-rendered structured data, but the crawl cycle for JS rendering is slower and less reliable than for server-rendered HTML. For ecommerce product pages where price and availability change frequently, server-side rendering of JSON-LD ensures Googlebot reads current data on the first crawl pass without a secondary rendering queue delay.

MG
Written by

Matt is the founder of RunOctopus. He built All Angles Creatures from zero to page-1 rankings in reptile feeder insects in under 60 days using exactly this method โ€” turning a hard, entrenched niche into RunOctopus's proof store for programmatic SEO and AI search citation.

Connect on LinkedIn →

See what Otto would build for your store

Free architecture preview. No card required. Five minutes.

Generate Preview →