Rich snippet extenders
Rich snippet extender is a feature that allows you to enhance standard rich snippets by adding extra elements using structured data formats like Schema.org and showing more information.
This page describes settings used for extending standard rich snippets by custom JSON code.
They are placed in Marketing -> Advanced SEO Suite -> Rich snippet extenders -> Add extender/Edit.
General
- Name: defines the name of extender.
- Is active: this slider enables/disables extender.
- Entity type: defines whether this entity is Product or Offer.
- Store view: sets the scope of store views where extender will be added.
Snippet extension
- JSON snippet: sets the code of extender. JSON format is allowed only. Enclose the JSON snippet in curly braces. You can use template variables inside JSON values to dynamically insert product, category, or store data. See Template variables below.
{
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "NL",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 14,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/ReturnFeesCustomerResponsibility"
}
}
{
"review": [
{
"@type": "Review",
"author": "[product_name]",
"name": "[product_name]",
"reviewBody": "[category_name]"
}
]
}
In this example, [product_name] and [category_name] will be replaced with actual values when the snippet is rendered on the frontend.
- Template variables sidebar: when you click on the JSON snippet editor, a sidebar panel slides in from the right showing all available template variables grouped by scope (Store Data, Category Data, Product Data). Double-click on any variable to insert it at the current cursor position.
- Override non-empty fields: if enabled, extender will overwrite matching fields in original snippet.
Examples: Merchant Listing fields
Google's Merchant Listing structured data recommends several Product/Offer fields that aren't set by the base rich snippet. Since extenders merge straight into the generated Product/Offer JSON-LD, you can add all of them with an extender — no custom development needed.
{
"gtin13": "[product_gtin13]",
"mpn": "[product_mpn]"
}
Replace gtin13/mpn with your actual attribute codes if they differ — any product attribute is available as [product_{attribute_code}].
{
"brand": {
"@type": "Brand",
"name": "[product_brand]"
}
}
Enable Override non-empty fields, since Mirasvit already outputs brand as a plain string by default.
{
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 1,
"maxValue": 5,
"unitCode": "DAY"
}
}
}
}
{
"priceValidUntil": "2026-12-31",
"itemCondition": "https://schema.org/NewCondition"
}
{
"seller": {
"@type": "Organization",
"name": "[store_name]",
"hasMemberProgram": {
"@type": "MemberProgram",
"name": "VIP Club",
"hasTiers": {
"@type": "MemberProgramTier",
"name": "Gold",
"hasTierBenefit": "https://schema.org/TierBenefitLoyaltyPoints",
"hasTierRequirement": {
"@type": "MonetaryAmount",
"value": "500",
"currency": "USD"
}
}
}
}
}
Google's loyalty program markup is a MemberProgram nested under Organization, so it has to be added as a property of the offer's seller, not directly on the offer. Enable Override non-empty fields, since seller is likely already populated.
Limitations
Extenders can only add properties into the Product or Offer node that the module already generates — they cannot emit an independent, top-level <script type="application/ld+json"> block for a different schema type. This means the following are not achievable through extenders and require custom development:
- Event schema — it's a standalone type on an event page (an Offer would be nested inside it, not the other way round).
- Speakable schema — a property of
WebPage/Article, not of Product or Offer. - Author (
Person) schema for blog/article pages — belongs onArticle/BlogPostingmarkup, not Product/Offer. - Standalone VideoObject schema — per Google's guidance it must live on the page hosting the video as its own markup, not nested inside a Product.
- A full LocalBusiness page (store locator/homepage) — you can set
Offer.sellerto aLocalBusinesswith address and phone, but that only covers the seller of a specific offer, not a dedicated store-level LocalBusiness block.
Template variables
Rich snippet extenders support the same template variables used in SEO templates and rewrites. Variables are enclosed in square brackets (e.g., [product_name]) and are resolved dynamically when the structured data is rendered on the frontend.
Available variable scopes for extenders:
- Product variables:
[product_name],[product_sku],[product_url],[product_price],[product_brand], and any product attribute via[product_{attribute_code}]. - Category variables:
[category_name],[category_url],[category_parent_name], etc. - Store variables:
[store_name],[store_phone],[store_email],[store_url],[store_address], etc.
For the full list of available variables, see Variables for templates and rewrites.
Conditions
This section contains conditions builder, tool that defines cases when the extender will be applied.