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

AIPrimary keyPermitted 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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

DL-A03Data attributes in the query string

Attributes were found where they belong, as key=value pairs after the question mark.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

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.

Source: GS1 — Digital Link Standard: URI Syntax

DL-N01Conformant

The URI matches the syntax the standard defines for its primary key.

Source: GS1 — Digital Link Standard: URI Syntax

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.