E-Commerce Schema Markup
Product, Offer, BreadcrumbList and visible FAQ markup help machines parse the page. Never fake reviews or ratings. Schema follows what shoppers can see.
Schema markup (structured data, often JSON-LD) is a machine-readable restatement of what the page already shows. For e-commerce, the useful types are Product, Offer, BreadcrumbList, and FAQPage—the last only when a visible FAQ exists.
It does not replace product page SEO or technical SEO. It does not make a duplicate manufacturer description unique. Search engines may use it for rich results; they are not obligated to.
The conceptual SEO loop is How E-Commerce SEO Works. The e-commerce SEO guide is the full sequence.
When you debug JSON-LD, the JSON formatter and JSON validator catch syntax errors. Google’s Rich Results Test (or successor) checks type eligibility against current docs.
Product and Offer
A PDP should expose:
- Product: name, image, description, sku/mpn/gtin when you have them, brand.
- Offer: price,
priceCurrency, availability (InStock / OutOfStock / BackOrder as appropriate), URL.
Those values must match the visible price and stock. Dynamic pricing and geo-price need the markup to follow what that user would see, or you should omit rather than lie.
Variant products: mark up the product the page represents. If the URL is the parent, do not claim a specific size’s GTIN unless that is what you sell on that URL.
| Property | Must match | Common error |
|---|---|---|
offers.price | On-page price | Sale price in schema, regular on page (or reverse) |
availability | Add-to-cart state | Always InStock |
image | Primary product image | Logo or a lifestyle shot of a different SKU |
name | H1 / title | Marketing slogan that is not the product name |
BreadcrumbList
If you show breadcrumbs, you may mark them up. The list must match the visible trail and the links shoppers can click. See internal linking.
Do not invent a deeper hierarchy in JSON-LD than the page shows. Do not mark breadcrumbs on a URL that has none.
FAQ — only when visible
FAQPage is for pages that display questions and answers in HTML (not in an accordion that never appears without JS, if you can avoid that). Typical: shipping FAQ on a shipping policy page, or a short PDP FAQ that is actually on the PDP.
Do not add FAQ schema to every product with the same three generic questions. That is spam. Do not hide answers and mark them up anyway.
Reviews and ratings — never fake
Do not output AggregateRating or Review markup for:
- Ratings you invented.
- Counts copied from another site.
- “4.9 stars” with no visible reviews.
If you have no reviews, omit the types. If a platform app injects fake stars, that is a merchant-quality problem, not an SEO opportunity.
Google’s review-snippet policies are strict. Follow current documentation. This article will not describe how to game them.
Implementation notes
- Generate JSON-LD from the same product object as the template (Shopify metafields, WooCommerce product object, headless API).
- One primary Product node per PDP; do not paste three conflicting blocks from three apps.
- Organization / WebSite schema on the homepage is optional housekeeping; it does not rank the catalog.
- Keep schema out of
noindexpages you do not want enhanced.
Shopify and WooCommerce both accumulate leftover schema from uninstalled apps—view-source after changes.
Validation cadence
After theme or app changes: validate a sample PDP, a collection (if you mark collections at all—many stores should not force CollectionPage junk), and a guide with FAQ.
Search Console enhancement reports lag. Syntax-valid JSON that contradicts the page can still be ignored or penalized as spam.
Schema is a honesty layer. Describe the offer on the page. Stop there.
What not to mark up
Skip or be extremely conservative with:
- CollectionPage on thin grids with no unique copy. You are asserting a collection document that category SEO has not earned.
- ItemList of every product on a collection if the HTML grid is paginated or JS-only—the list will not match what a crawler sees.
- VideoObject for a file that is not on the page.
- Speakable and other experimental types you do not use.
Organization schema with a fake sameAs list of social profiles you do not operate is the same class of error as fake reviews: the graph is lying.
Variants, sales, and price validity
If the PDP shows a range (“from $40”), do not mark a single price of $40 unless that is the selected variant’s price. Either mark the variant the URL represents or omit Offer until the template has a single displayed price.
priceValidUntil should be a real date if you use it (end of a sale you will honor). An evergreen fake expiry is a policy problem.
Out of stock: OutOfStock plus a visible status. Do not keep InStock to “preserve rich results.”
Apps and duplicate JSON-LD
View-source after installing a reviews app, an SEO app, and a theme feature that also prints Product. Three Product nodes with three prices is worse than none. Keep a single generator: theme, one app, or your headless renderer.
When you uninstall an app, search the theme for leftover application/ld+json. Shopify and WooCommerce both accumulate this debris.
A practical rollout
- PDP: Product + Offer only, matching price and availability.
- BreadcrumbList where crumbs exist.
- FAQ only on URLs that already show Q&A.
- Reviews only if visible, legitimate, and policy-compliant—otherwise never.
Validate five URLs in different templates, not only the homepage. The homepage is not the catalog.
Key takeaways
- Schema describes visible content. It does not create stock, reviews, or rankings by itself.
- Product + Offer (price, currency, availability) is the core pair for PDPs. BreadcrumbList should match the on-page crumbs.
- FAQ schema belongs only when the questions and answers are visible on that URL.
- Never mark up fake ratings, invented review counts, or offers you will not honor. That is a policy and trust failure.
Frequently asked questions
Will Product schema get me rich results?+−
Eligible markup is a prerequisite, not a guarantee. Google documents current rich-result types and policies. Availability, merchant policies, and review rules change. Validate and watch Search Console enhancements—do not promise stars in a pitch.
Should I add Review schema if I do not show reviews?+−
No. If reviews are not on the page, do not mark them up. If you use a third-party review widget, the markup must match visible, legitimate reviews.
JSON-LD or Microdata?+−
JSON-LD is the usual choice for stores: one block generated from the product object. Keep it in sync with the template. Format and validate with a JSON formatter and validator during development.
Related tools
- JSON Formatter
Pretty-print JSON for theme settings, API payloads and feed debugging.
- JSON Validator
Validate JSON and show a precise parse error if the document is invalid.
- Meta Title Preview
Check title length, pixel-style width and a desktop SERP-style preview for e-commerce pages.
- Meta Description Preview
Draft a meta description, watch length, and preview how it may appear under a search title.
Related guides
- E-Commerce SEO Guide
A practical map of e-commerce SEO: information architecture, keyword research, product and category pages, technical indexation, schema, Core Web Vitals and measurement.
Related articles
- Product Page SEO
Product SEO is unique titles, specs, variant indexation and internal links. Duplicate manufacturer copy—not missing adjectives—is the usual ranking problem.
- E-Commerce Technical SEO
Technical SEO for stores is duplicates, canonicals, robots, sitemaps, JavaScript rendering and parameter URLs. Fix the catalog graph before you rewrite copy.
- How E-Commerce SEO Works
Catalog SEO is crawl, index, rank, then convert. Stores differ from blogs: thousands of URLs, filters, duplicates and thin product copy change the work.