Structured data overview
Schema.org JSON-LD blocks emitted in the page <head> (Luma + Hyvä) and via the seo.structured_data GraphQL field (headless). Pluggable provider pattern — register new schema types by implementing one interface.
Built-in providers
| Provider code | Schema type | Where it fires |
|---|---|---|
product | Product (with Offer, optional AggregateRating, Brand, gtin, mpn) | Product pages |
breadcrumb | BreadcrumbList | Product + category pages |
organization | Organization (with logo, sameAs) | Home page only |
website | WebSite + SearchAction (sitelinks search box) | Home page only |
Each is independently togglable.
Configuration
Stores → Configuration → SEO Suite → Structured Data (JSON-LD)
| Field | Default |
|---|---|
| Enable JSON-LD output | No |
| Product schema | Yes (when master switch on) |
| Breadcrumb schema | Yes |
| Organization schema (home page) | Yes |
| WebSite + SearchAction schema (home page) | Yes |
| Organization name | Falls back to store name |
| Organization logo URL | Empty (recommended to set) |
| Social / official URLs (one per line) | Empty — used for sameAs |
| Search URL template | Defaults to /catalogsearch/result/?q={search_term_string} |
Per-store overrides supported.
Output format
JSON-LD is rendered with JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT so the source view stays readable. The template also escapes </ to <\/ defensively.
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Acme Widget Pro",
"sku": "AWP-001",
"image": "https://store.example/media/catalog/product/cache/.../awp.jpg",
"url": "https://store.example/acme-widget-pro.html",
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock",
"url": "https://store.example/acme-widget-pro.html"
},
"brand": {
"@type": "Brand",
"name": "Acme"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.5,
"reviewCount": 28,
"bestRating": 5,
"worstRating": 1
}
}
</script>
How it composes with Magento core
Magento Open Source ships no JSON-LD out of the box. Adobe Commerce ships limited Product/Offer JSON-LD via Magento_CatalogStorefront. The SEO Suite's providers don't conflict — both blocks render and Google merges them, but to avoid confusion we recommend disabling Adobe Commerce's storefront JSON-LD if you're on EE.
Validation
Use Google's Rich Results Test on a product page URL. You should see Product snippets detected with no errors.
Splitting structured data across multiple <script> tags
A single provider can return either one document or an array of documents. The renderer wraps each in its own <script> tag — the recommended pattern over packing multiple @types into one block, because Google's parser is more lenient with separate blocks.
Next
- Built-in providers — exact field-by-field output for each
- Custom providers — adding FAQ, Article, Video, LocalBusiness, etc.