Skip to main content
Technical SEO

JSON-LD Schema Cheatsheet for Shopify Stores

By ยท Updated ยท 7 min read

Why JSON-LD Is the Schema Format Shopify Stores Should Use

JSON-LD is the structured data format Google recommends for communicating page meaning to search engines and AI systems. It lives inside a <script type="application/ld+json"> block placed in the <head> of the document, separate from visible HTML. This separation matters: it lets developers add or update schema without touching theme markup, and it lets crawlers parse entities cleanly without inferring intent from styling or DOM structure.

For Shopify stores, JSON-LD is the connective tissue between product pages, blog content, and brand identity. Search engines use it to populate rich results like star ratings, price snippets, and FAQ accordions. AI search engines use it to extract canonical facts about products, authors, and organizations when generating answers. A store without schema is a store whose inventory and content must be guessed at rather than read directly.

Shopify themes ship with partial schema by default, usually a basic Product block on product templates. That baseline is insufficient. The complete schema stack covers seven types: Product, BlogPosting, FAQPage, HowTo, Organization, BreadcrumbList, and the connective references between them. Each type serves a distinct surface in search and AI results, and missing any of them leaves visibility on the table.

Product Schema: The Required Fields and Where They Go

Product schema is the most consequential type for ecommerce. Required fields are name, image, description, and offers. Inside offers, price, priceCurrency, and availability are mandatory for eligibility in Google's product rich results. The availability value must be a schema.org URL such as https://schema.org/InStock or https://schema.org/OutOfStock, not a free-text string.

Shopify exposes the data needed for these fields through Liquid variables: product.title, product.featured_image, product.description, product.price, shop.currency, and product.available. The schema block belongs in the product template, rendered server-side so crawlers see it on first fetch. Render price as a decimal number without currency symbols, and use the ISO 4217 code (USD, EUR, GBP) for priceCurrency.

Extend Product schema with sku, brand, aggregateRating, and review when those values exist. Brand should reference an Organization or a simple name string. Reviews require author, reviewBody, and reviewRating with ratingValue and bestRating. Do not fabricate ratings; Google issues manual actions against stores that inject review schema without corresponding visible reviews on the page.

BlogPosting, FAQPage, and HowTo: Content Schema That Earns AI Citations

BlogPosting schema identifies editorial content and is what AI search engines parse to attribute answers. Required fields are headline, author, datePublished, and dateModified. Author should be a Person object with name and ideally url pointing to an author bio page. The headline must match the visible H1 or article title; mismatches trigger validation warnings.

FAQPage schema marks up Question and Answer pairs. Each Question has a name (the question text) and an acceptedAnswer of type Answer with a text property. The questions and answers must be visible on the page, not hidden behind clicks or tabs without the content rendering in the initial HTML. FAQPage schema is what produces collapsible Q&A blocks beneath search listings.

HowTo schema marks step-by-step instructions, used for tutorials, assembly guides, or product use cases. It requires name and step, where step is an array of HowToStep objects each with name and text. Add image and totalTime fields where applicable. HowTo and FAQPage cannot coexist on the same URL under Google's current guidelines, so choose the format that matches the dominant content type.

Organization and BreadcrumbList: Site-Level Identity and Navigation

Organization schema establishes the brand entity across the site. Place it once, in the theme.liquid head, so it renders on every page. Required fields are name and url. Add logo (an absolute URL to an image at least 112x112 pixels), sameAs (an array of social and authoritative profile URLs), contactPoint, and address. Organization schema is the anchor AI systems use to verify brand identity and link the store to external mentions.

BreadcrumbList schema mirrors the navigation hierarchy of the current page. It contains an itemListElement array, each entry a ListItem with position, name, and item (the URL). For a product page, the breadcrumb runs Home > Collection > Product. Shopify exposes collection context through product.collections, though canonical breadcrumb logic should be defined explicitly rather than inferred per request.

Both types are lightweight to ship but high-leverage. Organization schema unifies the store's identity for knowledge panel eligibility. BreadcrumbList replaces the raw URL in search results with a readable navigation path, improving click-through and helping crawlers understand site architecture.

What Good Implementation Looks Like vs Poor Implementation

Good schema is server-rendered, complete, and consistent with visible page content. A correct Product block includes name, image (as an absolute URL or array of URLs), description matching the on-page copy, and a fully populated offers object with price as a number, priceCurrency as an ISO code, availability as a schema.org URL, and url pointing to the canonical product page. Aggregate ratings reflect real reviews on the page.

Poor schema is client-rendered via JavaScript after page load, partial (missing offers or availability), or contradictory (schema price differs from displayed price). Common Shopify-specific failures include hardcoded currency symbols in the price field, availability set to the string "in stock" instead of the schema.org URL, missing dateModified on blog posts that have been updated, and FAQPage schema injected on pages where the FAQs are hidden inside JavaScript accordions that do not render in initial HTML.

The diagnostic difference shows up in Google's Rich Results Test and Schema Markup Validator. Good implementations pass with zero errors and zero warnings. Poor implementations pass syntactically but fail eligibility for rich results, meaning the schema exists but produces no visible benefit in search.

Installing Schema in Shopify: The Concrete Steps

Install Organization and BreadcrumbList schema in theme.liquid, inside the <head>, wrapped in conditional logic so BreadcrumbList only renders on pages with a navigation hierarchy. Install Product schema in the product template (product.liquid or sections/product-template.liquid depending on theme architecture). Install BlogPosting in article.liquid. FAQPage and HowTo blocks belong in the specific page or article templates where that content lives.

Render every schema block server-side using Liquid. Do not rely on apps that inject schema via JavaScript after page load, because not all crawlers execute JavaScript reliably and AI search engines frequently parse initial HTML only. Escape strings properly: use the | escape filter on user-generated content like product descriptions and review bodies to prevent JSON syntax errors from quotes or line breaks.

Validate every implementation through Google's Rich Results Test (search.google.com/test/rich-results) and the Schema Markup Validator (validator.schema.org). Test live URLs after deployment, not local previews, because Shopify's rendered output differs from theme editor previews. Re-test after any theme update, app install, or content model change, since those events frequently overwrite or break schema blocks.

Frequently asked questions

Where exactly does JSON-LD schema go in a Shopify theme?

JSON-LD belongs inside <script type="application/ld+json"> blocks placed in the <head> of the document. Organization and BreadcrumbList go in theme.liquid so they render site-wide. Product schema goes in the product template. BlogPosting goes in article.liquid. FAQPage and HowTo go in the specific page or article templates where that content lives. All blocks should be server-rendered through Liquid, not injected by JavaScript after page load.

What are the minimum required fields for Product schema?

Product schema requires name, image, description, and offers. Inside offers, price, priceCurrency, and availability are mandatory for rich result eligibility. Price must be a decimal number with no currency symbol. PriceCurrency must be an ISO 4217 code such as USD or EUR. Availability must be a schema.org URL like https://schema.org/InStock, not a text string. Missing any of these fields disqualifies the page from product rich results in Google search.

Can FAQPage and HowTo schema appear on the same page?

No. Google's current structured data guidelines do not allow FAQPage and HowTo schema to coexist on the same URL. Choose the type that matches the dominant content format: FAQPage for question-and-answer content, HowTo for sequential instructional steps. Mixing them causes validation conflicts and disqualifies the page from rich results for both types. Split the content across two URLs if both formats are genuinely needed.

Why does Shopify's default schema fall short?

Shopify themes ship with a basic Product schema block on product templates and little else. Default implementations frequently omit offers.availability, render price with currency symbols, lack Organization and BreadcrumbList entirely, and miss BlogPosting fields like dateModified. The result is partial schema that passes basic parsing but fails rich result eligibility. A complete schema stack across all seven types (Product, BlogPosting, FAQPage, HowTo, Organization, BreadcrumbList, plus the connective references) requires explicit theme-level implementation.

How is JSON-LD validated before going live?

Use two tools. Google's Rich Results Test at search.google.com/test/rich-results checks eligibility for specific rich result types and reports errors and warnings. The Schema Markup Validator at validator.schema.org checks generic schema.org compliance. Test the live deployed URL, not the theme editor preview, because rendered output differs. Zero errors and zero warnings on Rich Results Test indicates the page is eligible for the rich result types associated with its schema.

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 →