BlogFindings
Return policy structured data: 6 of 1,072 home pages declared it, and none of 201 policy pages did
Lantad asked all 1,419 hostnames in this repository's two committed corpus seed files for robots.txt on 10 October 2026, read every permitted home page with no JavaScript executed, then followed each page's own link to a returns, refunds, shipping or delivery page and read that too. 6 of the 1,072 readable home pages declared a MerchantReturnPolicy node, 129 linked a policy page, and across the 201 policy pages that answered, not one declared a return or shipping policy in its markup.
So this run counted both halves on the same sites. Every hostname in the corpus committed to this repository was asked for its robots.txt, every permitted home page was read with no JavaScript executed, and where that home page linked to its own returns, refunds, shipping or delivery page, that page was read as well. 6 of the 1,072 readable home pages declared a return policy. 129 sites linked a policy page, 201 of those pages answered, and the count of return or shipping policies declared on them was zero. The terms are published. They are published as sentences.
In short
- Return policy structured data states a return window as data rather than as styled text, and of the 1,072 corpus home pages Lantad read on 10 October 2026, 6 declared a MerchantReturnPolicy node while 500 declared an organisation node of some kind.
- The 201 returns, refunds, shipping and delivery pages Lantad read on 10 October 2026 carried no MerchantReturnPolicy, no merchantReturnLink and no shippingDetails between them, while 105 of the 201 carried JSON-LD of another kind, most often an Organization node on 67 pages.
- Google's merchant return policy documentation, last updated 8 September 2026, accepts one property as a complete required set: merchantReturnLink, a URL pointing at the policy page, which 4 of the 1,072 home pages declared and no policy page did.
- 49 of the 125 returns pages outside news hosts stated a number of days near the words return, refund or exchange, 30 days being the most common figure on 23 of them, so the term exists in prose on about two fifths of the pages and in data on none.
- Shipping was the emptier half: no page in this run declared shippingDetails or an OfferShippingDetails node, one home page declared shipping another way using ShippingService and ShippingConditions, and 2 returns pages served a crawler zero words because the returns portal runs as an app.
Flow: 1,419 hostnames asked (robots and HTTP) to 1,072 home pages read; 1,072 home pages read (JSON-LD walk) to 6 declared a return policy; 1,072 home pages read (own link) to 129 linked a policy page; 129 linked a policy page (200 and HTML) to 201 policy pages read; 201 policy pages read (JSON-LD walk) to 0 declared one there.
The page a shopper clicks, read the way a crawler reads it
The corpus is a sampling frame of 1,419 hostnames committed to this repository in two seed files, 392 of them grouped by the platform a site is built on and 1,027 by industry. Most of those sites sell nothing, so the population for this measurement is defined by the sites themselves, using the same rule a run on pricing pages used earlier this month: a page counted only if the home page linked to it on its own host, and the link either sat on a path whose segments named returns, refunds, exchanges, shipping, delivery or postage, or carried anchor text that was one of those phrases and nothing else.
Each hostname was asked for its robots.txt first. 1,110 answered 200, 160 answered 403, 49 answered 404, 39 answered 503 and 43 failed in the client. 51 hostnames were treated as closing the site root to a plainly identified crawler: the 39 that answered 5xx, which this scanner reads as a disallow of everything, and 12 whose own parsed file refused the root, among them amsterdam.nl, helsinki.fi, sciencedirect.com, sap.com and instacart.com. Of the 1,368 home pages then requested, 1,072 answered 200 with an HTML content type and form the denominator for every home page figure below. 217 answered 403, 17 answered 503, and 34 failed to connect at all.
129 of those 1,072 home pages linked at least one policy page, giving 215 URLs: 147 matched on a returns or refunds path, 63 on a shipping or delivery path, and 5 on anchor text alone. 201 answered 200 with HTML, on 120 hosts. One was disallowed to this crawler by the site's own robots.txt, magicmind.com on /policies/refund-policy, which is also the single URL in the set that the same file closes to Googlebot. 7 answered 403, among them williams-sonoma.com twice and zalando.de, and cloudsmith.com answered 429, bangkokpost.com 451 and flipkart.com 529, which is the ordinary background rate of sites that refuse a crawler their robots.txt allows. The method notes describe how the extractor decides what counts as text.
GET /robots.txt then GET / then GET the linked policy page
- GET /robots.txt as LantadBot/1.0 1,419 asked
- evaluateRobots for LantadBot at / 51 refused
- GET / and keep 200 with HTML 1,072
- own-host link naming returns or shipping 129 sites, 215 URLs
- robots.txt disallowed that path 1
- policy page answered 200 with HTML 201
- declared a return or shipping policy 0
What does return policy structured data require?
Less than most people assume, which is what makes the counts below worth publishing. Google's merchant return policy documentation, carrying Last updated 2026-09-08 UTC, describes a standard policy for a business as a MerchantReturnPolicy nested under the Organization type through the hasMerchantReturnPolicy property, and says Google Search can use it to display return policies alongside products and in knowledge panels. The schema.org type itself is defined as providing information about product return policies associated with an Organization, Product or Offer, so the vocabulary has carried this for years and the question is only whether anybody fills it in.
The required set comes in two options, and the second one is a single property. Option A asks for applicableCountry, a two letter country code, together with returnPolicyCategory, which takes one of three values: a finite return window, an unlimited window, or returns not permitted. Where the category is the finite window, merchantReturnDays becomes required, defined as either a fixed return date or the number of days from delivery that a product can be returned. Option B is merchantReturnLink on its own, described as the URL of a web page that describes the return policy to customers, and the documentation allows that page to belong to a third party handling returns. A site that wanted to satisfy the requirement at the lowest possible cost could do it with one URL it already has in its footer.
Shipping sits in a different document. Google's merchant listing documentation, also last updated 8 September 2026, states that merchant listings can highlight more specific data about a product such as its price, availability, and shipping and return information, and its worked examples attach shipping to an Offer through a shippingDetails property holding an OfferShippingDetails node, a type schema.org defines as representing information about shipping destinations. Those examples live on product pages rather than policy pages, which matters for how this run reads its own result and is the reason the shipping count below is reported separately rather than folded into one number.
| Property | Status | Home pages of 1,072 |
|---|---|---|
| applicableCountry with returnPolicyCategory | Required, option A | 6 |
| merchantReturnLink | Required, option B, on its own | 4 |
| merchantReturnDays | Required where the window is finite | 6 |
| returnFees | Recommended | 6 |
| shippingDetails with OfferShippingDetails | Merchant listing examples | 0 |
| deliveryTime | Merchant listing examples | 0 |
6 of 1,072 home pages declared a return policy
The test walked every JSON-LD script body the extractor found on each home page, flattened each document the way the scanner's schema sub-score flattens it, descending arrays, @graph and ordinary property values, and asked whether any node carried hasMerchantReturnPolicy or a type of MerchantReturnPolicy. 6 pages did, and all 6 used the finite window category: cuure.com declared 14 days, trendyol.com 15, warbyparker.com and westwing.de 30 each, verkkokauppa.com 32 and bergfreunde.de 100. 4 of the 6 also carried merchantReturnLink, so they satisfy both required options at once rather than choosing between them. On fees, 5 declared free returns and cuure.com declared that a return shipping fee applies.
Five of the six sit in the ecommerce stratum and one, cuure.com, is a no code build. That concentration is the expected shape and it is worth stating as a rate rather than a count: of the 97 readable home pages across the ecommerce and Shopify strata, 5 declared a return policy, and of the 975 home pages outside those two strata, 1 did. For scale, 621 of the 1,072 home pages carried at least one JSON-LD block and 500 declared an organisation node of some kind, which is the node the return policy is supposed to hang from. The machinery was already on five hundred pages.
Two further details sharpen what the six are doing. bergfreunde.de is the only site in the corpus that declared anything at all about shipping, and it did not use the property Google's product examples use: its home page carries ShippingService, ShippingConditions, ServicePeriod and DefinedRegion nodes with a shippingRate, attached to the organisation rather than to an Offer. westwing.de declared its policy on an OnlineStore node, which is the type Google's own example uses. Meanwhile 11 of the 1,072 home pages declared a Product node and 58 declared an Offer or AggregateOffer, so most of this corpus does not describe its catalogue on the home page either, which is consistent with what a run on 50 product pages that declared Product markup found when it looked at the pages that do, and with 1,112 Shopify products arriving as open JSON through a route that has nothing to do with schema at all.
| Host | Stratum | merchantReturnDays | merchantReturnLink |
|---|---|---|---|
| cuure.com | bubble-nocode | 14 | absent |
| trendyol.com | ecommerce | 15 | present |
| warbyparker.com | ecommerce | 30 | present |
| westwing.de | ecommerce | 30 | present |
| verkkokauppa.com | ecommerce | 32 | present |
| bergfreunde.de | ecommerce | 100 | absent |
Zero of 201 returns and shipping pages carried any of it
The same walk ran against the 201 policy pages and returned nothing: no hasMerchantReturnPolicy, no MerchantReturnPolicy node, no merchantReturnLink, no shippingDetails and no deliveryTime on any of them. 19 of the 201 came from news and local media hosts where the matched path was an article whose slug happened to contain the word returns or shipping, such as a Sopris Sun piece about a band returning to Carbondale, so the honest denominator for policy pages is 182 on 106 hosts. The count is zero across both.
105 of the 201 carried at least one JSON-LD block, and that is the half of the finding that cannot be explained by sites not doing structured data. 67 declared an Organization, 46 a BreadcrumbList, 34 an ImageObject, 31 a WebPage, 24 a WebSite and 20 a SearchAction. 10 pages on 7 hosts declared an FAQPage on a returns or shipping page, among them gov.uk, mejuri.com, dishoom.com, nab.com.au and emiratesnbd.com, which is a site choosing to mark up the questions and answers on the page while leaving the policy the page exists for undeclared. That is the same pattern as 298 of 1,277 FAQ answers that were not on the page they were declared on and as 70 of 146 markup values that described something off the page: the markup is present, and it is describing the furniture.
These are not thin pages. The median policy page served 1,418 words to a crawler, the tenth percentile 440 and the ninetieth 2,997, so whatever else is true, the terms are being written at length. Exactly 2 served no words at all, coalatree.com and topodesigns.com, and both failed the same way: the link in the footer points at a hosted returns portal that builds itself in a browser, so a client that does not run scripts gets an empty shell where the policy should be. That is prose parity failing on the one page a shopper would check, and it is the smallest version of the problem 11 of 271 pages returning no words without JavaScript measured directly.
The return window exists, as a sentence
A policy that no machine can read is still a policy, so the next question is whether these pages actually state a window. Reading the delivered text of each page and looking for a number of days within ninety characters of the words return, refund or exchange, 49 of the 125 returns pages outside news hosts carried one. 30 days was the most common first figure, on 23 pages, followed by 14 days on 7, then 7 and 90 days on 4 each, 15 days on 3, and single pages at 1, 2, 5, 28 and 365 days. 11 pages carried a free returns phrase and 29 carried language excluding some goods, final sale and non returnable being the usual wording, among them gldn.com, masienda.com, nisolo.com and shopshorthand.com.
The other 76 returns pages stated no number this run could find, which is not the same as stating no policy. Some describe a process without a deadline, some point at an email address, and some carry the figure inside a script built accordion. What the two halves share is that an engine answering a shopper's question has to parse English either way, and the pattern that reads English is the weakest instrument in this measurement. Two results show exactly how weak. brooklinen.com/pages/returns really does offer a 365 day window, and an NBC News article about an aircraft carrier ending a 322 day deployment matched the same pattern on the same terms. A regex cannot tell those apart. A returnPolicyCategory of MerchantReturnFiniteReturnWindow with merchantReturnDays of 365 can be read wrong by nobody.
That is the whole argument for the markup, and it is worth being careful about how far it goes. Declaring a return policy does not make an assistant quote it, and nothing in this run tested whether it does. What the markup removes is the guessing step, in the same way that a declared price removes it: a run on 93 pricing pages found 17 that an AI client could read a price from, and the gap between a page that says a number and a page that declares one is the same gap in both subjects. The crawler view of any page shows which side of it a given policy falls on. For retailers the question has a second surface as well, since ChatGPT's product feed asks for twelve required fields directly rather than reading them off a page, so a merchant can be invisible on the page and present in the feed, or the reverse.
One cross-check was available. bergfreunde.de declares 100 days in its home page markup, and its own returns page, which this run reached and read, states a 100 day return window in prose and carries no structured data of its own. The declared figure and the written figure agree, and the markup sits on the home page while the page a shopper reads carries nothing. That is the arrangement Google's documentation describes, and on this evidence it is also the rarest one on the web.
| Window stated in prose | Pages | Named example |
|---|---|---|
| 30 days | 23 | mentraglass.com, gldn.com, kohapet.com |
| 14 days | 7 | nisolo.com, nowservingla.com, norebase.com |
| 7 days | 4 | spellbook.legal |
| 90 days | 4 | hiutdenim.co.uk |
| 15 days | 3 | masienda.com, shopshorthand.com |
| 365 days | 1 | brooklinen.com |
| Other single figures at 1, 2, 5 and 28 days | 7 | Counted once each |
What this run did not measure
No product page was read. Google's merchant listing examples attach shipping details and per product return overrides to an Offer on a product page, and this run never reached one, so the zero for shippingDetails is a statement about home pages and policy pages and nothing else. A retailer declaring OfferShippingDetails correctly on every product would be invisible to this measurement, and that is the most likely place for the markup to actually exist. The same caveat applies in reverse to the six: a business-wide policy on the home page is the shape Google's documentation describes for a standard policy, so counting it there is the right test for that claim, and it is not a test of per product policies.
The population is sites that link a policy page from the home page using a word this run recognised, so 129 is a floor on how many corpus sites publish returns or shipping terms rather than a census. A site whose footer says Help or Customer care was not counted, and a footer built by a script was not counted either, since no JavaScript was executed anywhere in this run. 19 of the 201 pages are news articles whose URL happened to match, which is disclosed above and left in the headline denominator rather than quietly removed. Every request went out as LantadBot/1.0 from one network location, so a site serving different bytes to Googlebot would not show it here; what the robots.txt figures do say is file based and per token, evaluated with the scanner's own matcher, and on that evidence 16 of the 215 policy URLs across 10 hosts are closed to GPTBot while 1 is closed to Googlebot, including amazon.com's returns homepage and zalando.de's returns pages. Running a file and a token through a parser is the only way to answer that question for a given site.
Nothing here measures whether return policy markup changes what an assistant says about returns, because no engine was asked anything in this run. That needs a controlled test against the engines, a different instrument from the one used here, and this blog has already published that structured data came third in a citation audit rather than first. The honest summary of the measurement is narrow and still worth having: on 201 of 201 pages, the page a shopper reaches by following the site's own returns or shipping link describes its terms to a reader and declares nothing to a machine. The guide to being cited by ChatGPT covers the retrieval side of that, and the glossary entry on generative engine optimization sets out where it sits among the rest.
-
Home page return policyMeasured The JSON-LD walk the scanner ships, run on 1,072 home pages that answered 200 with HTML. -
Policy page markupMeasured 201 returns, refunds, shipping and delivery pages reached through each site's own link. -
Return window in proseMeasured by text pattern A number of days within ninety characters of return, refund or exchange, which cannot distinguish a 365 day policy from a 322 day deployment. -
Product pagesNot measured Shipping details and per product return overrides belong on an Offer, and no product page was read. -
Script built policiesNot measured No JavaScript was executed, so a portal that renders in a browser counted as zero words. -
Effect on any answerNot measured No engine was asked anything. The finding is that the terms are not available as data.
Lantad
Published .
Ask an assistant whether a jacket can go back and it has to get the answer from somewhere. The returns page is the obvious place, and on most retail sites it is there, linked from the footer under a word a shopper recognises. Whether the terms on it exist in a form a machine can lift without reading paragraphs is a separate question, and return policy structured data is the part of structured data that answers it: a MerchantReturnPolicy node carrying a country, a category and a number of days, rather than a page of prose that says returns are accepted within 30 days of delivery provided the item is unworn.
Common questions
What is return policy structured data?
It is markup that states a merchant's return terms as data rather than as prose, normally a MerchantReturnPolicy node nested under an Organization through the hasMerchantReturnPolicy property. Google's merchant return policy documentation, last updated 8 September 2026, asks either for applicableCountry together with returnPolicyCategory, adding merchantReturnDays where the window is finite, or for merchantReturnLink on its own, which is a URL pointing at the policy page.
How many sites declare it?
Of the 1,072 corpus home pages Lantad read on 10 October 2026, 6 declared a MerchantReturnPolicy: cuure.com at 14 days, trendyol.com at 15, warbyparker.com and westwing.de at 30, verkkokauppa.com at 32 and bergfreunde.de at 100. Five of the six are in the ecommerce stratum, where the rate was 5 of 97 readable home pages.
Does the returns page itself need the markup?
Not for a business-wide policy, which Google's documentation describes as a MerchantReturnPolicy nested under the Organization type, and that node can sit on the home page as it does on all six sites found here. What this run establishes is that the returns page is not carrying it either: across 201 returns, refunds, shipping and delivery pages, zero declared a MerchantReturnPolicy, a merchantReturnLink or a shippingDetails property, while 105 of them declared JSON-LD of another kind.
Is a return window written in prose good enough?
It is readable by anything that parses English, which includes an AI client, and 49 of the 125 returns pages outside news hosts stated a number of days that way. The limit is precision: the text pattern used in this run matched a genuine 365 day window on brooklinen.com and a 322 day naval deployment in an NBC News article on identical terms. A declared returnPolicyCategory with merchantReturnDays carries no such ambiguity, and nothing in this run tested whether declaring it changes any engine's answer.
See what AI can read on your site
Run a free scan and get a graded report of exactly what AI crawlers can and cannot read, with ranked fixes.