How to Add Your COA (Lab Results) to a Shopify Product Page
If you sell hemp, CBD, or supplements on Shopify, more and more shoppers look for the lab results before they add to cart — and they expect to find them right on the product page, not buried in a footer PDF. Here are the three practical ways to put a certificate of analysis (COA) on a Shopify product, and how to do it so the link doesn't break the next time you rotate a batch.
Why buyers expect lab results on the product page
Buyers of consumable products have been burned before — bottles that don't test anywhere near their label claim, or contamination that never should have shipped. A visible, per-batch COA is how a careful shopper separates a serious brand from one cutting corners. For a deeper primer, see what a COA actually is and how to read one.
The key detail is where they look: on the product page itself, at the moment they're deciding. A COA that's technically "on the site somewhere" — two clicks deep in a policy page — loses the shopper who wanted reassurance right then. Putting it on the product page also quietly cuts down the "is this third-party tested?" support emails.
There's a platform side too. Hemp and CBD stores on Shopify depend on specific payment processors and marketplace listings, and those partners increasingly expect lab results to be accessible for the products you sell. Making your COA easy to find on the page keeps you aligned with that expectation instead of scrambling if someone asks.
Method 1 — A labeled link in the product description (fastest)
The quickest option, and it needs no app and no theme editing:
- In your Shopify admin, open Products and select the product.
- In the Description editor, type clear label text — for example, "View lab results (COA) — Batch #A1234." Naming the batch number matters, because that's what ties the report to the exact unit a customer receives.
- Highlight that text, click the link button in the editor toolbar, and paste the batch's page URL. Set it to open in a new tab so shoppers don't lose their place.
- Click Save.
Downside: the link lives inside your marketing copy, so its placement can drift if you rewrite the description, and you have to remember to add it to every product. That's what Method 2 solves.
Method 2 — A "Lab Results" product metafield (cleaner for many SKUs)
A metafield stores the COA link as structured data attached to the product, separate from the description. It shows up in the same spot on every product page, which is what you want once you have more than a handful of SKUs:
- Go to Settings → Custom data → Products.
- Click Add definition. Name it something like Lab Results (COA); Shopify fills in a key such as
custom.lab_results. Choose the field type URL, then save. - Open any product and scroll to the Metafields section near the bottom. You'll now see the Lab Results (COA) field — paste that product's current batch page link there.
- To show it on the storefront, go to Online Store → Themes → Customize. On an Online Store 2.0 theme you can Add block to the product template and select your metafield directly, or drop in a Custom Liquid block that references
{{ product.metafields.custom.lab_results }}.
If your theme doesn't expose metafields in the editor and you'd rather not touch Liquid, that's fine — Method 1 covers you with no code at all.
Method 3 — A QR code on the packaging or insert (for the physical product)
The on-page link reaches the shopper. A QR code reaches the person holding the bottle or bag weeks later:
- Generate a QR code for the batch (BatchLink produces a downloadable one automatically for every batch page).
- Place it on the label, the box, or a small printed insert, with plain text like "Scan for lab results."
- Because the QR encodes a permanent batch URL, you can reprint packaging for future runs of the same batch without regenerating anything.
Do this in addition to the on-page link, not instead of it — they cover two different moments in the customer's experience.
Why the link has to be permanent (the part most sellers get wrong)
Whichever method you use, the whole thing rests on one URL continuing to work. Two everyday events tend to break it:
- Rotating batches. Every new production run has its own COA. If your description link points at a PDF you re-upload each time — a Shopify file, a Google Drive share, a Dropbox link — the address changes with it, and any older link or printed QR now opens the wrong file or nothing at all.
- Reformatting the store. Switching themes, reorganizing your Files, or re-platforming can quietly move or delete hosted PDFs. A shopper who clicks through to a dead link assumes the worst about the product.
Hosting each batch on its own permanent page fixes both. The URL for a batch never changes, so the link in your description, the value in your metafield, and any QR already printed all keep resolving. And you can still update what's on the page — fix a typo, swap in a re-issued PDF — without the address moving. Here's a live example of a batch page a customer would land on.
The simplest end-to-end walk-through
- Create a permanent page for the batch (product name, batch number, test date, lab, and the COA PDF).
- Copy that page's URL.
- Paste it into the product's description as a labeled link (Method 1) and/or into your Lab Results metafield (Method 2).
- Download the batch's QR code and add it to the packaging or an insert (Method 3).
- Next batch of that product? Make its page, then update the link or metafield to point at it. Nothing that's already printed breaks.
Built for multi-SKU sellers
One product, one batch, is easy to manage by hand. The pain starts when you have a dozen SKUs and each one cycles through new batches every few weeks — that's a steady stream of new COAs, each needing its own working link in the right product. A per-batch page keeps every one of them at a fixed address and in one place, so wiring up a new batch on Shopify is a copy-paste, not a scavenger hunt through file uploads.
BatchLink is free for your first 2 batches, which is enough to set this up on a product or two and see how it flows. If you're running many SKUs, the unlimited dashboard is $29/mo and keeps all your batch pages together.
Give each batch a permanent link and QR
Enter your batch info once, get a hosted page and QR code that always point to the right result for that batch — paste the link straight into Shopify. First 2 are free.
Create my batch page →FAQ
Do I need a Shopify app to add a COA to a product page?
No. The two simplest methods need no app at all: a labeled link inside the product description, or a product metafield you fill in per product. An app is only worth it if you want automated bulk management across hundreds of SKUs.
Should I put the COA in the description or in a metafield?
A description link is the fastest to set up and needs no theme editing. A metafield is cleaner if you sell many SKUs, because it puts the lab results in the exact same spot on every product page and separates the data from your marketing copy. Many sellers do both.
What happens when I get a new batch of the same product?
Each batch has its own COA, so it needs its own page. When a new batch ships, point that product's link or metafield at the new batch's page. If each batch lives on its own permanent page, the previous batch's page stays live for anyone still holding that older unit.
Can I show lab results without editing my theme's code?
Yes. The description-link method requires zero code. On an Online Store 2.0 theme you can also surface a metafield through the theme editor by adding a block — no Liquid required.
Does a QR code on the package replace the on-page link?
No — they cover different moments. The on-page link reaches the shopper deciding whether to buy; the QR on the package reaches the person holding the physical product later. Point both at the same permanent batch page and you cover both.
This page is informational, not legal advice — confirm current requirements with your own state agency and your payment processor before finalizing your store or packaging.