GS1 Digital Link Checker
Paste a Digital Link URI. This checks it against the path grammar the standard defines, and — more usefully — hands back the corrected URI. Two recent changes to the standard quietly invalidated a great many existing links, and neither of them makes the URI look wrong.
🔒 Your data never leaves your browser.
The two changes that broke existing links
Alphabetic names are gone, not merely discouraged. Paths such as
/gtin/09520123456788 were marked deprecated in version 1.2 of the standard and
removed completely as of version 1.3.0. A resolver is no longer required to
understand them. This is worth being precise about, because "deprecated" and "removed" get
remembered as the same thing, and only one of them still works.
The GTIN must now be fourteen digits. As of version 1.4.0 the syntax expects the GTIN expressed with 14 digits, so a GTIN-8, GTIN-12 or GTIN-13 has to be prefixed with leading zeros as filler. Almost every Digital Link written before that change carries 13 digits. The code itself is still correct and the check digit does not change — only the representation does, which is exactly why nobody notices.
Qualifier order is grammar, not preference
A primary key may be followed by key qualifiers, and their sequence is fixed. For a GTIN it is
consumer product variant, then batch or lot, then serial number. The standard gives the
reversed form as an explicit counter-example: /01/…/21/12345XYZ/10/ABC123 is not
permitted, while https://id.gs1.org/01/09520123456788/10/ABC123/21/12345 is.
Attributes belong after the question mark
Key qualifiers narrow down what the URI identifies. Data attributes — expiry date, net
weight, price — merely describe it, and the standard says they SHALL go in the query string as
key=value pairs. Writing /17/261001 in the path makes an attribute
look like a qualifier, which changes the identity the URI is asserting.
Every primary key and what may follow it
| AI | Primary key | Permitted qualifiers, in order |
|---|---|---|
01 | GTIN | 22 Consumer product variant → 10 Batch or lot number → 21 Serial number |
8006 | ITIP | 22 Consumer product variant → 10 Batch or lot number → 21 Serial number |
8013 | Global Model Number | none |
8010 | CPID | 8011 CPID serial number |
414 | Physical location GLN | 254 GLN extension |
415 | GLN of invoicing party | 8020 Payment slip reference number (required) |
417 | Party GLN | none |
8017 | GSRN of the provider | 8019 Service relation instance number |
8018 | GSRN of the recipient | 8019 Service relation instance number |
255 | GCN | none |
00 | SSCC | none |
253 | GDTI | none |
401 | GINC | none |
402 | GSIN | none |
8003 | GRAI | none |
8004 | GIAI | none |
Build one from a GTIN
The GTIN is padded to 14 digits and any qualifiers are placed in the order the standard requires, so the result is conformant by construction.
Every check this tool runs (14 rules)
DL-P01Not a primary identification key
The first numeric segment of the path is not one of the sixteen application identifiers the standard allows as a primary key. A Digital Link URI has to start from a primary key — a bare attribute path identifies nothing.
Fix: Start the path with a primary key such as /01/ for a GTIN or /00/ for an SSCC.
DL-P02No GS1 path found
Nothing in the path looks like an application identifier followed by a value. The URI may be an ordinary product page rather than a Digital Link.
DL-A01Convenience alphabetic name
Paths like /gtin/ instead of /01/ were marked deprecated in version 1.2 of the standard and REMOVED COMPLETELY as of version 1.3.0. URIs still using them are no longer conformant, and resolvers are not required to understand them. This is the single most common reason an older Digital Link stops working.
Fix: Replace the alphabetic name with its numeric application identifier.
DL-G01GTIN is not 14 digits
As of version 1.4.0 the standard expects the GTIN to be expressed with 14 digits: a GTIN-8, GTIN-12 or GTIN-13 must be prefixed with leading zeros as filler. Most Digital Link URIs written before that change carry 13 digits and are no longer conformant, even though the code itself is correct.
Fix: Pad the GTIN to 14 digits with leading zeros. The check digit does not change.
DL-G02GTIN check digit is wrong
The GTIN in the path fails the GS1 Mod-10 check. A Digital Link built on a mistyped GTIN resolves to the wrong product, or to nothing at all.
Fix: Verify the code before building the URI.
DL-Q01Qualifier not allowed for this key
Each primary key permits a fixed set of key qualifiers and no others. A GTIN accepts consumer product variant, batch/lot and serial number; an SSCC accepts none at all.
Fix: Move the value to the query string as a data attribute, or drop it.
DL-Q02Qualifiers out of order
The sequence of key qualifiers is part of the grammar, not a preference. For a GTIN the order is consumer product variant, then batch/lot, then serial number. The standard gives the reversed serial-before-lot form as an explicit counter-example.
Fix: Reorder the path segments; the corrected URI below does it for you.
DL-Q03Required qualifier missing
A few primary keys do not stand alone. The GLN of the invoicing party must be followed by the payment slip reference number.
Fix: Append the required qualifier.
DL-A02Data attribute in the path
Data attributes — expiry date, net weight, price and the rest — SHALL be expressed in the query string as key=value pairs. Putting them in the path makes them look like key qualifiers, which changes what the URI identifies.
Fix: Move it to the query string: ?17=261001 rather than /17/261001.
DL-A03Data attributes in the query string
Attributes were found where they belong, as key=value pairs after the question mark.
DL-S01Not HTTPS
A Digital Link is scanned by consumers from a physical product. Serving it over plain HTTP exposes the scan to interception and will be flagged by every modern browser.
Fix: Serve the resolver over HTTPS.
DL-S02Custom domain
The URI uses your own domain rather than the canonical id.gs1.org. That is permitted — zero or more path segments may precede the GS1 path — and is the normal choice for a brand-owned resolver.
DL-C01Looks compressed
The URI appears to use the compressed form. Compression is defined in a separate GS1 standard and is not decoded here, so the checks below cannot be applied to it.
Fix: Check the uncompressed form of the URI instead.
DL-N01Conformant
The URI matches the syntax the standard defines for its primary key.
Every rule on this page comes from GS1 — Digital Link Standard: URI Syntax. Compressed URIs are recognised but not decoded — compression is a separate GS1 standard, and guessing at it would be worse than saying so.