Blog Playbooks

Structured data for AI shopping: which markup to add on Shopify

Which schema.org types Google documents for products, what Shopify's Liquid filter outputs, how to test it, and what is unproven about markup and AI answers.

Structured data is one of the few parts of AI shopping visibility with real documentation, and that documentation comes from Google and is about Google. This post keeps three questions apart: what Google documents, what Shopify gives you, and what is known about AI assistants. The third answer is mostly "not known", and the post says so where it matters.

What do the platforms say about markup and AI assistants?

  • Google. For AI Overviews and AI Mode, Google says there is no special schema.org structured data you need to add, and that you do not need new machine-readable files, AI text files or markup to appear. It does say structured data should match the visible text on the page.
  • OpenAI and Perplexity. The crawler documentation pages we read for OpenAI and Perplexity do not mention schema.org or structured data. OpenAI's separate developer documentation describes sharing product data through a feed, in CSV or JSON, which is a different channel from page markup.
  • Dopbot's data. Our October 2026 source lists record URLs, the pages OpenAI's answers linked and the pages Perplexity's search retrieved. They cannot show whether an engine read a page's markup, and we have not run a markup experiment. See API vs app answers for why our data is not the apps.

So the honest position is this. Markup has a documented job in Google's search results and in Google's merchant features. We know of no public evidence that markup alone changes which brands an assistant recommends. Add it because it is low effort for most stores, because it forces your page and your feed to agree, and because Google's shopping features use it, not because an assistant has promised to.

Which types are worth adding?

TypeWhat Google documentsWhat Shopify gives youPriority
Product with OfferMerchant listings need name, image and offers; the offer needs a price above zero and a currency; availability is recommendedThe structured_data filter outputs a Product with an offer, when your theme calls it1
ProductGroup (variants)Use ProductGroup with the recommended properties variesBy, hasVariant and productGroupID so variants link to one parentThe filter outputs a ProductGroup for products with one or more variants1, verify
OrganizationNo required properties; name, url, logo, sameAs and contact details recommended; place it on the home pageNot part of the product filter; depends on your theme or an app2
MerchantReturnPolicyRequired: applicable country and return category, or a link to the policy page; best set once under OrganizationNot in Shopify's sample output2
Shipping policyA global shipping policy under Organization is recommendedNot in Shopify's sample output2
AggregateRating and ReviewNeeds a rating value and a count; must be visible on the page; do not aggregate ratings from other websitesNot in the sample output; review apps usually supply it3, only with real visible reviews

Priority 1 is what your product pages cannot do without. Priority 2 is policy information that Google recommends setting once under Organization. Priority 3 is risky if the reviews are thin, because Google's rules bar fake reviews and require markup to describe visible content.

What does Google require for a product page?

Google separates product snippets, for pages where people cannot buy the product directly, from merchant listings, for pages where customers can purchase it. The two overlap. For a store, merchant listing markup is the one to follow.

For merchant listings, Google lists a name, an image and a nested Offer as required, and says that, unlike product snippets, they require a price greater than zero with a three-letter currency code. Availability is recommended, with one value only. For return and shipping information, Google recommends a global policy under Organization markup instead of repeating it on every offer.

Google also says that providing both structured data on pages and a Merchant Center feed maximizes your eligibility and helps it verify your data, and that some experiences combine the two sources. If you set return policies in Search Console as well as in markup, Google says it will use only the Search Console information. The product feeds post covers the feed side.

What does Shopify output by default?

Shopify's structured_data filter converts a product object into schema.org markup: a Product for a product with no variants and a ProductGroup for one with variants. Its documentation example puts the filter's output inside a JSON-LD script tag. The filter is documented for product and article objects.

The sample output on that page holds a brand, a description field (empty in the sample), an image, a name and a URL, plus one offer with availability, price, currency and URL. It holds no rating, review, return policy or shipping details. That is a documentation sample, not a promise about every theme, and the filter is something your theme must call, so the real test is your own page source. Apps can add their own blocks, so a page can end up with two Product definitions.

Shopify states its own AI-channel eligibility in terms of admin fields, not markup. As of October 2026, its Catalog requirements name a title, at least one image, a price above zero and publication to a sales channel such as your online store, so check those in the admin as well as in the source.

How do you check and add it, step by step?

  1. Sample three pages. One simple product, one with variants and one that is out of stock.
  2. Open the page source and search for application/ld+json. Note each block's type. Two Product blocks means two sources, such as your theme and an app; decide which stays.
  3. Compare the markup to the visible page. Name, price, currency, availability and image must match what a visitor sees.
  4. Run the page through Google's Rich Results Test. Fix critical errors. For return policy markup, Google says other warnings are not necessary for eligibility; treat warnings on other types as optional improvements and check Google's page for each type.
  5. Add Organization markup to the home page. Include name, url, logo, sameAs profiles and a contact point. Shopify's product filter does not output Organization, so this goes in as JSON-LD in your theme's home page template or comes from an app.
  6. Add return and shipping policies once, under Organization, or set them in Search Console or Merchant Center. Do not maintain them in three places that can disagree. Shopify's filter does not output these either, so they come from the same theme edit or app as step 5.
  7. Mark up ratings only if visible reviews exist. Google requires a rating value and a rating count or review count, and says not to aggregate reviews or ratings from other websites.
  8. Test as Google sees it. In Search Console's URL Inspection, run a live test and open the tested page to see the raw HTML and a rendered screenshot.
  9. Watch the reports. Search Console's merchant listings report covers pages where shoppers can buy products.
  10. Recheck after theme or app updates.

If you use Shopify and are not a developer, Google itself says that for a content management system it can be easier to use a plugin integrated into it.

On Shopify, the documentation example calls the filter as {{ product | structured_data }} inside a script tag of type application/ld+json. The file names vary by theme, so search the theme code for structured_data to see whether that already happens before adding anything.

Why does parity matter more than the type?

Google's rules say not to mark up content that is not visible to readers, and not to mark up misleading content such as fake reviews. A markup price that differs from the page price, a rating from another site, or an offer that says in stock for a sold-out item are all parity failures. Google also notes that a product snippet may not display if the price validity date is in the past.

The same rule helps outside Google. If your page, markup, feed and retailer listings all say the same thing, any system that reads one of them gets the right fact. If they disagree, you have created the error you will later be asked to explain. The product page audit has a parity check.

What a test cannot show

  • Valid is not eligible, and eligible is not shown. Google says some problems, such as spammy markup, are not syntax issues, so the Rich Results Test cannot identify them.
  • Passing says nothing about assistants. No tool tests whether OpenAI or Perplexity used your markup.
  • Your data may differ from the apps. The assistants' consumer apps can use other retrieval than the APIs we sample.

For the wider plan, see how to get recommended by AI assistants.

Frequently asked questions

Should I use JSON-LD, Microdata or RDFa?

Google recommends JSON-LD and lists Microdata and RDFa as alternatives. Shopify's filter example outputs JSON-LD.

Will adding markup get my products into ChatGPT?

No. None of the OpenAI, Perplexity or Google documents we read says markup gets products into an AI assistant. For Shopify stores, as of October 2026, Shopify says eligible stores that sell to U.S. customers need no separate setup for their products to be discovered by ChatGPT through Shopify Catalog, once the store's policies are completed and Shopify's supplemental terms are accepted; the other requirements are product fields in the admin. Treat markup as a Google-facing and hygiene step, and see the 30-day plan for the order of work.

How we write: drafted with AI tools from Dopbot Index data and public sources; every number and outside fact is traced to its source in a claims record and checked before publishing. More about how we write; corrections to hello@dopbot.com.