SEO Guide · 2026
Ecommerce Return Policy Structured Data: Complete MerchantReturnPolicy Schema Guide
Return policy is one of the top three purchase decision factors for online shoppers — and AI shopping agents specifically surface it in product recommendations. Without MerchantReturnPolicy structured data, your return policy is invisible to ChatGPT Shopping, Google AI Mode, and Google Shopping's "Free returns" badge.
MerchantReturnPolicy JSON-LD block once in your Shopify theme layout, assign it a unique @id, and reference that @id from each product's Offer.hasMerchantReturnPolicy. Required fields: returnPolicyCategory, merchantReturnDays, returnFees, returnMethod. Unlocks the Google Shopping "Free returns" badge and lets ChatGPT Shopping answer return policy questions with accurate data.
Why return policy structured data matters for AI agents
When a shopper asks ChatGPT Shopping "Does this store have free returns?" or asks Perplexity "What's the return window for this product?", the AI reads your structured data to generate its answer. If you have no MerchantReturnPolicy markup, the AI either reads your return policy page text (which may be formatted for humans, not machine parsing) or says it doesn't know.
"I don't know" is a conversion-killer. Shoppers who can't confirm a return policy before purchase hesitate — especially for higher-price items or items where fit/size uncertainty applies (apparel, footwear, furniture). A clear structured data return policy removes that hesitation upstream, before the shopper even visits your store.
MerchantReturnPolicy: all supported fields
| Field | Type | Required? | Description |
|---|---|---|---|
@type |
String | Required | Always MerchantReturnPolicy |
@id |
URL | Recommended | Unique identifier, e.g. https://yourstore.com/#return-policy. Enables cross-page reference without duplication. |
applicableCountry |
ISO 3166 code | Recommended | Country this policy applies to. Google requires this for Shopping. Use US, GB, etc. |
returnPolicyCategory |
Schema.org URI | Required | One of: MerchantReturnFiniteReturnWindow, MerchantReturnUnlimitedWindow, MerchantReturnNotPermitted |
merchantReturnDays |
Integer | Conditional | Number of days. Required when returnPolicyCategory is FiniteReturnWindow. |
returnMethod |
Schema.org URI | Recommended | ReturnByMail, ReturnInStore, ReturnAtKiosk |
returnFees |
Schema.org URI | Recommended | FreeReturn, ReturnShippingFees, OriginalShippingFees |
refundType |
Schema.org URI | Optional | FullRefund, StoreCreditRefund, ExchangeRefund |
returnPolicySeasonalOverride |
MerchantReturnPolicySeasonalOverride | Optional | Extended return window for holiday seasons, with start/end dates. |
Complete MerchantReturnPolicy JSON-LD example
Standard 30-day free return policy
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MerchantReturnPolicy",
"@id": "https://yourstore.com/#return-policy",
"name": "Standard Return Policy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn",
"refundType": "https://schema.org/FullRefund"
}
</script>
Referencing the policy from a product Offer block
{
"@context": "https://schema.org",
"@type": "Product",
"name": "{{ product.title | escape }}",
"offers": {
"@type": "Offer",
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency }}",
"priceCurrency": "{{ shop.currency }}",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}",
"hasMerchantReturnPolicy": { "@id": "https://yourstore.com/#return-policy" }
}
}
Holiday extended return window overlay
"returnPolicySeasonalOverride": {
"@type": "MerchantReturnPolicySeasonalOverride",
"startDate": "2026-11-01",
"endDate": "2026-12-31",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 60
}
How AI agents and Google use this data
| Platform | How it uses MerchantReturnPolicy | Visible to shopper as |
|---|---|---|
| Google Shopping | Reads returnFees for "Free returns" badge; merchantReturnDays for return window display |
"Free returns" green badge on product listing card |
| Google AI Mode | Reads all fields to answer "what's the return policy?" questions in AI summaries | Plain-language answer in AI search result |
| ChatGPT Shopping | Reads policy category and days to include in product recommendations | "30-day free returns" shown in product comparison |
| Perplexity Shopping | Reads return policy to answer pre-purchase questions | Return policy cited in product summary card |
| Bing Shopping | Reads policy for return filter and badge display | Return window shown in product details panel |
Common MerchantReturnPolicy errors
| Error | Why it happens | Fix |
|---|---|---|
returnFees uses plain text |
Setting "returnFees": "free" instead of the schema URI |
Use "returnFees": "https://schema.org/FreeReturn" |
returnPolicyCategory missing namespace |
Setting "returnPolicyCategory": "FiniteReturnWindow" |
Use full URI: "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow" |
Missing merchantReturnDays |
Set FiniteReturnWindow but forgot the day count |
Add "merchantReturnDays": 30 (or your actual window) |
| Policy defined per-product instead of referenced | Copy-pasted full JSON-LD block into every product template | Define once with @id in theme layout; reference via @id from products |
Missing applicableCountry |
Omitted optional field | Add "applicableCountry": "US"; required by Google Shopping for badge eligibility |
Frequently asked questions
Does MerchantReturnPolicy structured data improve Google Shopping rankings?
Yes, directly. Google Shopping uses MerchantReturnPolicy structured data to display return policy information on product listing cards, enable the "Free returns" badge for products with returnFees set to FreeReturn, and factor return policy into Shopping eligibility scoring. Products without any return policy structured data may rank lower compared to similar products with clear policies. Google has documented that return policy information is a key purchase decision factor and surfaces it prominently in Shopping interfaces.
Where should I put MerchantReturnPolicy JSON-LD in my Shopify store?
Define it once in your Shopify theme's main layout file (typically theme.liquid in the head section) as a site-wide policy, then reference it from each product's Offer block using @id. This avoids duplicating the full policy JSON-LD on every product page. If you have different policies for different product categories, add category-specific policies and reference the appropriate @id from each product.
What return policy fields does ChatGPT Shopping read?
ChatGPT Shopping reads return policy information primarily from MerchantReturnPolicy structured data and secondarily from the plain text of your return policy page. The fields it reads most are: returnPolicyCategory, merchantReturnDays, returnFees, and returnMethod. When a user asks "What is the return policy for this product?", ChatGPT Shopping uses these structured fields to generate a plain-language answer. If these fields are absent, ChatGPT may say it couldn't find return policy information — a friction point that reduces purchase intent.
Can I have different return policies for different products?
Yes. Define multiple MerchantReturnPolicy objects each with a unique @id, then reference the appropriate @id in each product's Offer.hasMerchantReturnPolicy. For example, a 30-day policy for apparel and a 15-day policy for electronics. In Shopify, use product metafields to store the @id reference and output it in your Liquid JSON-LD template, allowing per-product or per-collection policy references without hardcoding.
Check your Shopify return policy structured data
CatalogScan checks MerchantReturnPolicy markup, Offer linkage, and 16 other AI-agent-critical signals across your entire catalog in 2 minutes.
Scan your store free