What is a GS1 Digital Link?
A GS1 Digital Link is a web address with your product's GS1 identifiers built into its structure. A checkout scanner reads the identifiers out of it and ignores the rest; a phone reads the whole thing as an ordinary link and opens a page. One symbol, two audiences, no compromise between them.
In short
- It is a rule about what a web address should say, not a type of barcode — you put a Digital Link inside a QR code.
- The GTIN sits in the path, so a till can extract it offline without ever contacting a server.
- Anything else the pack needs to say — batch, serial, dates — has a defined place in the same address.
- It is built around the GTIN you already hold. It does not replace your barcode number, and for now it does not replace your barcode either.
What one actually looks like
Here is a Digital Link carrying a GTIN, a batch number and a best-before date:
https://example.com/01/09506000149301/10/ABC123?15=270331
Read it left to right and it decomposes cleanly. example.com is your domain — it can be your own, which is what keeps the code yours rather than a platform's. /01/09506000149301 is the GTIN, where 01 is the GS1 Application Identifier meaning "this is a GTIN". /10/ABC123 is batch ABC123. ?15=270331 is a best-before date of 31 March 2027, written year-month-day.
Nothing there is invented by us or by any platform. The structure is defined by the GS1 Digital Link URI Syntax standard, which is why a scanner built by someone who has never heard of us can still read it correctly.
Why a till and a phone see different things
This is the part that surprises people, and it is the whole point of the design.
A point-of-sale scanner never goes online. It reads the symbol, finds 01 followed by fourteen digits, extracts the GTIN and hands it to the till software, which looks up the price in its own database. The rest of the address is irrelevant to it. This is why a Digital Link keeps working at checkout when the shop's internet is down, and why it does not matter whether your website is up.
A phone camera does go online. It sees a normal https link, opens it, and lands on whatever page that address resolves to — which is a page you control and can change after the packaging is printed. That can be a redirect to a site of your own, or a hosted page served at the scan URL itself, showing the product's name, brand, photo and links; either way it stays editable after printing.
The same printed squares, therefore, do two jobs that have nothing to do with each other. That is the argument for a Digital Link over an ordinary QR code: an ordinary QR code can only ever do the second job, so a pack that wants both needs two symbols and the space for them.
Which identifier goes where
The standard splits identifiers into two kinds, and the split has a practical consequence worth understanding before you design anything.
Qualifiers go in the path. A qualifier narrows down which thing you mean — this batch, this serialised unit. Because they are part of the path, each value can resolve somewhere different. That is what makes a targeted recall possible: batch L2607 can point at a notice while every other batch carries on as normal.
Attributes go in the query string. An attribute describes the thing rather than identifying it — a date, a weight. They travel with the scan but do not change what the link points at.
| AI | GS1 name | Where it goes | Notes |
|---|---|---|---|
01 | GTIN | Path, always first | Always written as 14 digits, padded with leading zeros |
22 | Consumer product variant | Path qualifier | Up to 20 characters |
10 | Batch or lot number | Path qualifier | Up to 20 characters — the one most brands want |
21 | Serial number | Path qualifier | Up to 20 characters, for individually serialised units |
11 | Production date | Query attribute | YYMMDD |
15 | Best before date | Query attribute | YYMMDD — this is best-before, not expiry |
17 | Expiration date | Query attribute | YYMMDD — GS1's "use by" / expiry, distinct from AI 15 |
Two details catch people out. The path qualifiers must appear in the order the standard sets — variant, then batch, then serial — and a URI that puts them in another order is not valid even though it looks reasonable. And AI 15 and AI 17 are genuinely different things: 15 is the best-before date, 17 is the expiration or use-by date. Using the wrong one misstates what your pack says.
The standard defines more qualifiers than the three above, for cases like serialised assets and returnable packaging. The three here are the ones that matter for retail consumer goods.
How it compares to what you have now
| Your linear barcode | An ordinary QR code | GS1 Digital Link QR | |
|---|---|---|---|
| Rings up at the checkout | Yes | No | Yes |
| Opens a page on a phone | No | Yes | Yes |
| Works with the till offline | Yes | Not applicable | Yes |
| Destination editable after printing | Not applicable | Only via a redirect service you control | Yes |
| Can carry batch, serial and dates | Only in specific formats, not at retail POS | No defined structure | Yes, in a defined structure |
| Structure defined by an open standard | Yes | No | Yes |
What it doesn't do
Worth stating plainly, because the category is full of overclaiming.
- It does not discharge your labelling duties. What has to be printed on a pack is set by the rules for your category, and a scan does not move any of it unless a specific provision says so — which is rare, and narrower than it sounds when it does exist.
- It does not replace your linear barcode yet. For retail point of sale the 2D symbol is specified as an addition to it.
- It is not a link shortener. The identifiers are the point. A shortened URL that happens to be in a QR code carries no GTIN, so a till can do nothing with it.
- It does not require anything from your retailer. You do not need their permission or a system change to put one on a pack, because the linear barcode is still doing the checkout job.
Check any of this yourself
- Paste a code into the parser — it shows what a till extracts, field by field, plus the element string it reads.
- Build one in the builder and see the URI and the QR symbol change as you add a batch or a date.
- Read our conformance results — the standard's own test vectors, run in your browser, pass and fail shown honestly.
- Then check the print size, because a correct Digital Link printed too small is still unscannable.
Common questions
Is a GS1 Digital Link just a QR code?
No — they are different layers, which is why the two get confused. A QR code is a way of printing data as a pattern of squares. A GS1 Digital Link is a rule about what that data should say. You can put a Digital Link into a QR code, which is what almost everyone does, but the Digital Link is the web address inside, not the symbol outside.
Do I need a new GTIN to use one?
No. A Digital Link is built around the GTIN you already hold from GS1. Nothing about your numbering, your membership or your existing barcodes changes — this is a different way of writing a number you already own.
Will a checkout scanner really read it?
Yes, provided the retailer's scanner reads 2D symbols at all, which is what GS1's Sunrise 2027 milestone is about. The scanner extracts the GTIN from the URI's path and processes the sale offline, exactly as it does with a linear barcode. It never contacts a server and does not care that the data is shaped like a web address.
Should I take my existing barcode off the pack?
Not yet, and the standard agrees: for retail point of sale, a 2D symbol is specified as an addition to the linear barcode rather than a replacement for it. Carry both until every retailer you sell through can scan 2D at the till.
What is the difference between a path qualifier and a query attribute?
A qualifier narrows down which thing you are pointing at — a specific batch, a specific serialised unit — so it goes in the path. An attribute describes something about that thing, like an expiry date, so it goes in the query string after the question mark. The practical consequence is that batch and serial can each have their own destination, while dates cannot.
Can I shorten the URL to make the code smaller?
Not for a code that will be scanned at a retail till. The General Specifications require the uncompressed form of the Digital Link URI for that case. You can still keep the code small by encoding less — a GTIN on its own makes a noticeably smaller symbol than a GTIN plus batch plus a date.
How do I check I have built one correctly?
Paste it into our parser. It shows you field by field what a scanner pulls out — the GTIN, any qualifiers, any attributes — plus the canonical form and the element string a till actually sees. If something is malformed, it tells you why rather than failing silently.