ShipworkSite inspection
Structured data

Crawlability

PaginationAre paginated pages set up right?Internal searchIs site search eating crawl budget?URL parametersAre parameters creating duplicates?Log analyserWhat does Googlebot actually crawl?Robots builderNeed a robots.txt file?Soft 404sAre pages “not found” but returning 200?JavaScriptCan crawlers see it without running JS?FreshnessIs my site quietly going stale?Robots.txtDoes robots.txt say what I think?

Indexing

Sitemap lastmodAre my sitemap dates valid?SitemapIs my sitemap actually fetchable?IndexingIs Google allowed to index my pages?CanonicalsIs Google indexing the wrong URL?Index signalsDo sitemap and index signals agree?Sitemap generatorNeed a sitemap.xml for my site?Bulk URL statusWhere does each of these URLs really land?Redirect builderNeed the redirect rules?RedirectsAre my URLs answering directly, over HTTPS?

On-page

Keyword ideasWhat are people searching for?SERP previewHow does my page look in Google?Content qualityAre your pages too thin or too alike?Image weightAre images slowing the page?CannibalizationAre pages competing with each other?On-page checkDoes the page use its target phrase?ImagesAre my images accessible and loading?Meta tag builderWhat should my title and share tags say?DuplicatesDo my pages compete for one query?

Links

Orphan pagesWhich pages can no link reach?Link graphHow deep do your pages sit?Anchor textDo links say what they point at?Outbound linksAre external links still alive?Broken linksAre internal links sending visitors nowhere?

Structured data

Rich resultsIs my markup eligible for a rich result?Structured dataIs my product schema valid?Schema coverageDo my key pages carry structured data?Social previewHow does my page look when shared?Schema vs pageDoes markup match the page price?Schema builderNeed valid JSON-LD?

International

Hreflang sitemapDo page and sitemap hreflang agree?HreflangDo my language versions link back?Hreflang builderNeed the hreflang tags?Page DoctorWhy is this page not doing well?Redirect planMy site has dead links — what redirects do I write?Sitemap diffIs anything missing from my sitemap?Robots simulatorWhat does my robots.txt actually block?Can Googlebot?Can Googlebot fetch this URL?
Every error, explainedGuides
Pricing Learn Error guides Run free audit

+1 free check

Welcome to Shipwork

Sign in free and your next check this month is on us.

Continue with GoogleContinue with email

We email you a 6-digit code. No password.

No card needed. Reports and watches follow you to any device.

All errorsMissing field 'hasMerchantReturnPolicy'

Why Search Console reports hasMerchantReturnPolicy missing, and what to do

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.

priceavailabilityhasMerchantReturnPolicy
The Offer is complete except the return policy.

How to fix it

  1. 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.
  2. To fix it on the page, add hasMerchantReturnPolicy to the Offer with applicableCountry, returnPolicyCategory, merchantReturnDays and returnMethod.
  3. Put it on the Offer, not the Product. Placed on Product it is ignored.
  4. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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

  1. Review the actual return policy page and confirm its terms, countries, day count, and return shipping responsibility. Record the exact terms before editing schema.
  2. 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.
  3. 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.
  4. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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

  1. 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.
  2. 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.
  3. Check the Merchant listings report and relevant warnings after Google recrawls. A warning can remain until updated page data is fetched.
  4. Run the structured data check on representative products and inspect the exact Product and Offer entities it finds.
  5. 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?
Google lists return policy information as a supported merchant listing property and may report it as a recommendation or warning, depending on the report and eligibility context. It is not a substitute for a real public policy. Check the current Search Console report details and Google's merchant listing documentation for the affected feature.
Where should hasMerchantReturnPolicy go in JSON-LD?
Google documents MerchantReturnPolicy in relation to product offers, and recommends an organization-level policy when one standard policy applies broadly. Product-level return policy can override the standard policy. Follow the current Google examples for the level you use and validate the detected markup.
Can I set return policies in Merchant Center instead of schema?
Yes. Google documents Merchant Center shipping and return settings as an alternative way to provide those details. Keep the settings consistent with the storefront policy and product data, especially when a policy varies by country or product group. Check account Diagnostics for processing status.
What fields do I need for a 30-day return policy?
A finite return window needs the supported finite-window category, the number of days, and the applicable country. Add return method and fee details when relevant and supported. Use Google's current property definitions and state only terms that match the policy customers can read and use.
Why does Search Console still show a missing return policy after I added it?
The object may be attached to the wrong entity, omitted from the specific URL Google crawled, or overridden by another schema emitter. Search Console may also show an older crawl. Inspect the live Offer and report details, remove conflicts, and allow Google to recrawl the page.
Find out if this is happening to you

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