What is Magento structured data?
Short answer
Structured data in Magento means Schema.org JSON-LD printed in the page HTML, usually in a <script type="application/ld+json"> block, so search engines can read what a page is: a product with a price and stock status, a breadcrumb trail, an article and its author. Valid markup makes product pages eligible for Google rich results such as price, availability and review stars. Luma only ships basic Product microdata in its templates, so on most stores I add JSON-LD for Product, Offer, AggregateRating, BreadcrumbList and Organization through a module. I check each template with the Rich Results Test and watch Search Console after every release.
- Pick the schema types your page templates need 01
- Emit JSON-LD via a Block class or head.additional 02
- Wire entity references via @id URIs 03
- Validate with Rich Results Test + Schema Validator 04
- Monitor in Search Console Enhancements reports 05
Most common mistake Wrong MIME type on the script tag
Five steps from schema-type selection to Search Console monitoring
There is no magic here: a shared vocabulary, a script tag, two validators and a Search Console report. This is the order I work in when I add schema to a store.
-
01
Pick the schema types your page templates need
I map page types to schema types before writing any markup.
Productwith a nestedOffer(plusAggregateRatingandReviewwhen the store has reviews) on product pages,BreadcrumbListon catalog pages,OrganizationandWebSiteon the home page,ArticleorBlogPostingon blog posts,LocalBusinessfor a physical shop. The full type list is atschema.org/docs/full.html; pick the most specific type that really matches the page. -
02
Emit JSON-LD via a Block class or head.additional
I add the markup through layout XML, either in the
head.additionalcontainer or as a block near the page content, with its own template. A Block or ViewModel builds a PHP array and the template prints<script type="application/ld+json"><?= json_encode($graph, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) ?></script>. An@grapharray lets me put Product, BreadcrumbList and Organization in one script tag. Building the data in PHP and encoding it withjson_encodealso saves you from broken JSON when a product name contains quotes. -
03
Wire entity references via @id URIs
I give each entity an
@id, for examplehttps://yoursite.com/#organization, and reference it instead of repeating it. An Article’sauthorthen becomes{"@id": "https://yoursite.com/#kishan-savaliya"}rather than a full Person object on every page. The Person or Organization is defined once, usually in markup that loads site-wide, and every page points back to it. The markup stays short and the same entity is described the same way everywhere. -
04
Validate with Rich Results Test + Schema Validator
I use two free tools.
validator.schema.orgchecks the markup against the Schema.org vocabulary: wrong types, unknown properties, broken nesting.search.google.com/test/rich-resultstells you whether Google can show a rich result for the page, and lists errors (these block it) and warnings (missing recommended properties). I fix every error before release and as many warnings as the store’s data allows, for example addinggtinorbrandwhen the catalog actually has those values. -
05
Monitor in Search Console Enhancements reports
After release, Google Search Console shows a report per rich result type, such as product snippets, merchant listings, breadcrumbs and review snippets. Each report lists valid items, warnings and errors with example URLs, and you can inspect a single URL to see what Google picked up. I check these reports for a few weeks after any theme or module deploy, because a sudden drop almost always means a template change broke the markup.
Four cases where I always add structured data
Valid markup that matches the visible page has very little downside. These are the four cases where I add it on every project.
-
Every Magento store, Product schema is baseline
I would not skip
Productschema on any store. It is what makes product pages eligible for price, availability and review stars in Google results, and it feeds Google’s free merchant listings too. At minimum I ship Product with anOffer(price, currency, availability), plusAggregateRatingandReviewwhen the store has real reviews. Luma’s built-in microdata only covers part of this, so a module such asmage2kishan/module-structured-dataor Mageplaza Rich Snippets fills the gaps. -
Sites optimising for AI Overviews and Perplexity
Clean JSON-LD makes it easier for any crawler, including the ones behind AI search tools, to pick out the product name, price, author and dates without guessing from the HTML. Nobody outside those companies knows how much weight they give it, so I do not sell schema as an AI ranking trick. I treat it as clear metadata that matches the visible page, which helps classic search and AI answers alike.
-
FAQ blocks on service and guide pages
Since 2023 Google only shows FAQ rich results for a small group of well-known government and health sites, so most stores will not get expandable questions in search any more. I still add
FAQPagemarkup when a page has a real, visible FAQ, because it describes the content clearly for other search engines and AI tools and costs very little. I just do not promise a click-through lift from it. -
Video and event content
VideoObjectandEventstill have their own result types in Google: video results can show a thumbnail and duration, and events can show dates and a location. Google stopped showing HowTo rich results in 2023, so I no longer addHowTomarkup for search alone. If a store has product videos on its PDPs or sells event tickets, marking those up is a small job for the extra visibility it can bring.
Three structured-data mistakes that silently kill rich results
Every "my schema is not working" audit I run lands on one of these three issues. Check each before assuming Google is being unfair.
-
Wrong MIME type on the script tag
The single most common bug. Putting your JSON-LD in
<script type="text/javascript">or omitting thetypeattribute entirely makes Google skip the block. The crawler matches the literal stringapplication/ld+json, nothing else triggers JSON-LD parsing. Audit your template output in DevTools and confirm every structured-data block opens with<script type="application/ld+json">. This catches about a third of "my schema isn’t showing up" tickets. -
Marking up content that is not visible to users
Google’s structured-data guidelines explicitly forbid marking up prices, reviews, availability, or any other property that is not visible on the rendered page. If you set
ratingValue: 4.8in JSON-LD but no stars appear in the page’s rendered HTML, that is grounds for a manual penalty. The penalty: Google removes all rich-result eligibility for the affected URL pattern, sometimes sitewide. Always derive schema values from the same data source that renders the visible price / rating block. Never hard-code marketing values into schema. -
FAQPage answers exceeding 3000 characters
Google truncates FAQPage rich results when any single answer runs past
3000 characters, and in some cases rejects the entire FAQPage block. Audit your FAQ answer lengths before shipping, this is especially common when content writers paste long explanatory paragraphs into FAQ slots that were sized for short answers. The fix: split long answers across multiple questions, or move the long-form content into the Article body and keep the FAQ tight. Runstrlen()on each answer in your Block class as a sanity check.
Magento structured data, frequently asked questions
-
JSON-LD vs Microdata vs RDFa, which should I use?
Use JSON-LD. The Schema.org specification accepts all three syntaxes equally, but Google’s documentation explicitly states a preference for JSON-LD because it sits in the page <head> as a separate block, isolated from the rendered DOM. That makes it dramatically easier to maintain, you can rebuild templates, swap frontend frameworks, even migrate from Luma to Hyvä without touching schema markup. Microdata couples the markup to your HTML tags inline (data-attribute soup), and RDFa is essentially Microdata with a different syntax. For any new Magento build in 2026, JSON-LD is the only sensible choice. -
Is Microdata still valid? Will my existing Microdata stop working?
Microdata is still fully valid, Google, Bing, and every other consumer of Schema.org markup still parse it. If your existing Magento store ships Microdata (the older mage2kishan module versions and several third-party extensions did), you do not need to rush a migration. The Schema.org spec accepts all three equivalently. The reason to migrate to JSON-LD is maintainability, not validity. Plan the migration when you next rebuild your templates, not as an emergency. The one practical edge: some newer rich-result types (likeFAQPage) are easier to author cleanly in JSON-LD because they nest deeply. -
Why are my Product rich snippets not showing in Google SERP?
Three common causes. (1) Validation errors, run the URL throughsearch.google.com/test/rich-resultsand fix every red error. (2) Insufficient page authority, Google’s rich-result engine applies a quality filter; even valid markup can be suppressed on pages with weak backlink profiles or thin content. Build domain authority and the snippets unlock retroactively. (3) Google’s discretion, even on perfectly valid markup, Google chooses what to render. Valid structured data makes your page eligible for a rich result; it does not guarantee one. Monitor the Search Console Enhancements report and the rich-result preview to see what Google actually displays. -
Does Magento 2.4 emit Product schema automatically?
Yes, Magento 2.4.x ships a thin built-in Product schema block out of the box, emittingname,image,price,availability, andbrand. Adobe added it in the 2.4.x series after years of merchants complaining about the gap. The built-in is functional but incomplete, most production stores needReviewandAggregateRatingnesting,skuandgtin13properties,offerswith priceValidUntil, and BreadcrumbList sitewide. Third-party modules (mage2kishan/module-structured-data, Mageplaza Rich Snippets, Magezon) fill those gaps. Audit your current emit withview-source:on a PDP before assuming the core is enough. -
Can I have multiple schema blocks on one page?
Yes, and the standard pattern is to combine them via a single@grapharray inside one JSON-LD script tag. That keeps the HTML clean and makes entity-reference (@idcross-linking) work cleanly across types. A typical Magento PDP combines Product + Offer + AggregateRating + Review + BreadcrumbList in one @graph. The alternative, multiple separate<script type="application/ld+json">blocks, also works and Google parses them equivalently, but it duplicates the @context boilerplate and makes maintenance harder. Single @graph is preferred unless you have a strong reason otherwise (e.g. dynamically-injected blocks from different modules). -
How exactly does structured data help with AI Overviews?
LLM-powered search engines (Google AI Overviews, ChatGPT browse, Perplexity, You.com) crawl your page’s structured data alongside its visible text, and they treat the structured data as authoritative metadata when summarising the topic. Properties likename,description,author,datePublished,aggregateRating, andaboutfeed directly into the citation snippet the AI generates. Without structured data, the LLM has to infer those facts from your prose, less reliable, more likely to misattribute, less likely to cite. With structured data, the LLM cites with confidence. This is why "AI-citation visibility" has become the new rich-result, structured data is the lever.
Want a structured-data audit on your Magento store?
Send your storefront URL, I will run the Rich Results Test on every page-type, audit your @graph structure, check FAQ-length compliance, verify visibility-of-marked-up-content, and reply with a written fix list, fixed-price quote, and earliest start date. 24-business-hour turnaround.