← All guides
Setup guide

Add JSON-LD schema to Shopify

Help Google show your price, stock and star ratings, and give AI assistants the right facts about every product.

  • No app and no theme code
  • One FullSchema metafield, 3 minutes to set up
  • Then paste and save on each product
  • Collections, pages and the home page too

Free page check first, then $10 free to start. No card needed.

northpeak.com/products/trail-runner-gtx

Your page

Tap a detail to trace it

Northpeak

Trail Runner GTX

4.8 (214 reviews)

$129.00In stock

Reviews

★★★★★ “Dry feet after a full day of rain.”

Shipping & returns

Free shipping · 30-day returns

FullSchema reads it and writes the schema search engines and AI read.

In search results

northpeak.com › products › trail-runner-gtx

Trail Runner GTX

4.8 (214)·$129.00·In stock

Free delivery · 30-day returns

In AI answers

Waterproof trail shoes under $150?

The Trail Runner GTX from Northpeak is $129.00, rated 4.8 from 214 reviews, and in stock with free shipping.

northpeak.com
Product → Metafields → FullSchema
<!-- pasted into the product's FullSchema field -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Product",
"@id": "https://northpeak.com/products/trail-runner-gtx#product",
"name": "Trail Runner GTX",
"description": "Waterproof trail shoe with a 6 mm drop and a rock plate.",
"sku": "NP-TR-GTX-SLT",
"gtin13": "0840112203457",
"image": [
"https://northpeak.com/cdn/trail-runner-gtx.jpg"
],
"color": "Slate",
"brand": { "@type": "Brand", "name": "Northpeak" },
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "214"
},
"review": [
{
"@type": "Review",
"author": { "@type": "Person", "name": "Maya L." },
"reviewRating": { "@type": "Rating", "ratingValue": "5" },
"reviewBody": "Dry feet after a full day of rain."
}
],
"offers": {
"@type": "Offer",
"url": "https://northpeak.com/products/trail-runner-gtx",
"price": "129.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"seller": { "@id": "https://northpeak.com/#org" },
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": 0,
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {
"@type": "QuantitativeValue",
"minValue": 0,
"maxValue": 1,
"unitCode": "DAY"
},
"transitTime": {
"@type": "QuantitativeValue",
"minValue": 2,
"maxValue": 5,
"unitCode": "DAY"
}
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
},
{
"@type": "Organization",
"@id": "https://northpeak.com/#org",
"name": "Northpeak",
"url": "https://northpeak.com/",
"logo": "https://northpeak.com/cdn/logo.png",
"sameAs": ["https://www.instagram.com/northpeak"]
},
{
"@type": "WebPage",
"@id": "https://northpeak.com/products/trail-runner-gtx#webpage",
"url": "https://northpeak.com/products/trail-runner-gtx",
"name": "Trail Runner GTX | Northpeak",
"breadcrumb": {
"@id": "https://northpeak.com/products/trail-runner-gtx#breadcrumb"
},
"mainEntity": {
"@id": "https://northpeak.com/products/trail-runner-gtx#product"
}
},
{
"@type": "BreadcrumbList",
"@id": "https://northpeak.com/products/trail-runner-gtx#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://northpeak.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Trail running",
"item": "https://northpeak.com/collections/trail"
},
{
"@type": "ListItem",
"position": 3,
"name": "Trail Runner GTX"
}
]
}
]
}
</script>
✓ Valid JSON-LD121 lines90 fieldswritten from one page

Short answer

To add JSON-LD schema to Shopify without an app, create a multi-line text metafield for products (custom.fullschema) and add one Custom Liquid line to the product template that outputs it. Then paste each product's JSON-LD into that field and save. The setup takes about three minutes, once.

App required
No
One-time setup
~3 minutes
Each product after that
Paste and save

Updated

Step by step

How to add it

One-time setup

About three minutes, and you only do it once. After this, everything happens on the product's own page.

  1. 1

    Create a FullSchema field for products

    This adds an empty box to every product. Each product's schema will go in it.

    1. 1
      In your Shopify admin, open Settings, then Metafields and metaobjects.
    2. 2
      Click Products, then Add definition.
    3. 3
      Type FullSchema as the name. Shopify fills in the key as custom.fullschema on its own.
    4. 4
      Under Type, choose Multi-line text.
    5. 5
      Click Save.
    Shopify product metafield definition named FullSchema with the key custom.fullschema and the type Multi-line text
    Settings → Metafields and metaobjects → Products: the FullSchema field, created once for the whole store.
  2. 2

    Show the field on your product pages

    One line in the theme editor tells your product pages to include whatever is in that box.

    1. 1
      Go to Online Store → Themes and click Customize.
    2. 2
      In the menu at the top (it says Home page), choose Products → Default product.
    3. 3
      In the left panel, under Template, click Add section and pick Custom Liquid.
    4. 4
      Paste this line into the Liquid code box:
      {{ product.metafields.custom.fullschema.value }}
    5. 5
      Set Top padding and Bottom padding to 0. The section shows nothing on the page, so this keeps it from adding empty space.
    6. 6
      Click Save.
    Shopify theme editor with a Custom Liquid section on the Default product template, printing product.metafields.custom.fullschema.value with top and bottom padding set to 0
    One Custom Liquid line on the product template prints each product's own JSON-LD.

For each product

A few seconds each. This is all you do from now on.

  1. 3

    Generate the schema

    Takes a few seconds per product.

    1. 1
      Open the product on your live store and copy its address from the browser bar.
    2. 2
      Paste it into FullSchema and click Generate schema.
    3. 3
      On the result, keep HTML selected and click Copy. The code starts with <script type="application/ld+json">.
  2. 4

    Paste it on the product

    From now on, this is the only place you paste.

    1. 1
      Open Products and click the product.
    2. 2
      Scroll to the bottom of the page. Under Metafields, click the FullSchema field.
    3. 3
      Paste the code and click Save.
    JSON-LD schema script pasted into the FullSchema metafield at the bottom of a Shopify product in the admin
    For each product: paste its JSON-LD into the FullSchema field at the bottom and save.
  3. Step 5

    Check it's live

    One click, and it's free.

    1. 1
      Back in FullSchema, click Check it's live under the result.
    2. 2
      When it says It's live, you're done.
    3. 3
      Prefer to look yourself? Open the product page, right-click and choose View Page Source, then search for application/ld+json.
    Example search result for a Shopify product showing star rating, price, in stock, free delivery and 30-day returns, each matched to its Product schema field
    What a complete Product block makes a page eligible for. The search engine decides when to show it.

    That's it. Search engines and AI tools can now read this product's full details.

Home page, collections and other pages

The setup above covers products. Each of these takes one more short setup, done the same way. Skip the ones you don't need.

  1. 6

    Home page

    There's only one home page, so it doesn't need a field. The code goes straight into a section.

    1. 1
      Generate the schema for your store's home page address, keep HTML selected and click Copy.
    2. 2
      Go to Online Store → Themes and click Customize. The editor opens on the Home page.
    3. 3
      In the left panel, under Template, click Add section and pick Custom Liquid.
    4. 4
      Paste the code into the Liquid code box as is.
    5. 5
      Set Top padding and Bottom padding to 0, then click Save.
  2. 7

    Collections

    The same as products: a field and a line once, then a paste for each collection.

    1. 1
      In Settings → Metafields and metaobjects, click Collections, then Add definition. Name it FullSchema, choose Multi-line text and click Save.
    2. 2
      In the theme editor, choose Collections → Default collection from the menu at the top.
    3. 3
      Under Template, add a Custom Liquid section, paste this line, set both paddings to 0 and click Save:
      {{ collection.metafields.custom.fullschema.value }}
    4. 4
      For each collection: open it under Products → Collections, paste its code into the FullSchema field at the bottom and save.
  3. 8

    Pages and blog posts

    Pages like About or Contact, and blog posts, work just like collections.

    1. 1
      Add a FullSchema definition under Pages, and one under Blog posts if you need it, the same way as for collections.
    2. 2
      In the theme editor, open Pages → Default page and add a Custom Liquid section with this line:
      {{ page.metafields.custom.fullschema.value }}
    3. 3
      For posts, open Blog posts → Default blog post and use this line instead:
      {{ article.metafields.custom.fullschema.value }}
    4. 4
      Open each page or post in your admin, paste its code into the FullSchema field at the bottom and save.

Good to know

Paste the code exactly as Copy gives it with HTML selected, starting with <script type="application/ld+json">. If only the JSON part goes into the field, it shows up as text on the page.

Some products or collections use a different template? Open that template in the theme editor and add the same Custom Liquid line there too. It's one line per template, not per item.

Why a field, and not the code straight in the section? A section belongs to a template, so it shows on every page that uses it. The field keeps each product, collection or page to its own code. Only the home page, which is a single page, gets the code in the section itself.

Changed a price, a collection or the home page? Generate again and paste the new code over the old one, in the same field or section.

On your own

How to add schema to Shopify manually

Without FullSchema: what the same result takes by hand.

You can extend Shopify's schema yourself. It means writing Liquid, and here's what that involves.

1. See what your theme already writes
Shopify's own themes, Dawn included, output product markup through the structured_data Liquid filter. Open a product page, use View Page Source, and search for application/ld+json to see exactly which fields are there before you add anything.
2. Write the missing parts in Liquid
In a Custom Liquid section on the product template, write a JSON-LD block that pulls values from Liquid, like the product title, variant prices and availability, so they stay in sync. Test it on a duplicate of the theme first.
3. Validate a few real products
Test a product with variants, one that is sold out and one on sale in the Rich Results Test. Liquid output that looks right in the editor can still produce a broken price or an empty field on some products.
4. Watch theme updates
Theme editor sections carry over when you update the theme; code edited through Edit code doesn't. After every update, check a product page again.
From the forums

What people ask about Shopify schema, answered

Collected from Reddit, the Shopify community and SEO forums. Straight answers, including the cases where you don't need us.

Do I have to repeat the setup for every product?

No. The field and the Custom Liquid line are set up once for the whole store. After that, each product only needs its own code pasted into its FullSchema field.

Why is there empty space on the page after adding the Custom Liquid section?

The section adds top and bottom padding by default (Dawn uses 40 and 52 px), even though the schema itself shows nothing on the page. Set both padding values to 0 in the section's settings and the space is gone.

I don't see the FullSchema field on my product.

Scroll to the very bottom of the product page in the admin; metafields sit below everything else. If it's not there, check that the definition was created under Products (not Variants or Collections) in Settings → Metafields and metaobjects. Collections, pages and blog posts each need their own definition in the same place.

How do I add schema to my Shopify home page or collection pages?

The home page gets the code straight into a Custom Liquid section on the Home page template, since there's only one of it. Collections work like products: a FullSchema field under Collections, one Custom Liquid line on the collection template, then a paste on each collection. Both are covered step by step above.

My theme already adds Organization schema on the home page. Is mine a duplicate?

Many themes, Dawn included, write a short Organization and WebSite block on the home page. A second, fuller block for the same store isn't an error. Just make sure both say the same thing: if the store name or logo differ, fix them in the theme settings so the two blocks agree.

I can't find sections/main-product.liquid in my theme.

You don't need it. File names differ between themes and versions, and this setup doesn't touch theme files at all: the field lives on the product and the theme editor shows it.

Dawn already outputs product schema. Why do I get no star ratings or price in search results?

Dawn's built-in block covers name, image, offers and little else. Stars need aggregateRating and review in the same JSON-LD block, and most review apps inject theirs as Microdata or with JavaScript, which Google merges unreliably or not at all. A single server-rendered JSON-LD Product block with rating, price, availability and shipping fields is what actually earns the rich result.

Should I remove the theme's own Product block?

It's optional. Two blocks for the same product aren't an error, but one complete block is cleaner. If you want to, a developer can open the theme file that renders the product page in Edit code, find {{ product | structured_data }} and wrap that script in {% comment %} and {% endcomment %}.

Search Console says missing field shippingDetails or hasMerchantReturnPolicy. Is that serious?

Those are Merchant listing fields; without them the product can still show as a plain rich result, but not in Shopping surfaces. Theme blocks never include them because they don't know your policies. A generated block from FullSchema includes shipping and return details when the page states them; if the page doesn't, add the policy text to the page first, then regenerate.

My theme is an older one without sections on product pages. What then?

Vintage themes can't add sections to product pages. Put the same line, {{ product.metafields.custom.fullschema.value }}, just above </head> in layout/theme.liquid through Edit code. Each product still shows only its own code. Add the line again after a theme update.

Not sure what your Shopify pages have today? The site report is free.

Check every page free
About the setup

Shopify schema markup questions

Does Shopify already add schema markup automatically?

Most themes, Dawn included, add a basic Product block on product pages by default. It's usually missing ratings, reviews, and sometimes availability: exactly the fields that make a listing eligible for rich results.

Do I need an app for this?

No. Metafields and the theme editor's Custom Liquid section are built into every Shopify plan. An app only becomes worth it if you want schema regenerated automatically every time a product changes; that's a different, ongoing problem from a one-time fix.

Will a theme update remove the code?

No. The code is stored on each product, and the Custom Liquid line is part of the theme's settings, which carry over to the new version. If you switch to a different theme altogether, add the Custom Liquid lines there again, and the home page section with its code.

I added the code but Search Console still shows the old errors. Why?

Search Console can take several days to recrawl a page after a change; it's not reading your site live. Test the fix immediately with Google's Rich Results Test instead of waiting for Search Console to catch up.

Ready to generate Shopify schema?

Paste your page's URL and FullSchema handles the rest. No dropdowns, nothing to fill in by hand.

Free page check first, then $10 free to start. No card needed.