Magento
Magento product schema for Google and AI search
Magento product schema is how a PDP tells Google and AI search what is for sale, at what price, and whether it can be bought. Magento 2 and Adobe Commerce often ship incomplete markup: a Product name, maybe a price in microdata, missing offers.availability, missing currency, reviews that never appear in the HTML. This note is for developers who own the product template, not for a plugin screenshot that says “schema enabled”.
I write this as Alan Vo, a Gold Coast developer with eighteen years on catalogues. I have shipped Magento product pages for bottles, engraved gifts and custom options. The JSON-LD has to match the page the shopper sees. Google’s rules live in product structured data and the vocabulary is on schema.org/Product. Magento does not fill those fields for you just because the SKU exists in admin.
What Magento product schema must include in 2026
Magento product schema must include a Product node with name, image and description, plus an Offer with price, priceCurrency and availability, if you want rich results and a chance of being cited accurately. That is the floor. Variants, GTIN, brand and real reviews sit on top.
Google still uses structured data to understand products. AI answers scrape the same HTML and the same JSON-LD. If your Magento theme outputs a Product without an Offer, you are asking both systems to guess. Guesses show the wrong price, the wrong stock, or a review score you do not have.
Native Magento has historically mixed microdata in templates with optional JSON-LD from a module or theme. Two graphs at once is common. Google may pick one, ignore both, or flag a conflict. I want one JSON-LD script on the PDP, in view-source, not injected by a tag manager after a timeout.
Availability must match Magento stock. InStock, OutOfStock, PreOrder, BackOrder are not decoration. A store that leaves every SKU as InStock while Magento says qty 0 will lose Merchant listing eligibility and will look dishonest in an AI shopping answer.
Price must match the visible price, including tax display for the store view you are on. Magento’s catalog price rules, special prices and customer-group prices make this easy to get wrong if the schema is built in PHP for a guest while the HTML later shows a logged-in price. Guest schema should match guest HTML.
Reviews belong in schema only when they exist on the page. Magento’s native reviews, or a third-party widget that server-renders stars and count, can support AggregateRating. A JS widget that paints stars after load does not. Invented ratings are a policy problem. I will not put them in JSON-LD.
For Merchant listings, Google has also asked for shipping and return policy fields on Offer in many regions. Magento rarely outputs shippingDetails and hasMerchantReturnPolicy unless you add them. Treat that as a 2026 gap on the audit, not as optional trivia.
Configurable products need a decision: schema on the parent with a representative Offer, or variant-level data. Magento configurables are one URL with many simples. If you expose every child as a separate Product URL, you have a canonical problem as well as a schema problem. One indexable parent, offers that update when a swatch is selected, is the usual honest pattern. Updating JSON-LD in the browser without updating the server HTML means Google may never see the variant price. Prefer server-rendered default offer plus clear in-page variant UI.
Why Magento product schema still decides visibility
Magento product schema still decides visibility because rich results and AI shopping cards will not trust a PDP that only has an H1. Titles get you the click. Markup gets you the extra real estate and a machine-readable offer.
What changed is the audience for that markup. Google was always the consumer. In 2026 retrieval bots and shopping agents also parse Product JSON-LD. If Magento robots.txt blocks those bots, schema never gets read. If robots allow them and schema is empty, they read a pretty page and still cannot quote a price.
The other change is enforcement. Google’s product rich results documentation is stricter than a Magento marketplace module’s readme. Missing priceCurrency, relative image URLs, and url that does not match the canonical are still routine findings. I validate with Google’s rich results test and with a raw fetch, because some Magento modules inject JSON-LD only for Googlebot user-agents. Cloaking markup is a bad idea. Serve the same graph to everyone.
Custom options make Magento special. Engraving, mix builders and gift messages change the SKU the warehouse ships. Schema should describe the product being offered on the URL, not a fake generic. If the URL is the parent bottle, the Offer is the bottle. Personalisation is an option, not a second Product, unless you truly have unique URLs per variant.
How Magento product schema actually ships on a PDP
Magento product schema ships from the product view template or a ViewModel that reads the same price and stock the HTML uses. If the theme and the module disagree, view-source will show two scripts. Delete one.
I implement JSON-LD as a single @graph or a single Product with nested Offer. I pull name from the product name the H1 uses, description from the short description or a dedicated metafield-style attribute, image from the gallery image that is actually the LCP candidate, not a 1x1 placeholder. URL is the canonical URL for that store view.
Offer uses Magento’s price in the current currency, formatted as a number, not a string with a dollar sign. priceCurrency is the ISO code. availability maps from isSaleable and stock status, not from a hardcoded enum. url on the Offer should be the page you can buy from.
Brand is the Magento manufacturer attribute or a dedicated brand attribute, typed as Brand with a name. Do not leave it as a raw string if you can help it.
SKU, GTIN and MPN: Magento often has SKU. GTIN may live in a custom attribute. If you do not have a GTIN, omit it. Empty gtin13 fields are worse than nothing.
BreadcrumbList belongs on the same page, usually a second node in the graph. Magento breadcrumbs that include “Home” and the category path help both Google and humans. Keep the item URLs absolute.
I do not put FAQ schema on a Magento PDP unless there is a visible FAQ. I do not put Article schema on a product. The schema markup notes for product and article pages cover the cross-platform version of that rule.
Out of stock: still output Product and Offer with OutOfStock if the URL is indexable. Hiding the page with noindex because qty hit zero is a merchandising choice. If the URL stays live, the schema should say unavailable, not pretend.
Bundle and grouped products: describe what the URL sells. A grouped Magento page is not twelve Products in one graph unless you really render twelve buy boxes. One Product with a description that matches the grouping is usually cleaner.
Cache: Magento full-page cache will freeze JSON-LD with the price from the cache key. If your cache key ignores currency or customer group, guests can see a price the schema does not match. Align cache keys with the store view and currency. Purge on price rule changes if you must.
Production checklist for Magento product schema
- View-source a simple, a configurable, a bundle or custom-option product, and an out-of-stock product. Count
ld+jsonscripts. Aim for one product graph.
- Confirm Product
namematches the H1,urlmatches the canonical, andimageis an absolute URL that returns 200.
- Confirm Offer
price,priceCurrencyandavailabilitymatch the visible guest price and Magento stock.
- Remove microdata that duplicates the same facts if it conflicts. One format. JSON-LD preferred.
- Map Magento manufacturer or brand attribute to
brand. Skip empty brands.
- Add GTIN only from a real attribute. Never invent barcodes.
- Include
AggregateRatingonly if review count and average are visible in HTML for a guest.
- Add BreadcrumbList that matches the on-page breadcrumbs.
- For Merchant listing eligibility in your market, add shipping and return policy nodes Google currently requires. Magento will not invent your returns copy.
- Test with Google’s rich results tool and with curl as a generic user-agent. Same HTML.
- After a theme swap (including Hyva), re-check that the new PDP template still calls the schema block.
- Log Search Console product rich-result errors weekly for a month after launch. Fix invalid items by SKU sample, not by reinstalling the module.
What breaks Magento product schema
Theme updates break it. A Hyva or Luma child theme that overrides product.info and forgets the schema block is the classic regression.
Price plugins break it. Magento price rendering is a stack. A module that changes the HTML price and not the ViewModel used for JSON-LD will desync.
Multi-currency breaks it. Store views with currency switchers often schema the base currency.
Configurable defaults break it. Schema shows the cheapest simple while the page shows a more expensive default swatch, or the reverse.
Review apps break it. They promise stars in search. They inject JSON-LD with ratings that are not on the page, or they inject nothing in the HTML. Either fail Google’s “visible content” expectation.
Absolute vs relative URLs break image and url fields. Magento’s getProductUrl() can still surprise you with store codes.
Multiple SEO suites break it. Two Product graphs with two prices is a support ticket you cannot win.
How to measure Magento product schema
You measure Magento product schema with Search Console enhancements for products, the rich results test on a sample of SKUs, and whether AI or Google shopping surfaces show the right price and availability. Indexation without valid Offer data is a hollow win.
I sample by product type, not by “the demo SKU”. Magento catalogues hide their bugs on configurables and custom options.
I also fetch the PDP as Googlebot and as a browser. If schema only exists for Googlebot, that is a finding. Fix the template so everyone gets the same graph.
Do not claim a conversion lift from adding JSON-LD unless you measured it. I have not published a Magento-only schema conversion number. The published Magento outcome I will stand behind is the retail conversion Magento work at $2.5 million year-on-year sales, which mixed SEO, UX and operations. Schema was part of making product pages eligible. It was not a magic tag.
Related Magento work on this site
Product schema has to survive real Magento PDPs, including options. I shipped the Never Never Distillery Magento storefront as contract development, where bottles still have to look like a brand and still check out, and Spirited Gifts, where engraving options sit on the product page. Those templates are where Offer data either matches the buy box or lies. I would rather ship a boring, correct Product graph than a rich-looking one that invents reviews.
Magento product schema FAQ
Does Magento product schema work without a marketplace module?
Magento product schema can work without a marketplace module if the theme or a small custom module outputs valid JSON-LD from the same price and stock as the HTML. Modules help until they duplicate graphs. View-source decides, not the admin checkbox.
What Magento product schema fields does Google require?
Magento product schema that aims at product rich results needs Product name, image, and an Offer with price, priceCurrency and availability, plus a URL that matches the page. Extra fields (GTIN, brand, shipping, returns, reviews) unlock more surfaces when they are true.
Can Magento product schema include reviews from a JavaScript widget?
Magento product schema should not include reviews that only exist in a JavaScript widget. Google expects the rating content to be available in the page. Server-render the count and average, or omit AggregateRating.
Will Magento product schema fix rankings on its own?
Magento product schema will not fix rankings on its own. It helps eligibility for rich results and clearer AI citations. Crawl, canonicals, titles and page speed still decide whether the PDP is seen. Markup is one layer of the audit.
Keep reading
Contact if you want this kind of work on a live store.