Resources

Which structured data does an online shop need?

Written by
Outseen
Updated

Short answer

An online shop mainly needs Product and Offer data on product pages, ProductGroup for variants, a breadcrumb trail and Organization data with the returns policy. That data has to match what visitors see on the page and must not be output twice or with conflicting values.

An online shop needs structured data that fits each type of page: Product and Offer on product pages, ProductGroup for products with variants, BreadcrumbList for the breadcrumb trail and Organization, including your returns policy, on the home page or about page. That data has to match what a visitor sees. One correct source per page works better than three apps that each output their own version.

What does structured data do for an online shop?

Structured data is a fixed-format description of the information on a page, usually written as JSON-LD in the code. For a shop, it tells search engines which name, price, currency and stock status belong to a product. Google uses that data, among other things, to decide whether a page is eligible for product results that show price, availability or ratings. Eligibility is not a guarantee: Google’s general structured data guidelines treat correct markup as a requirement, not a promise.

womens waterproof rain jacket

  1. fashionshop-example.co.uk › women › jacketsWomen’s rain jacketsBrowse our collection of jackets for every season.
  2. rainwear-example.co.uk › rain-jackets › noorWomen’s rain jacket Noor, waterproof with hoodBreathable rain jacket in three colours. In stock, returns within the shop’s return window.
  3. cyclingblog-example.co.uk › adviceHow to choose a good rain jacketWhat to look for in waterproofing and ventilation.
Example of search results in which a product page can appear with product details such as stock. Whether and how Google shows product data is up to Google.

If you want the basics first, read structured data explained. This article covers the choices that are specific to online shops.

Which types belong on which page?

Not every page gets every type. For each kind of page, pick the type that describes its content.

PageTypeWhat it describesWatch out for
Product page without variantsProduct with OfferName, image, price, currency, availabilityPrice in the markup equals the price shown
Product page with variantsProductGroup with a Product per variantThe variants and how they differEach variant has its own URL that preselects it
Category pageBreadcrumbListWhere the page sits in your structureAt least two steps in the trail
Home page or about pageOrganization (or OnlineStore)Name, logo, contact details, identifiersOnce, on one page, not on every page
Returns pageMerchantReturnPolicy nested in OrganizationReturn window, country, conditionsMerchant Center settings take precedence
Blog post or buying guideArticleTitle, date, authorOnly for editorial content

What about FAQPage?

On 8 May 2026, Google announced in the Search Central changelog that the FAQ rich result has not appeared in Google since 7 May 2026. The related documentation was removed on 15 June 2026. FAQPage remains a valid type on schema.org. So do not add FAQPage expecting an expandable question block in Google. A good FAQ on a product or category page still helps visitors; see writing an FAQ that helps customers, Google and AI assistants.

Which fields does a product page need?

In its product documentation, Google separates two kinds of product results. Product snippets are for pages where you cannot buy the product directly, such as a review site. Merchant listings are for pages where the customer can buy it. An online shop belongs in the second group. According to the merchant listing documentation, the basics look like this:

Fields for a merchant listing

RequiredRecommended
Productname, image, offers (an Offer, not an AggregateOffer)brand, gtin, sku, color, size, material, aggregateRating, review
Offerprice (above zero), priceCurrencyavailability, itemCondition, shippingDetails, hasMerchantReturnPolicy
Summarised from Google’s merchant listing documentation. Check the current list before you build.

A minimal block for a product without variants then looks like this. The shop, the product and the price are made up:

rain-jacket-noor.json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Women's rain jacket Noor, green, size M",
  "image": "https://www.example.com/img/noor-green.jpg",
  "brand": { "@type": "Brand", "name": "Downpour Rainwear" },
  "sku": "NOOR-GREEN-M",
  "offers": {
    "@type": "Offer",
    "price": "89.95",
    "priceCurrency": "GBP",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}

A GTIN (the number behind the product barcode) and a brand name help a search engine match your product to the same product sold elsewhere. Shipping costs and return conditions are exactly what a customer looks for just before buying.

Ratings in your markup must also be visible on the page. Google’s review snippet guidelines require that the visitor can see the review and the average rating directly. What else belongs on a good product page, from copy to shipping information, is in the product page checklist.

How do you describe products with variants?

A jacket in four sizes and three colours is one product with twelve variants. Google has ProductGroup for this:

  • ProductGroup describes the parent product and gets a productGroupID (the parent SKU) and a name.
  • hasVariant holds the individual variants as Product. A variant can also point back to the group with isVariantOf.
  • variesBy states how the variants differ, such as colour or size.
  • Each variant gets its own ID (sku or gtin) and a name that is more specific than the group name.

Google also asks for a separate URL per variant that preselects that variant, for example ?size=m&colour=green, with the right image, price and availability. If all variants live on one page, the group gets a single canonical URL without a variant selection.

What your platform does here by itself differs:

  • Shopify has a Liquid filter called 0. According to its documentation, it outputs Product for a product without variants and ProductGroup for a product with variants. The filter only works for products and articles.
  • WooCommerce generates basic markup automatically. According to the WooCommerce documentation, the core outputs one combined product block for variable products, for performance reasons. If you want data per variant, you need an extension.

Where do the breadcrumb and returns policy belong?

The breadcrumb

The breadcrumb trail shows where a page sits in your shop: Home, Jackets, Rain jackets, Women’s rain jacket Noor. BreadcrumbList describes that trail as a list of ListItem entries, each with a position, name and item (the URL). The last entry may leave out the URL, in which case Google uses the URL of the page itself. The markup must match the breadcrumb the visitor sees.

Returns and shipping

Many shops repeat the returns policy in every product’s markup. Google recommends a different structure: put one general returns policy in Organization using hasMerchantReturnPolicy, on a page such as your returns page or about page. Use product-level markup only when a product has different terms.

Keep Google’s order of precedence in mind. According to the return policy documentation, settings in Merchant Center or Search Console override product-level markup, which in turn overrides markup in Organization. If Merchant Center lists different terms from your site, Merchant Center wins. Keep the two the same. Business details and Organization schema are covered further in consistent business information for search engines and AI.

How do you avoid duplicate or conflicting output?

Duplicate output happens easily in a shop that runs several apps or plugins. The theme outputs a product block, a review app adds a second one with the ratings, and an SEO app or plugin adds a third, sometimes with an old price from the cache. A search engine then sees three descriptions of the same product, possibly with different prices or stock levels. Here is how to find it:

Tracking down duplicate product blocks

  1. Pick a tricky pageOpen a product page that has variants and a discount. That combination shows the most errors.
  2. View the page sourceNot the inspector, which also shows output added by JavaScript. Search for application/ld+json.
  3. Count the blocksHow many blocks of type Product or ProductGroup are there?
  4. Compare with the screenPrice, currency and availability in each block should match what the visitor sees.
  5. Pick one sourceLet one theme or app output the product data and switch the others off, or let them only add fields.

Google recommends putting product markup in the initial HTML. According to the variant documentation, markup that only appears through JavaScript can lead to less frequent and less reliable processing.

How do you test structured data?

Use more than one check, because each tool looks at something different:

CheckWhat it shows you
Rich Results TestWhich Google results the markup on a public page makes possible, plus errors and warnings
Schema Markup ValidatorWhether the markup is valid according to schema.org, independent of Google
URL Inspection in Google Search ConsoleWhether Google found the structured data on the page
Per-feature reports in Search ConsoleErrors across your whole site after publication
Your own eyesWhether price, stock and reviews in the markup match the page

A passing test only proves that the syntax is correct. Whether the price in the markup is today’s price, you only see by comparing. Repeat the check after every change to your theme, apps or pricing rules.

Atlas, Outseen’s own research engine, reads the public HTML of fetched pages and the supported JSON-LD in it, such as product and breadcrumb. For every finding, Atlas records what it found, on which URL and when. Markup that only appears after JavaScript falls outside that research, and the report states that limit. A specialist checks whether the data matches the page, and after a change Atlas can check again.

Does structured data help with AI assistants?

In its guidance on AI features and your website, Google says AI Overviews and AI Mode need no special schema. Google does list as good practice that your structured data matches the visible text and that your Merchant Center data is up to date. Other AI assistants have their own methods, so do not count on an effect the provider does not describe itself. Product questions asked to AI are covered in GEO for online shops.

What does this mean for your online shop?

Do not start by adding more types. Start by asking how many product blocks your pages output now and whether they are correct. Take three product pages: one without variants, one with variants and one on sale. View the page source, count the blocks and compare price and stock with what the visitor sees. That is where you will find most errors.

If you run on Shopify or WooCommerce, first check what your theme or the core already outputs before you add an app. Put your returns policy in Organization once and keep it in line with Merchant Center. After every change to your theme, apps or pricing rules, repeat the same check.

Sources

Read next

FAQs

My Shopify theme already outputs structured data. Do I still need to do anything?

Yes, you still need to check it. A Shopify theme can output product data with the structured_data Liquid filter, but apps for reviews, filters or SEO sometimes add a second product block. Open the source of a product page with variants and count the Product or ProductGroup blocks, then check that price and stock match everywhere. If fields such as brand, GTIN or returns policy are missing, add them through the theme or one app, not both.

Will I get review stars in Google if I add reviews to my product schema?

Not automatically. Google can show ratings with a product, but it does not guarantee a rich result. The reviews and the average rating must be visible on the product page, otherwise the markup does not belong there. Never mark up ratings that visitors cannot read anywhere. For reviews about your own business, marked up as Organization or LocalBusiness, Google shows no stars when you manage those reviews yourself.

Do I need a Google Merchant Center feed as well as structured data?

No, it is not required, but Google recommends using both. According to Google Search Central, structured data combined with a Merchant Center feed increases the chance that your products appear in more search experiences, and helps Google verify your data. A feed is most useful for a large or fast-changing catalogue. Make sure the feed and the page show the same price and stock.

Will product schema make ChatGPT or Gemini mention my products?

There is no official confirmation of that. Google states that AI Overviews and AI Mode need no special schema, although structured data should match the visible text. OpenAI documents its own product feed for ChatGPT, which is a different thing from JSON-LD on your page. Product schema makes your data easy to read. Whether an AI assistant mentions your product is decided by that system.