(03) 8832 8005

Open a product page on your store, right click, and hit “View page source”. Search for application/ld+json. What you find in the next thirty seconds explains more about your organic performance than any keyword report you have ever paid for.

Most Aussie Shopify stores find one of two things. Either a thin block of code with a product name, a price and not much else. Or two competing blocks that contradict each other, because the theme wrote one and a review app wrote another. Both outcomes cost you the same thing: Google reads your product page as a guess instead of a fact.

That matters more in 2026 than it did in 2023. Rich results with visible prices, ratings and shipping costs consistently pull 20 to 30% higher click-through than plain blue links at the same position, and listings with visible star ratings sit at the top of that range. On top of that, research into AI answer engines found that 71% of pages cited by ChatGPT and 65% of pages cited by Google’s AI Mode contained structured data. The machines reading your store now outnumber the humans, and they all read the same file.

Here are the seven fixes that take a default Shopify product page from “technically valid” to “fully eligible”, in the order I would do them.

What Shopify Actually Gives You Out Of The Box

Start with the honest baseline, because most founders assume Shopify handles this. It partly does.

Dawn and almost every theme built on it generate product schema with a single line of Liquid: {{ product | structured_data }}. That filter is documented on shopify.dev, and the output is exactly this set of fields: @context, @id, @type, brand, category, description, image, name, url, and an offers object containing availability, price, priceCurrency and url.

That is nine or ten fields. It is enough to be classified as a valid product snippet. It is not enough to be a complete merchant listing, which is the class of markup that turns on the price, rating, shipping and returns annotations in Search and feeds Google’s Shopping surfaces.

Missing from the default output: sku, gtin13, mpn, aggregateRating, review, shippingDetails, hasMerchantReturnPolicy, itemCondition and priceValidUntil. Nine gaps, every one of which Google either requires or rewards.

Google Rich Results Test showing a Shopify product page with missing schema fields
A typical Aussie Shopify product page in the Rich Results Test: valid, but four fields short of eligible for the enhancements that actually change your click-through rate.

Fix 1: Delete Your Duplicate Product Blocks

This is the most common fault and the easiest to miss, because both blocks look correct on their own.

I pulled the source of a Melbourne skincare brand’s best-selling product page while writing this. Frank Body’s coffee scrub page carries two separate Product blocks. One is the theme’s output. The second comes from a reviews app and carries an aggregateRating the first one does not have. Neither block includes shipping or returns markup.

When Google finds two Product entities on one page, it has to choose. Sometimes it merges them. Sometimes it picks the wrong one and drops your star rating. Sometimes it flags the page as having a duplicate item and you lose the enhancement entirely. You do not get to control which.

How to fix it:

If you run more than four apps that touch the product page, assume you have this problem until you have proven you do not.

Fix 2: Add The Identifiers Google Uses To Recognise Your Product

Google does not just want to know you sell a navy merino crew neck. It wants to know that your navy merino crew neck is the same physical item that three other retailers are listing, so it can build a comparison. That matching runs on identifiers.

Three fields do the work. sku is your internal code. gtin13 is the barcode, which for most Australian products is an EAN or a UPC you already hold in Shopify’s inventory fields. mpn is the manufacturer part number, which matters if you are a stockist rather than the brand owner.

Bondi Sands does this properly. Their product markup includes sku, mpn, brand, itemCondition and a named seller. That is well beyond Shopify’s default and it is why their listings behave predictably in Shopping.

The practical version for a Shopify store: your barcode already lives on the variant. Pull it into your schema snippet with {{ product.selected_or_first_available_variant.barcode }} and map it to gtin13 only when the value is 13 digits. A malformed GTIN is worse than a missing one, because it triggers a hard disapproval in Merchant Centre rather than a soft warning.

If you are a private-label brand with no barcodes at all, set mpn to your own SKU and add "identifier_exists": false to your Merchant Centre feed. Do not invent numbers.

Fix 3: Publish Ratings You Can Actually Defend

Star ratings are the single highest-return enhancement available to you. Listings that show them see click-through rates 15 to 35% above identical listings without them. On a collection of 40 products doing 12,000 organic sessions a month, that is not a rounding error.

Two rules and one warning.

If your review volume is thin, the fix is upstream, not in the code. Get your post-purchase review request timing right first, then come back and mark it up. We covered the sequencing of that in the Shopify reviews playbook.

Fix 4: Put Your Shipping Costs In The Markup

This one is uniquely valuable for Australian brands and almost nobody does it.

Shipping is the number one reason Australian shoppers abandon a cart. If a competitor’s listing shows “Free delivery” in the search result and yours shows nothing, you lose the click before your product page ever loads. The shippingDetails property fixes that by letting Google display your delivery cost and speed directly in the result.

The structure needs an OfferShippingDetails object containing a shippingRate with a value and currency, and a shippingDestination defining the region. For a typical Aussie DTC brand that means one entry for AU with your standard rate, and a second entry with a rate of 0 for orders above your free shipping threshold.

Add deliveryTime if you can stand behind it. Splitting handlingTime (how long until you dispatch) from transitTime (how long the courier takes) is how you show “3 to 5 business days” honestly. If you cannot hit that window during peak, do not publish it. Markup that contradicts reality generates the exact complaint emails you are trying to avoid.

Search Console Merchant listings report showing valid, warning and invalid product pages
The Merchant listings report is the fastest read on your schema health. Warnings across every product page almost always mean one missing field in one theme snippet.

Fix 5: Mark Up Your Returns Policy Once, At The Organisation Level

Google added support for return policy markup on merchant listings and then expanded it again in late 2025. Most stores still have not touched it.

The efficient move is to define hasMerchantReturnPolicy once, nested under your Organization markup, rather than repeating it on every product. One block in theme.liquid covers your whole catalogue. You then override it at the Offer level only for the handful of products where the policy differs, such as final-sale or personalised items.

What to include:

Two notes for Australian sellers. Your markup describes your voluntary change-of-mind policy. It does not and cannot limit your obligations under Australian Consumer Law for faulty goods, so make sure the policy page it points to says so. And if you are quietly offering 30 days in your markup while your policy page says 14, you have just created a written promise you will be held to.

Fix 6: Make Your Schema And Your Merchant Centre Feed Agree

Here is the failure mode that catches profitable stores rather than sloppy ones.

Google Merchant Centre now cross-references the Product schema on your landing page against the data in your feed. When they disagree on price, availability or currency, the product gets disapproved for a landing page mismatch. Your Shopping ads stop serving and the notification lands in an account most founders check monthly.

The usual culprits are boringly predictable:

Fix the currency issue in the snippet by outputting {{ cart.currency.iso_code }} rather than a hardcoded string, and align your feed sync to run before, not after, your scheduled price changes. If Shopping is a meaningful channel for you, the mechanics of feed hygiene are worth a deeper look in the Google Shopping feed playbook.

Fix 7: Mark Up The Pages That Are Not Product Pages

Product schema gets all the attention. The other four types take an hour combined and they are what make your store legible as a business rather than a pile of URLs.

Do the Organization block first. It is one snippet, it applies sitewide, and it carries the returns policy from Fix 5.

Field by field product schema coverage audit for a Shopify store
Eight missing fields across 1,459 product pages sounds like a project. It is one theme snippet, edited once.

The 20 Minute Audit You Can Run This Morning

You do not need a paid tool to find out where you stand. Two free ones from Google will tell you everything, and you can be through this before your second coffee.

Step 1. The single-page deep read (5 minutes). Open the Rich Results Test at search.google.com/test/rich-results. Paste the URL of your best-selling product. Switch the crawl agent to smartphone, because that is what Google indexes with. Read the left panel for detected types and the right panel for the field list. Write down every warning.

Step 2. The duplicate check (3 minutes). On that same product page, view source and count how many application/ld+json blocks contain "@type":"Product". The answer must be one. If it is two, that is your first job.

Step 3. The whole-catalogue read (7 minutes). In Search Console, open Shopping, then Merchant listings. This report covers every product URL Google has crawled, not just the one you tested. Sort the issues table by affected pages. A warning appearing on 1,400 pages is one missing field in one snippet, which is good news.

Step 4. The feed cross-check (5 minutes). In Merchant Centre, filter products to Disapproved and look for “Mismatched value (page crawl)”. Every entry there is a schema and feed disagreement from Fix 6.

Write the output into four buckets: duplicates, missing identifiers, missing enhancements, feed mismatches. Then fix them in that order, because a duplicate block will make every other fix look like it failed.

One process note. After you edit the snippet, use the URL Inspection tool to request indexing on three or four products rather than waiting. Enhancement reports typically take one to three weeks to reflect a fix across a full catalogue, so validate on a handful first and confirm the change worked before you assume it did.

Why This Compounds: One Data Layer, Four Front Doors

Here is the part that makes structured data worth a morning rather than a maybe.

You are not doing this for one channel. The same JSON-LD block feeds four separate front doors to your store, and they are increasingly the same door.

That last shift is the one worth sitting with. For twenty years, the job was to persuade a person. The persuasion still matters at the point of decision, but qualifying for the shortlist is now a data problem. An agent will not read your brand story or notice your photography. It reads fields.

Which means the cheapest competitive advantage available to an Aussie store right now is being the one in your category with complete markup, because most of your competitors have nine fields and a duplicate block. If you want the wider picture of how this plays out, we have written about it in the agentic commerce playbook and the answer engine optimisation playbook.

Your Structured Data Checklist

Print this, work down it, and tick as you go. Every line is a yes or no.

Ten lines. If you can tick all ten, you are ahead of the overwhelming majority of Australian Shopify stores, including some doing eight figures.

None of this is glamorous work. It is a snippet in a theme file that no customer will ever see. But it is the difference between a search result that shows a price, a star rating, free delivery and a 60 day return window, and one that shows a title and a URL. Same product. Same position. Very different click-through.

Go and check yours. It takes twenty minutes and I would be surprised if you came back clean.

Inside eCommerce Circle, technical foundations like structured data are one of the core pillars we work through with every member, because they compound quietly while everyone else is chasing the next ad angle. If you want a second opinion on yours, let’s talk.

The Shopify Structured Data Playbook: 7 Schema Fixes That Win Rich Results
Team eCommerce Circle

Written by

Team eCommerce Circle

Helping Shopify brand owners scale smarter through the eCommerce Circle coaching community.

Leave a Reply

Your email address will not be published. Required fields are marked *

Thank You

Your application for the eCommerce Circle was successfully submitted.
We’ll get back to you through your provided details shortly.

Thank You

Your enrolment was successfully submitted, and we’ve added you to the waitlist for your preferred cohort.

Not a Circle Member Yet?
Only members can join cohorts!
Join here.