A market stall in November. It gets dark at four; the council lights are strung too high to be much use, and half the people walking past are holding a coffee in one hand and a phone in the other. Someone picks up one of your candles, turns it over, and asks whether you post them.
You say yes. Then you have about four seconds to give them a way to find you again, and you cannot type your Instagram handle into their phone for them, because that is odd, and because there is a queue.
This is the moment a QR code is for. Not the internet. The internet already has hyperlinks. QR codes exist because of the gap between a physical object and a phone, and that gap only shows up when you are standing in a room with people.
The scan itself is the weak part
I want to be honest about the failure mode before defending the idea, because most writing about QR codes skips it.
Here is what actually happens. The customer holds the phone up. The camera app opens, the code is on a card propped against a jar, the jar is behind a tealight, and the card has a glossy laminate reflecting the stall light straight back into the lens. Nothing happens. They move closer. Still nothing. They turn on the torch, which makes the glare worse. They tilt the card. At this point they say sorry, which is the worst part, because they have done nothing wrong, and you say no no, it does this, which is an admission that you knew and printed it anyway.
That sequence takes maybe eight seconds, and it costs you the sale of attention, if not the sale of the candle. I do not know how often it happens across all stalls and all phones. Camera behaviour varies a lot between an iPhone from last year and a cheap Android from four years ago, and I have not tested enough of them to give you a number. I can tell you the causes are boring and fixable, and that most of them are about printing rather than about the code.
So: matte, not gloss. Black on white, not brand-coloured on cream, because contrast is what the scanner is looking for, and a tasteful sage green on off-white has a quarter of the contrast of black on white. Leave the white border around the code alone, all four sides of it, because the scanner uses that empty margin to find the edges. Size it at roughly a tenth of the distance people will scan from, so a code you expect someone to scan from thirty centimetres away wants to be about three centimetres across, and bigger if it is across a table or up on a wall. Put it at chest height on a stall, not flat on the table, so nobody has to crouch over a tealight.
Then test it in bad light, on a phone that is not yours, before you print fifty of them.
And print the URL underneath in readable type. Some people will not scan a code from a stranger, which is a reasonable position to hold, and they will type instead if you make typing possible. This is the first real argument for a short destination address, and it comes back later in a way that is less flattering to us.
One destination, not a junk drawer
A QR code has one property that a link in a bio does not have. It is printed. Once it is on five hundred business cards, it is on five hundred business cards, and you are not editing it.
That pushes people in two directions, and both are defensible. You can point the code at a single product URL, which is the cleanest thing to do if you sell one thing and that one thing is not changing. Scan, land on the candle, buy the candle. Nothing in between. If that is your situation, do that, and skip the rest of this section, because a link page in the middle is a speed bump you built yourself.
Or you point the code at a page you control, so that when the product changes, or you run out of stock, or the Shopify URL changes because you rebuilt the store, the printed card still works. That is the real case for a QR code link in bio setup. The code is fixed. What sits behind it is not.
The risk is obvious. A page you can edit forever tends to accumulate. The version you print in March has three links on it. By August it has eleven, because you added your Pinterest, and the newsletter, and a link to a podcast you were on, and one that says "my faves" going to an affiliate page you forgot about. The card in someone's wallet now leads to a drawer full of cables.
The person scanning at your stall is not the same visitor as the person tapping through from a TikTok. They have met you. They have held the thing. They do not need convincing that you exist; they need one clear next step and a way to not lose you. A page built for cold traffic does not serve them well, and a page built for everyone serves them worse.
What goes on the page they land on
Start with recognition. Your photo or your product, your name, and one line that matches what they just saw at the stall. If the sign said Harbour Candle Co, the page says Harbour Candle Co. If the page says something else because that is your personal handle, they will assume they scanned the wrong code. That sounds too small to matter. As far as I can tell from watching people do it, it is the most common reason a scan gets abandoned.
Then the thing to buy, first, as the top button, with a label that says what it is. Shop the candles. Order a hat. Book a slot. Not "click here", and not a raw URL as the visible link text.
Then the practical answers to the questions they would have asked if there had not been a queue. Delivery cost and rough timing. Whether you post outside the country. Whether custom orders are a thing. Two lines of text will do it, and a heading or a divider above them stops the page from reading as a wall.
Then one way to stay in contact that is not a purchase, because a decent share of stall scans are people who like it and are not buying today. An email signup, or a follow, placed under the buy link rather than above it. There is a longer version of this argument in what your link page should say before anyone clicks, which is about the first screen and applies more here, not less, since a person mid-scan has even less patience than a person mid-scroll.
And that is the page. Four things. If you are tempted to add your Spotify, ask what a person holding a candle in the cold is going to do with it.
Where we help, and where we are part of the problem
Relay gives you a QR code for your page on the free plan, along with unlimited links, your photo and bio, social icons, headings and dividers, five themes, tap and view counts, and a story-sized share image. No card, no time limit. The counts are the part that matters for a stall, because a market day is otherwise completely unmeasurable. If you did Saturday and got nineteen views on the page and four taps on the shop link, you know something you did not know on Friday. It is a small number, and small numbers are what early selling is made of. There is a timeline of what that tends to look like in how long until the first sale.
Now the awkward part. We do not do custom domains. So the URL you print under the code reads relayme.bio/yourname, which puts our name on your business card, and on a card that is a real cost. We also do not handle payments, so the code cannot take money at the stall; it can only send someone to wherever the money is handled, which for most people is Shopify or TikTok Shop. If you are still deciding which of those you need, this comparison goes through it. The free plan also shows a small Relay badge, which Pro removes at $30 a year or $4 a month plus VAT, along with the other forty-seven themes, custom colours, per-link images, scheduled links and email capture. Data sits in the European Union, fonts are self-hosted, no advertising and no third-party analytics, which is less a selling point than the absence of a problem.
None of that stops the junk drawer. We will happily let you put nineteen links behind your printed code. That one is yours.
When another social link is the better print
If the only thing you want from the encounter is a follow, and you are on one platform, print the handle. Large, readable, with the platform name next to it. People can find @harbourcandleco without a camera, and a handle survives being photographed sideways by someone in a hurry, which a small QR code often does not.
A QR code earns the space when the next step is not a follow. Buying, booking, joining a list, downloading something, seeing sizes and prices. Anything where the destination is longer than a handle, or where the destination might change after the ink dries.
Which leaves the table at an event, where you have maybe forty seconds with each person, and the light is somehow worse than the market. Same rules, bigger code, propped upright, matte. And a stack of something they can take away with the URL printed on it, because half of them will scan later on the train, if at all.
The code is not the interesting part. It is a black and white square that does one job and does it badly in glare. The page behind it is the whole thing, and the test for that page runs in your head in about five seconds. Someone you spoke to for a minute scans it in the dark. Do they know they are in the right place, and is there one obvious thing to do next?