GS1 standards & identifiers
GS1 Digital Link: How the URI Is Built, and What It Does Not Promise
Scanning a GS1 Digital Link symbol returns a web address. That does not make it “a QR code with a link in it.” The standard defines a syntax for writing GS1 identifiers — the GTIN, a batch number, a serial — as the path of a URI, so that one symbol can serve both a scanner and a browser.
This article follows GS1 Digital Link URI Syntax, release 1.7.0, ratified August 2026. Quotations below come from that specification. It is a syntax standard: how to write the identifier, not what a scan should display, and not where the address resolves.
What goes in the path, and what goes in the query string
The primary identifier comes first. For a trade item that is the GTIN, written after the application identifier 01:
https://id.gs1.org/01/09521234543213
The GTIN is always fourteen digits. The specification requires the “GTIN value to be expressed using 14 digits”, so a GTIN-8, GTIN-12 or GTIN-13 is padded with leading zeros rather than written at its original length.
Key qualifiers follow the GTIN in the path, and their order is fixed:
| Component | AI | Position in the path |
|---|---|---|
| Consumer product variant | 22 |
first qualifier after the GTIN |
| Batch or lot number | 10 |
after the variant |
| Serial number | 21 |
last |
The specification is explicit that a different arrangement is not acceptable: writing them out of sequence means “the sequential ordering of the key qualifier components is not preserved”. So /01/.../22/.../10/.../21/... is the only valid ordering of those four.
Data attributes do not belong in the path at all. An expiry date — AI 17 — is not a qualifier, and the rule is unambiguous: “Data attributes and their values SHALL be expressed via the URI query string as key=value pairs.”
https://id.gs1.org/01/09521234543213/10/ABC123?17=281231
That split is the part most often gotten wrong. The path answers which item; the query string carries facts about it.
Case is significant after the domain name
“Following the domain name, the remainder of the Web URI is case sensitive.”
Two consequences follow, and both matter in practice.
The scheme may be written in upper case — release 1.7.0 added HTTP and HTTPS to the grammar alongside the lower-case forms. Batch and serial values, however, accept both cases: their character set includes upper and lower alphabetic characters. Converting a whole URI to upper case therefore leaves the scheme and the numeric AIs intact while silently changing a lower-case batch number into a different value — a different batch, as far as the receiving system is concerned.
BarcodeMate's GS1 Digital Link QR Code example is written in upper case, and its sample batch value is upper case to begin with, so nothing is altered. Treat that as a property of the example, not as advice: the specification does not discuss upper-case URIs, nor QR Code encoding modes, at all.
Canonical form is for carriers that cannot hold a URL
The specification defines a canonical GS1 Digital Link URI as “The definitive GS1 Digital Link URI for a given resource, that always begins with the scheme "HTTPS" and the domain "id.gs1.org."” Its stated purpose is narrow — “in some contexts (e.g., to support carriers that cannot embed a Web URI) it is necessary to identify a single well-known or default version”.
The canonical rules, as the standard lists them:
- the scheme SHALL be HTTPS, and the domain name SHALL be
id.gs1.org - GTIN-8, GTIN-12 and GTIN-13 SHALL remain padded to 14 digits
- the query string SHALL NOT contain key=value pairs whose keys are not GS1 Application Identifiers
- pairs should be sorted in lexical, not numeric, order of the key
- it SHALL NOT include a trailing slash
So http://example.com/01/09520123456788/22/2A?linkType=gs1:traceability has the canonical equivalent https://id.gs1.org/01/09520123456788/22/2A — a different domain, no linkType, no trailing slash.
Canonical form is not the form you are expected to print. Using your own domain is a feature, not a deviation: “A GS1 Digital Link URI can be constructed in any domain name, may contain additional key=value pairs in the query string and so on. This flexibility is a deliberate feature.” A URI that merely uses the id.gs1.org domain is a reference GS1 Digital Link URI; that is a weaker condition than canonical, which also constrains the scheme, the query string and the trailing slash.
What the standard explicitly does not promise
This is the section worth reading before planning a project around it.
- The address need not resolve to anything. “Applications SHALL NOT assume that a URL that follows the syntax defined in this standard will point to a resolver.” Resolvers are a separate standard — the GS1-Conformant Resolver Standard — not this one.
- The URI carries no meaning by itself. “a GS1 Digital Link URI, like any Web URI or URL, does not have any intrinsic meaning.”
- It does not change what a valid AI value is. “Nothing in this GS1 specification changes the existing validation rules that apply to the values of GS1 Application Identifiers; this document only specifies how valid GS1 AI values shall be expressed in the GS1 Digital Link structure.”
- It does not govern the symbol on the label. “The use of GS1 Digital Link URIs in data carriers is governed by the GS1 General Specifications”, and human-readable interpretation “defers entirely to the GS1 General Specifications”.
One more point the specification does not make, because it is outside its scope: writing a GTIN into a URI does not assign that GTIN to you. Product numbers come from your GS1 member organisation; an encoder only arranges characters.
Which symbol can carry one
“A GS1 Digital Link URI can be encoded natively in any data carrier that can support the encoding of a Web address (URL).” The specification names QR codes, Data Matrix codes and NFC tags as examples, and does not publish a closed list of permitted symbologies.
That is also where a common mix-up lives. A GS1 Data Matrix carries bracketed application identifiers such as (01)09521234543213(17)120508(10)ABCD1234. A GS1 Digital Link Data Matrix carries the URI form shown throughout this article. They look similar on a label and are not interchangeable input:
| Generator | What you type |
|---|---|
| GS1 Data Matrix | Bracketed AIs: (01)...(10)... |
| GS1 QR Code | Bracketed AIs |
| GS1 Digital Link Data Matrix | A URI: https://id.gs1.org/01/... |
| GS1 Digital Link QR Code | A URI |
Compressed URIs exist as well. Release 1.7.0 matches compressed and partially compressed forms, and notes that the earlier compression algorithm “will not be maintained after version 1.1.4”, while the newer flagged forms are “expected to be used in future Application Standards”. The compression method itself is specified in a separate document.
About retail point of sale in 2027
Industry coverage widely describes a 2027 milestone for 2D codes at retail checkout. We could not verify its scope or dates against a primary source for this article: gs1.org returned HTTP 403 to our automated requests and the GS1 US page we tried returned 404. Rather than restate vendor summaries as fact, we are leaving the specifics to GS1's own material, which opens normally in a browser. Nothing in the URI syntax standard sets a retail deadline.
Build one
Enter a URI, not bracketed AIs, in the GS1 Digital Link QR Code or GS1 Digital Link Data Matrix generator. Both run in your browser and download as PNG or SVG. To compare these against the other GS1 carriers before choosing, see a sample image of every format.
Print at the size the symbol requires, keep its quiet zone, and scan the printed label with the device that will read it in production. A clean preview on screen is not a verified print.