
A Shopify QR code generator is one of those tools that nobody thinks about until they need 200 stickers for a trade show next Tuesday. Then it is urgent. Then the generator you grabbed produces codes that do not scan on half the phones at the booth because the contrast is wrong or the error correction is too low. Then the trade show is ruined.
This guide explores the practical uses for displaying a QR code on your Shopify store (e.g. packaging, signage, marketing), shows you how to add UTM tracking to your Shopify QR code to measure what actually worked, covers the difference between Dynamic and Static Shopify QR codes, reviews general design considerations to ensure your code is scannable and learns the common mistakes that can cause you to have to reprint.
In this post
Use cases that actually work
Use a QR code on the packaging to link to relevant product information, care instructions, how-to video etc. Follow up with customer after they have purchased, solicit a review, offer customers relevant replacement parts.
Use QR codes in Retail signage. If a customer looks at products online and in store, they can scan a QR code on shelf tags to read customer reviews, check for other sizes or colours, and purchase online if the store is out of stock.
Marketing collateral. Business cards, flyers, trade show banners, print ads and magazine inserts. Who needs to type a URL when a QR code can instantly bridge the gap between print and online for your customers.
Inserts in the order. Thank you for buying with us card with QR code for discount, referral or post purchase survey. More effective than email.
Pop-up events. Menu of QR codes printed on a booth: Scan here for product catalog, Scan here to sign up for newsletter, Scan here for special event offer + offer in app with bulk code.
Generating a code
This company provides a free online tool to generate QR Codes. You simply enter the URL you wish to associate with the QR Code, select a size and error correction level and then download the generated code as a PNG file or SVG file. For print purposes the SVG file is better as it is scalable to any size without pixelation. For online use the PNG file is perfectly adequate as well as for very small printed items.
Error correction levels. L = 7% recovery. M = 15%. Q = Quartile (25%). H = 30%. For curved items and places where the code may get scratched, use Q or H as the code will be more dense and more capable of withstanding damage. For clean, flat signs, M is suitable.
UTM tracking is mandatory
Including UTM parameters in your destination URL turns a QR code into a trackable channel. Without them, you will see the increased traffic in your Shopify analytics, but have no idea if the conversion was due to your packaging insert, your trade show banner, or your retail shelf tag. Attach the relevant UTM parameters to your destination URL before you generate the QR code.
| Parameter | Example |
|---|---|
| utm_source | packaging, retail, tradeshow, flyer |
| utm_medium | qr, print, offline |
| utm_campaign | spring-launch, booth-nrf, insert-v2 |
| utm_content | box-top, shelf-tag, banner-left |
Full URL example: https://yourstore.com/products/hoodie?utm_source=packaging&utm_medium=qr&utm_campaign=spring-2026 Copy and paste that long URL from your site into the box on the QR Code Generator site. This code will track the number of orders generated by your new box insert.
Dynamic vs static codes
Static codes are pre-printed with the destination URL and are the fastest, most convenient method to distribute your Sitelink code. Free, fast and reliable but cannot be changed after printed.
Dynamic codes can also encode a short URL to a destination. This short URL gets stored in the encoded code and gets redirected to the destination link. You can change the destination any time you want without having to re-generate the dynamic codes but the service provider of the shortener has to stay online permanently because if the service provider goes down then all the dynamic codes generated in the past will stop working.
Static URLs such as your homepage and core product pages should use static links. Campaign links that may change over time (such as seasonal promotions or special events) should use dynamic links. Do not embed dynamic links generated on 3rd party services where you may loose access to them. For dynamic behavior, host the redirect on your own domain using Shopify’s URL redirect feature (redirects guide).
Design tips that keep codes scannable
- Minimum size: 2cm x 2cm for handheld scanning at normal distance. Bigger for wall-mounted signs.
- High contrast: dark code on light background. Reverse (light on dark) works but scans slower.
- Quiet zone: leave whitespace padding equal to at least 4 modules around the code. Nothing should touch it.
- Colored codes are fine if contrast ratio stays above 4.5:1 against the background.
- Logo in the center is okay only with Q or H error correction. Otherwise the logo destroys scannability.
- Always test the final printed code with at least three different phones before sending to production.
Common mistakes
Printed code that links to a page that doesn’t exist yet. (I won’t get any push back on this because it happens frequently enough) Marketing team prints up 10,000 inserts with a URL linking to /pages/spring-launch. Dev team has not built page yet. Launch day and all that code goes live while the page for it does not.
Other classics: this code is a little too small for my scanning needs. For a billboard (sign) located 20 feet off the ground, I would need a code the size of a pizza. The code is on a glossy surface which causes a lot of glare, making it very difficult to scan. The code does not include a quiet zone and the border of the sticker is right at the edge of the code. The destination URL for this code is not mobile-friendly.
If your site is on a product details page with variants, make sure all the variant images, swatches, and combined listings are displaying and functional on mobile. The variant images will filter correctly with Rubik Variant Images and the combined listings will show as separate products with a theme override already in place. Additionally, Rubik Combined Listings will render properly on mobile.
Related tools on this site
- QR code generator: PNG and SVG output with error correction options
- Discount code generator: pair QR codes with unique discounts
- All free Shopify tools
See the live demo store, watch the tutorial video, or read the getting started guide.
FAQ
Can I track QR code scans in Shopify analytics?
Shopify does track the source and also the campaign from the UTM codes in the destination URL but only if you add those UTM codes before generating the link. Shopify connect already has a field for destination URL but if you want to include UTM codes then you need to add them manually before getting the code. Shopify analytics groups by source and campaign from the UTM fields.
Static or dynamic QR code for product packaging?
Static or Dynamic? Static if permanent, Dynamic (hosted on your own domain) if transitory. Never rely on a third-party dynamic service that can go down.
What is the minimum size for a scannable QR code?
2cm x 2cm for use with hand held device when scanning at normal talking distance. Larger for wall signs that will be scanned from further away.
Can I put a logo in the middle of a QR code?
Yes, if you use Q or H error correction. Lower error correction levels will not survive the logo obstruction and the code will fail to scan.
Do QR codes work on all phones in 2026?
iOS and Android native cameras have been capable of scanning QR codes for a couple of years now, since 2017 and 2018. You don’t need an app for that.
PNG or SVG for print QR codes?
Use SVG files because they scale nicely to any print size without any pixilation. PNG files look fine on the screen but have hard edges and don’t print nicely at large sizes.
Should I use a branded shortener for QR codes?
Shorteners only work on your own domain. I’ve never seen a service that will let you use a third party’s shortener. Which is great, since third-party services are a point of failure. If your website ever gets shorterned on a third-party service, every bit of one-liner code that you wrote will break in an instant.





