What the error means
Your Offer markup does not declare a return policy. Google reports it as a missing recommended field on merchant listings.
Why Google rejects it
Google added return and shipping terms to the merchant listing requirements, and the default Shopify product JSON-LD does not emit either. So the warning appears on stores that have never changed a thing — the requirement moved, not your theme.
How to fix it
- The quickest fix is not in the theme: set your return policy in Merchant Center under shipping and returns. Google then uses that and stops warning.
- To fix it on the page, add hasMerchantReturnPolicy to the Offer with applicableCountry, returnPolicyCategory, merchantReturnDays and returnMethod.
- Put it on the Offer, not the Product. Placed on Product it is ignored.
- Do not invent the values. They must match the policy you actually honour, or you are misrepresenting terms.
Common causes
Offer has no return policy entity
The Product's Offer may omit hasMerchantReturnPolicy entirely, so Google cannot read return terms from that offer's markup. This field describes the merchant's actual policy; it is not a place to invent a generous window to satisfy a validator. Compare the markup with the return page and Merchant Center account settings.
Policy is attached to the wrong schema type
MerchantReturnPolicy needs to be connected through the supported return-policy property at the right level. A policy object placed next to Product or nested in an unrelated graph node may parse as JSON but not be associated with the product offer. Use Google's supported documentation and test the detected entity, not just the syntax.
Policy values are incomplete or unsupported
A finite return window needs a returnPolicyCategory and merchantReturnDays; country scope also matters. An invalid enum URL or contradictory return fee properties can prevent Google from understanding the policy. Validate required values and only include optional terms the business actually offers.
Theme or app emits partial policy data
A storefront can show a complete returns page while its Product JSON-LD omits the policy. The standard page policy and schema markup are separate channels. A theme update, schema app configuration, or duplicated Product output can leave only one of them updated.
Account-level settings and page markup differ
Google can receive return terms from Merchant Center settings as well as supported page markup. If both exist but disagree, Google may use the account-level or higher-precedence source in a particular context, while a page report still flags missing or incomplete markup. Review each source and keep the actual policy consistent.
Fix it on your platform
On Shopify
- Read the store's published return and refund policy and record its countries, return window, fees, and permitted methods before changing markup. Shopify's policy page is not automatically the same thing as Offer JSON-LD.
- Check the product page source for hasMerchantReturnPolicy inside its Offer. Shopify themes and apps differ; inspect the published theme's product structured data snippet or the app that emits schema before editing.
- If maintaining policy markup in Merchant Center is easier, configure the policy under Shipping and returns in Merchant Center and keep the storefront policy aligned. Do not add contradictory custom JSON-LD just to clear a page warning.
- If you update Liquid or a schema app, test more than one product template and country scope. Remove duplicated or stale return-policy objects from other emitters.
On WooCommerce
- Review the actual return policy page and confirm its terms, countries, day count, and return shipping responsibility. Record the exact terms before editing schema.
- Identify the plugin or theme that creates Offer JSON-LD. In its product schema settings or supported hook, attach MerchantReturnPolicy via hasMerchantReturnPolicy to the Offer or use the documented organization-level policy model where appropriate.
- If Merchant Center settings already manage returns, verify the current policy there and align the website. Google documents account-level configuration as an alternative to keeping policy markup current.
- Test a product page after changes and check that a second plugin is not emitting an older Offer or policy object that conflicts with the new one.
On other platforms
- In Wix, BigCommerce, or Squarespace, first check whether the product schema is generated by the platform, an SEO app, or custom code. Use the supported setting for that emitter; do not paste markup into a page body where it will be visible text.
- If the platform does not expose return markup, maintain the return policy in Merchant Center and keep a clear public policy page on the storefront.
- On custom sites, attach MerchantReturnPolicy using Google's documented relationship and supported schema values. Scope it to applicable countries and accurately represent the real policy.
- Check every product template or feed integration that produces Offer data, especially if different product classes have different return eligibility.
How to confirm it is fixed
- Compare the public return policy, Merchant Center return settings, and any structured data. Country coverage, days, fees, and methods must describe the terms you actually honor.
- Inspect the live product page's detected Offer and confirm hasMerchantReturnPolicy is associated with it at a supported level. Validate syntax with Google's Rich Results Test or schema diagnostics.
- Check the Merchant listings report and relevant warnings after Google recrawls. A warning can remain until updated page data is fetched.
- Run the structured data check on representative products and inspect the exact Product and Offer entities it finds.
- If you changed account settings, confirm the saved policy in Merchant Center and review affected item diagnostics separately from Search Console markup reports.
A worked example
Hypothetical case: a clothing retailer has a clear 30-day return page and a return policy configured in Merchant Center, but Search Console reports a missing hasMerchantReturnPolicy field for several product URLs. Its custom theme emits Product and Offer JSON-LD without a return object. The owner compares the country coverage and terms in all three places, then decides to keep Merchant Center as the maintained source because the policy changes by market. A developer adds accurately scoped markup to the Offer for page-level completeness and removes a stale schema app block. The warning updates after recrawl; the store does not claim new return terms.
Questions
Is hasMerchantReturnPolicy required for Product schema?
Where should hasMerchantReturnPolicy go in JSON-LD?
Can I set return policies in Merchant Center instead of schema?
What fields do I need for a 30-day return policy?
Why does Search Console still show a missing return policy after I added it?
Shipwork reads your product page markup and reports whether the Offer carries hasMerchantReturnPolicy and shippingDetails. Free, no account, no signup. Paste your store address.
Check my store for Missing field 'hasMerchantReturnPolicy'Go deeper: Product schema, fully explained
See the check: Structured data, inspected
Other errors like this