CatalogScan

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.

TL;DR Define a 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

FieldTypeRequired?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

PlatformHow it uses MerchantReturnPolicyVisible 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

ErrorWhy it happensFix
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