SEO and structured data
Last checked against Splash 1.0.0 / 2026-09-09
This is the whole SEO and structured data group: the structured data Splash publishes about your store, your products and your terms, and the shipping and return figures it prints on a product page. Both come from the same fields, so what a shopper reads and what a search engine is told can never disagree.
Everything on this page lives in one place. In the theme editor, open Theme settings, then SEO and structured data. The panel runs top to bottom through What to publish, Organization, Business address, Social profiles, Contact details, Shipping details, Returns, Per-product overrides, Product identifiers and Ratings. This page follows that order.
Note The theme ships with shipping details and return terms switched on, carrying the demo store's figures: free shipping over $500, a flat $49 rate, 1 to 2 business days handling, 3 to 7 business days delivery, ships to US and CA, 30-day returns. Those publish on your product pages and to search engines until you edit them. See Replace the demo content.
Which fields change the page and which do not#
Two groups in this panel print on your storefront. The rest are invisible to shoppers and only describe your store to search engines.
Shipping details and Returns
Print a Shipping and returns block on every product page, and go to search engines as well. Both jobs from the same fields.
Social profiles
Draw the icon row in the footer, and tell search engines which profiles belong to your store.
Ratings
Print the rating line on a product page when the Rating block is in the product template, and go to search engines.
Per-product overrides
Replace the store's shipping and return terms on one product at a time. Whatever they change, they change on the page and in search results together.
What to publish, Organization, Business address, Contact details, Product identifiers
Never appear on a page. They exist only in the structured data that search engines read.
Every field in this panel is optional. An empty setting produces no property at all rather than an empty one, so an incomplete description of your store is an unfilled field, not a fault.
What to publish#
Six checkboxes decide which kinds of structured data the theme writes at all. Every one is on, and on a normal store every one should stay on.
| Switch | What it publishes, and where |
|---|---|
Business details | Your name, logo, address and social profiles, on every page. |
Site name in search results | Your store's name, so a result is headed by it rather than by your domain. |
Product details | Price, availability, shipping and returns, on product pages. |
Breadcrumb trail | The path above the title on product, collection, blog and page templates. |
Collection product lists | The products on the current page of a collection, in the order shown. |
Blog articles | Headline, author, images and dates, on articles. |
There is one reason to turn any of them off: an app on your store already publishes the same kind. Two descriptions of one page is worse than one, and search engines may act on either. If you have an SEO or a reviews app writing structured data, switch off the matching type here rather than leaving both running.
Note Turning off Product details removes your products from product rich results entirely: no price, no availability, no return policy, no stars. It is the one switch with a visible cost in search. Nothing on your storefront changes either way, so the loss is invisible until you look at your search listings.
The switches are self-consistent. Turn off Business details and the product markup drops its seller, the site markup drops its publisher, and articles drop theirs, rather than pointing at a description of your business that is no longer on the page.
Organization#
These fields name your store to search engines. They are emitted on every page.
Organization name. Leave it blank and your Shopify store name is used. Fill it in only if your legal or trading name differs from the store name.Organization logo. Square, 112 x 112 pixels minimum. Leave it blank and the theme uses your Brand logo from Theme settings. With both empty, no logo is claimed at all.
One more field decides what kind of thing your store is:
Business type. Online only, Local business, or Store customers can visit. Online only is the default and is right for most stores. The two local choices are for a business customers come to in person, and both need the address below.
This switch used to publish a second thing as well: a description of your search page, which Google turned into a search box underneath your result. Google retired that feature in November 2024 and no other engine is known to have read it, so the theme stopped publishing it in August 2026. Nothing was lost that any search engine still uses, and the site name half is still supported and still worth having on.
Business address#
Seven fields, used only when Business type is one of the two local choices. On an online-only store they are ignored, filled in or not.
Street address,City,State or province,Postal code,Country. Country is a two-letter code, for exampleUS.Opening hours. One line per set of days, for exampleMo-Fr 09:00-17:00. Separate several with a comma:Mo-Fr 09:00-17:00, Sa 10:00-14:00.Price range. A rough guide, from$to$$$$, or Do not publish. Some search results show it.
Note The address is published only when street, city and country are all three filled in. A partial address is a claim to a place that cannot be found, which is worse than claiming no place at all.
What happens when the address is incomplete#
Choosing a local business type and leaving one of those three fields empty does not publish a local business without an address. It publishes a plain organization instead, exactly as if you had chosen Online only, and the opening hours and price range go with it.
That is deliberate. An address is one of only two things search engines require of a local business, so a local business with no address could never appear as one; it would just report an error against your page. Saying less and saying it correctly beats saying more and being rejected.
The practical consequence: if you expected a map listing and are not getting one, the first thing to check is that all three of street, city and country are filled in.
Social profiles#
Seven fields, in a fixed order: Instagram URL, Facebook URL, X URL, YouTube URL, TikTok URL, LinkedIn URL, Pinterest URL.
Each one you fill in adds its icon to the footer, in that order. An empty field is left out. The order is fixed and cannot be changed from the theme editor.
These are plain text fields, not URL pickers, which makes two things possible:
- A bare domain works. Type
instagram.com/yourstoreand it resolves tohttps://instagram.com/yourstore. - Type
#to see an icon in the footer before the account exists. The theme deliberately withholds a#from search engines, because a placeholder is a fair link on a page and an unfair claim to own a profile.
Anything that is not a web address or a path inside your own store becomes an inert link that goes nowhere. If an icon in your footer does not open the profile you expected, check the field for a typo in the domain.
Contact details#
This block adds a support contact to the structured data on every page. Nothing here shows on your storefront.
Note Show contact details does nothing on its own. A Phone number is also required. Fill in only the email address, languages or areas served and the whole contact block is skipped with no warning.
Phone number. Include the country code, for example+1 555 555 5555.Contact type. Customer support, Sales, Technical support or Billing support. Customer support is the default.Email, optional.Languages, optional. Comma-separated, for exampleEnglish, French.Areas served, optional. Comma-separated country codes, for exampleUS, CA, GB.
Shipping details#
Switch on Show shipping details and fill in what you can state for the whole store. Leave the switch off if your rates vary too much to summarize in a few lines.
Here is what each field prints in the Shipping column of the product page block.
| Setting | What appears on the product page |
|---|---|
Free shipping over | Free shipping over $500.00, formatted in your store's currency. |
Flat shipping rate | Flat rate $49.00. |
Handling time, fastest and slowest | Ships in 1 to 2 business days. When both are 1, it reads Ships within 1 business day. |
Delivery time, fastest and slowest | Delivered in 3 to 7 business days. When both are 1, Delivered in 1 business day. |
Ships to | Ships to US, CA. Codes print in capitals whatever case you type, and stray spaces or empty entries are dropped from both the line and the markup. |
Handling time is the business days between the order and the shipment. Delivery time is the business days the carrier then takes.
Four things that go wrong here#
- Money must be a bare number. Type
500, not$500. The theme adds the symbol and the decimals for you. A value that is not a plain number is treated as unset: the line does not print and no rate reaches search engines, rather than either of them stating$0.00, which would promise free shipping. Type0deliberately and it is kept, because that is a real offer. - A time line only appears when the slowest figure is above zero. Leave
Handling time, slowestblank or at 0 and no handling line prints, whatever the fastest figure says. - Leaving the fastest figure blank prints a zero. A blank fastest with a slowest of 7 reads "Delivered in 0 to 7 business days". Set both.
Ships toon its own produces nothing. The Shipping column needs at least one of a flat rate, a free-shipping threshold, a per-product note, or a handling or delivery slowest above zero. Fill in only the country codes and the whole Shipping column is left out.
What search engines additionally need#
The visible block shows whatever you fill in. The structured data is stricter, because search engines will not accept a partial shipping statement.
Shipping reaches search results only when both of these are set:
Flat shipping rate. A free-shipping threshold on its own is not enough. Sending a rate of zero would claim every order ships free, which is a stronger promise than the one on your page, so the theme sends nothing instead.Ships to, holding real country codes.
Limit Entering WORLD in Ships to prints "Ships worldwide" on the page and sends no shipping information to search engines at all. There is no way to express "everywhere" in the format they require. If search visibility matters, list the country codes instead.
A single product can be given its own rate, its own delivery note and its own day counts. See Per-product overrides below.
Returns#
Switch on Show return policy, then set the terms.
Returns accepted
Within a set number of days, Any time, or Not accepted. "Not accepted" prints "Returns not accepted" and suppresses every line below, because there is nothing left for them to describe.
Return window
Days after delivery. Prints as "30-day returns". Used only with Within a set number of days. At 0 there is no window to state, so the whole Returns list is withheld from the page and from search engines together.
Refund type
Full refund, Store credit or Exchange only. There is no "partial refund" choice, because search engines have no such term. A refund less a fee is a full refund with a restocking fee beside it, which is the next two fields.
Return shipping paid by
Four choices. Store prints "Return shipping paid by us". Customer prints "Return shipping paid by you". Under an in-store or kiosk return method those two read "Free to return" and "Return costs paid by you" instead, since a counter return has no postage. Customer, return shipping only and Customer, restocking fee only each name an amount, which goes in the field below it.
Return shipping fee
A bare number. What the customer pays to send a return back. Prints as "Return shipping $12.50, paid by you".
Restocking fee and Restocking fee measured in
A bare number, then whether it is a percentage of the item price or a fixed amount. Prints as "Restocking fee 15%" or "Restocking fee $25.00".
Return method
By mail, In store or At a kiosk. Prints "Return by mail", "Return in store" or "Return at a kiosk".
Return label
Customer downloads and prints it, Included in the box, or Customer buys their own. Only asked and only printed when the method is by mail, because a counter return has no label.
Damaged items return free
Publishes a separate rule saying faulty goods come back free whatever the fee above says, and prints "Damaged items always return free".
Show money-back guarantee
Adds a "Money-back guarantee" line to the page. See the note below on what search engines are told.
Customer countries
The countries your customers are in, as two-letter codes separated by commas, for example US, CA. Up to 50. Prints nothing on the page. Leave it blank and your store's own country is used.
Country returns are sent to
Optional. Only needed when returns go somewhere other than the customer's own country. Prints nothing on the page.
Return policy page
Your full policy. Adds a "Read the full return policy" link to the block, and gives search engines somewhere to send a shopper. It has to be a page: a web address or a path inside your own store. An email or phone link is not published, because a policy has to be readable.
Note Customer countries was called Return destination in earlier builds, which described the wrong country; the value did not change. Search engines require it, and leaving it blank used to withhold the whole policy silently. It now falls back to the country your store is registered in, so the policy still publishes. Fill it in if you sell into a different market from the one you are registered in.
With Returns accepted set to Within a set number of days, the Return window must also be above zero before search engines are told anything.
A fee with no amount steps down#
Search engines require an amount alongside a named fee. Choose Customer, return shipping only or Customer, restocking fee only and leave the matching number blank, and the theme publishes the plain "customer pays" statement instead, which is true of all three and is accepted on its own.
The page does the same thing, so the line a shopper reads and the line a search engine reads never disagree. If you set a fee and the page still says "Return shipping paid by you" with no figure, the amount field is empty.
Money-back guarantee is a page line, not a search claim#
Search engines have no term for a money-back guarantee, so the theme does not invent one. The checkbox adds the line to your product pages. What reaches search results is the same thing said in the vocabulary they do have: a full refund, and returns free, if that is what you have set above.
Because of that, the line appears only when those two settings actually back it: Refund type set to Full refund and Return shipping paid by set to Store. Tick the box beside an exchange-only policy or a charged return and no line prints, rather than a promise the terms underneath it contradict.
So the combination to set is Full refund and Store. That is a money-back guarantee stated in the only way a search engine can read it, and the only state in which the page will claim one.
Per-product overrides#
The settings above answer for your whole catalog, and a catalog rarely agrees with itself. A made-to-order item, a freight delivery and a clearance line all need different terms from the same shop. Six fields let one product answer for itself.
Each names a product metafield. Any product carrying a value uses it; a product with none keeps the store settings. Whatever changes, changes on the page and in search results together.
| Setting | Ships as | What a product carrying a value gets |
|---|---|---|
Final sale metafield | custom.final_sale | Set to true, the product is sold as final sale. Its page says "Final sale, returns not accepted", and every return term is withdrawn from its search listing. Your store policy is unaffected everywhere else. |
Return window metafield | custom.return_days | A different number of days, on the page and in search results. |
Shipping rate metafield | custom.shipping_rate | A different flat rate. This is the one for items that ship by freight. |
Per-product shipping note metafield | custom.shipping_note | A line of your own instead of the store's handling and delivery lines. Your note is the delivery promise on that product; the page keeps its rate and destinations. On its own it also withdraws that product from shipping structured data, because search engines require a delivery window alongside a rate and the theme will not state one the shopper is not being shown. Give the product its own day counts with the two fields below to get the markup back. |
Handling time metafield | custom.handling_days | Business days between the order and the shipment, for this product alone. Replaces the store figure on the page and in search results. |
Delivery time metafield | custom.transit_days | Business days the carrier takes, for this product alone. Same format as the handling time. |
Requires Create each metafield you want to use in Shopify admin under Settings, Custom data, Products. Namespace custom; key final_sale as true or false, return_days as an integer, shipping_rate as a decimal, shipping_note, handling_days and transit_days as single line text. Then fill them in on the products that need them.
Writing a day count#
The two timing fields take days, and each accepts either shape:
5is an exact figure. The page reads "Ships in 5 business days".10-14is a range. The page reads "Ships in 10 to 14 business days".
Two numbers the wrong way round are read the only way they can be: 14-10 is 10 to 14. Anything that is not a number, and anything that works out to zero days, is ignored, and the product keeps whatever it had before.
These two are the fields that let a freight product carry both a note and a search listing. A pool shell that says "Delivered by crane truck, 4 to 6 weeks from order" can set a handling time of 2-3 and a delivery time of 20-30, and search engines get the window while the shopper reads the sentence. Without them a note silently costs that product its shipping markup.
Four things to know:
- Blank, zero or a word leaves the store setting standing. An override has to be a real figure to replace a real figure. There is no way to say "free shipping on this one" by typing 0, because zero and unset are the same value once read.
- A wrong key and a product with no value look exactly alike. The store's terms keep showing and nothing reports an error. If an override is not taking, check the key first.
- A note stops the store's day counts, not the product's own. Set a note and leave the two timing fields empty and the product shows no day counts at all. Fill either one and it shows that one, under the note.
- Only these six. The other return fields are store-wide. Mirroring all of them per product would mean a metafield each and filling them on every product, for something almost no store uses. Final sale is the one where being wrong actually matters, and it is here.
Product identifiers#
None of these print on a page. They identify your products to search engines, which matters most when the same item is sold in more than one place.
Brand metafield. Namespace and key, for examplecustom.brand. Leave it blank and the theme uses the product's Vendor field, which is usually the right answer.GTIN metafield. Namespace and key. Leave it blank to use the variant barcode. On products with more than one variant, each variant's own barcode is always used and this field is not consulted. Either way the value has to look like a real GTIN, meaning 8, 12, 13 or 14 digits and nothing else. Shopify's barcode field accepts any text, so hyphenated codes, ASINs and internal part numbers are common in it, and search engines reject those rather than ignoring them. Anything that is not a plain GTIN is left out.MPN metafield. Namespace and key, for examplecustom.mpn.Price valid for. Days. Sets how long search engines treat the current price as good for. 30 days is typical, and is the shipped value. A blank or zero entry is treated as at least one day rather than putting the date in the past.
Requires Each of these metafields has to be created in Shopify admin under Settings, Custom data, Products before a product can carry a value. Naming a metafield that does not exist changes nothing and reports nothing.
Ratings#
Two fields, Rating value metafield and Rating count metafield. Both read what a review app has written into your product metafields, for example reviews.rating and reviews.rating_count.
- Both must be filled in. Fill in one and neither is used.
- The score must be on a 5-point scale. That is what the theme reports.
- Ratings cannot be typed by hand anywhere in this theme. There is no field for a rating you write yourself, and this is deliberate. See What Splash never invents.
The same two fields drive the visible rating line on a product page, which reads "Rated 4.8 out of 5 from 26 reviews". That line needs the Rating block in your product template. See Arrange the product page.
Two things that catch people out#
The terms you publish start as someone else's#
The theme's own defaults for Show shipping details and Show return policy are off. The settings file that ships with the theme turns both on and fills them with the demo store's figures. So from the first minute your store is live, every product page states free shipping over $500, a flat $49 rate, shipment in 1 to 2 business days, delivery in 3 to 7, shipping to US and CA, and 30-day returns with a full refund and return shipping paid by the store. Search engines are told the same.
Those are promises. Work through both groups before your store opens, or switch them off until you are ready.
The block can be missing from the page while the data still publishes#
Turning the two switches on is half of it. The visible terms appear on a product page only when the product template still contains the Shipping and returns block. The shipped product template has it. Remove it, or rebuild the template without it, and your terms keep going to search engines with nothing on the page for a shopper to read.
To check: open a product in the theme editor, select the Product section, and look for Shipping and returns in the block list. Add it back if it is gone. With both switches off, the theme editor shows a hint in its place pointing you back to Theme settings, so an empty-looking block in the editor means unfilled settings rather than a missing block.
Two details about the block itself. Its Caption field is hidden whenever Product information display is set to Tabs, because the tab label already names the band. And a quote-only product still shows the block, but publishes no product structured data at all, so its terms reach search engines from that page not at all. See Quote-only products.
Checking your work#
- Open a product page on your live store and read the Shipping and returns block. Every line there is a promise you are making.
- If a line is missing, check the setting behind it against the tables above. A missing handling line means the slowest figure is zero. A
$0.00means a currency symbol got typed into an amount. - Run the page through Google's Rich Results Test. If shipping is absent, check that you have both a flat rate and real country codes. If the return policy is absent, check
Customer countries. If a local business listing is absent, check that street, city and country are all filled in. - For a second opinion that reads the vocabulary rather than Google's rules, paste the page URL into the Schema Markup Validator. It reports what types and properties it found, which is the fastest way to confirm a switch in What to publish is doing what you expect.
Full definitions, ids and defaults for every setting on this page are in the Theme settings reference. If something is behaving in a way this page does not explain, contact support.
Something wrong here If a step does not match what you see, say so and it gets fixed. Documentation goes stale, which is why the line under the title carries a date.