Playbook · Shopify product structured data / JSON-LD missing or invalid

Shopify product structured data / JSON-LD Product schema missing or invalid.

Written for a Shopify DTC owner whose Product JSON-LD / structured data is missing or invalid — Google Rich Results Test fails, GSC Product enhancements show errors, or product rich results never appear while the storefront looks fine. DIY-first: prove schema on the live product URL, repair theme liquid / SEO-app overrides / Offer fields, recheck Rich Results Test. Distinct from meta title / description missing, sitemap.xml missing products, robots.txt / noindex blocking indexing, and canonical URL wrong. No earnings claims, no invented case studies.

Nico at Latch AI Ops · Sep 8, 2026 · ~12 minute read

Buy the 72-hour install — $997Meta titlesCanonicalMerchant FAQ

01

Structured data / JSON-LD Product missing — not meta titles, sitemap, robots, canonical.

Several products can look like “Google doesn't understand my products.” They do not share a settings panel. This page is only when Product JSON-LD / structured data is missing or invalid. Blank or duplicated SERP titles are shopify-meta-title-description-missing. Sitemap.xml omitting products or not updating in GSC is shopify-sitemap-xml-missing-products. Robots.txt Disallow or noindex blocking crawl / index is shopify-robots-txt-blocking-indexing. Wrong canonical or duplicate www / Markets head tags is shopify-canonical-url-wrong. This page is only: Product schema missing, invalid, or incomplete for rich results.

Six ordinary reasons Rich Results Test fails: theme product template never outputs application/ld+json Product, SEO app disabled Shopify defaults then shipped broken schema, duplicate Product graphs fighting each other, Offer missing price / priceCurrency / availability, AggregateOffer without lowPrice / highPrice, or you confused blank meta titles / robots blocks with schema. Walk them in that order. You already pay for Online Store. You do not need another SEO seat to view-source a product URL.

02

Prove Rich Results Test, view-source JSON-LD, and Search Console Product enhancements.

Open Google's Rich Results Test on a live product URL. Note whether Product is detected, valid, or invalid — and which fields fail. View-source the same URL: search for application/ld+json and "@type": "Product". Count how many Product graphs appear (zero, one, or duplicates).

In Google Search Console → Enhancements / Product snippets (or Merchant listings where applicable), open invalid items for that URL. Honest proof: if titles/descriptions are blank in SERP but schema is fine, leave for shopify-meta-title-description-missing. If the URL is Blocked by robots.txt or Excluded by noindex, leave for shopify-robots-txt-blocking-indexing. If the product is missing from sitemap.xml entirely, leave for shopify-sitemap-xml-missing-products. Do not mix those proofs with missing Product JSON-LD.

03

Theme liquid missing or stripping Product JSON-LD on product templates.

Custom themes and heavily edited OS 2.0 product templates often drop Shopify's default structured data snippets, comment out JSON-LD for “performance,” or only output schema on a draft theme while the Current theme has none. Head apps and section groups can also overwrite layout so Product never renders.

Fix: On the Current published theme, open product template / theme.liquid / SEO snippets and confirm a Product ld+json block exists for live products. Prefer Shopify's documented product structured data patterns (name, image, description, offers) over inventing a second graph. Publish the theme that actually has schema — not only the draft. If canonical tags in the same head are wrong across www / Markets, that companion issue is shopify-canonical-url-wrong— different product; fix schema on this page, canonical there.

04

SEO app injecting invalid or duplicate Product schema.

SEO / rich-results apps often disable Shopify defaults, inject a second Product graph, or leave staging toggles that emit empty offers. Two Product JSON-LD blocks with conflicting price or availability routinely fail Rich Results Test even when the storefront renders correctly.

Fix: In the SEO app, choose one source of Product schema — Shopify theme defaults or the app, not both. Turn off “custom structured data” if it ships empty / invalid fields. Remove duplicate Product graphs from theme snippets while the app is on. Recheck Rich Results Test after each change. If the same app also rewrote meta titles or robots, those are separate playbooks (meta titles, robots / noindex).

05

Offer / AggregateOffer fields incomplete — price, availability, sku, brand, image.

Product nodes without a valid Offer (or AggregateOffer for multi-variant) fail rich results even when @type: Product is present. Common gaps: missing price / priceCurrency, wrong or blank availability URL, no image, empty brand / sku, or AggregateOffer without lowPrice / highPrice / offerCount on variant products.

Fix: Map offers from the live variant price and inventory state Shopify already has — do not hardcode staging prices. Ensure at least one product image URL resolves. Align availability with real stock (InStock / OutOfStock). After edits, re-run Rich Results Test on a single-variant and a multi-variant product. If the product never appears in sitemap.xml so Google rarely crawls it, clear that on shopify-sitemap-xml-missing-productsafter schema is valid — different product.

06

You tested meta titles, sitemap, robots, or canonical instead.

Meta title / description missing or duplicated is shopify-meta-title-description-missing. Sitemap.xml missing products or not updating in GSC is shopify-sitemap-xml-missing-products. Robots.txt / noindex accidentally blocking Google is shopify-robots-txt-blocking-indexing. Canonical URL wrong or duplicate content is shopify-canonical-url-wrong.

The only honest test for this page: Rich Results Test (or GSC Product enhancements) shows Product schema missing or invalid on a live product URL — theme liquid, SEO-app duplicates, or Offer fields. Capture view-source + Rich Results screenshot, repair those causes, recheck. Anything else is a different product.

07

When to stay DIY vs pay $997.

Stay DIY if you can spend one afternoon on the list above: prove Rich Results Test + view-source JSON-LD, restore theme Product schema, remove SEO-app duplicates, complete Offer fields, and stop confusing meta titles / sitemap / robots / canonical with missing structured data. That is the whole playbook. No agency required. Short answers also live on the merchant FAQ. Related pages: shopify-meta-title-description-missing, shopify-sitemap-xml-missing-products, shopify-robots-txt-blocking-indexing, shopify-canonical-url-wrong.

Pay for help when the work is not the schema row — it is connecting the stack you already have so lead capture is not dying in DMs, storefront and checkout-ready exceptions land in a channel you already check, and the live store is one workflow instead of a spreadsheet plus a Slack bot you forgot. That is the Latch AI Ops install.

What $997 USD one-time buys: lead capture on the live store, ops alerts in a channel you already check, and a checkout-ready workflow. 72 hours after collaborator access, not after payment. One live Shopify store. Access plus a delivery thread. Store URL collected at checkout. Not a SaaS seat, not an SEO agency retainer, not a rankings or rich-results guarantee, not a theme rebuild.

Other shops' public ranges, not testimonials: a checkout / ops install typically runs $500–$2,500. A full ops consulting block typically runs $2,000–$5,000. $997 is the cheap end of that work, sold as a 72-hour install of three systems — not as an earnings number or ranking-lift claim.

What it does not buy: more orders, recovered revenue, a forever SERP / rankings / rich-results guarantee, or a case study. Latch AI Ops has not published customer proof because there are no customers yet. You are buying the install.

Checkout is on Whop. Operator is Nico. United States offer. You can revoke collaborator access after handoff. We do not take owner passwords.