How to Verify a GS1-Conformant Resolver
By Diljit Ramachandran · LinkedIn · /about
Published August 21, 2026 · 12 min read
A GS1 Digital Link on packaging is only as trustworthy as the resolver behind it. Regulators, scanners, and brand IT teams do not take “we put a GTIN in the URL” at face value — they probe a discovery protocol defined by the GS1-Conformant Resolver standard.
This guide walks through the checks you can run yourself, using QRCodeStack’s live description file at https://qrcodestack.com/.well-known/gs1resolver as a concrete example. It pairs with our GS1 Digital Link tool page and the comparison of Digital Link vs a normal QR code.
What “conformant resolver” means
A resolver is not “any HTTPS redirect that contains digits.” The standard expects:
- A Resolver Description File at
/.well-known/gs1resolverso a client can discover the service at all. - Resolution of Digital Link URIs such as
/01/{gtin}(with optional path prefixes permitted by URI Syntax §4.11). - Support for
linkTypeselection, a fulllinkset, and correct handling of unknown types. - HTTP
Linkheaders so a client that follows a redirect still learns what else exists. - Content negotiation for linksets (for example
application/linkset+jsonper RFC 9264).
If your stack only 302s shoppers to a campaign page, it fails the discovery test even when the QR looks professional.
Step 1 — Open the well-known description file
In a browser or with curl, request:
GET https://qrcodestack.com/.well-known/gs1resolver
You should receive a JSON (or JSON-LD) description that identifies the resolver and how it is reached. GS1 URI Syntax names this location as the discovery test — if the file is missing, clients should not treat the origin as a conformant resolver.
Custom domains: when packaging prints https://brand.com/01/{gtin}, checkers probe https://brand.com/.well-known/gs1resolver, not the SaaS vendor’s apex. Your white-label / scan domain must expose the file on the brand origin.
Step 2 — Resolve a GTIN path
For a registered GTIN, GET /01/{gtin} (or /gs1/01/{gtin} where that prefix is used) should return a redirect to the default link type — typically a product information page (pip) — usually as HTTP 307.
Confirm:
- GET, HEAD, and OPTIONS are allowed (CORS preflight matters for browser clients).
- Responses expose
Linkheaders advertising related resources. - Query parameters other than
linkTypeare passed through on redirect when the standard requires it.
Step 3 — Exercise linkType behaviour
?linkType=pip(or another published type) → redirect to that specific link.?linkType=linkset→ the full link set as JSON (not a silent HTML dump).?linkType=unknown→ 404. Falling back to the default destination would hand the client the wrong resource; resolver standard 1.2 made this explicit.
Also try content negotiation: Accept: application/linkset+json or application/ld+json on the GTIN URI should reach the linkset without relying only on the query string.
Step 4 — Check URI syntax, not just the redirect
Resolver conformance assumes the Digital Link URI itself is conformant: 14-digit GTINs, application identifiers in the mandated path order, attributes such as expiry in the query string where URI Syntax 1.7.0 places them. Generate codes from a tool that validates against the ratified text — the GS1 Digital Link generator on QRCodeStack is built for that.
For EU packaging that must stay open and editable after print, pair the resolver with a dynamic destination and review EU Digital Product Passport requirements so the same URI can later point at a DPP record.
Quick checklist
GET /.well-known/gs1resolverreturns a description file on the origin printed on pack.GET /01/{gtin}redirects to the default link with usefulLinkheaders.linkTypeselects specific links;linksetreturns the set; unknown types 404.- CORS allows GET/HEAD/OPTIONS for public resolver data.
- Generated URIs match GS1 Digital Link URI Syntax (not an ad-hoc GTIN query string).
- Brand custom domains serve their own well-known file — checkers do not follow the SaaS apex instead.
How QRCodeStack implements this
QRCodeStack mounts a GS1-conformant resolver at the origin root and under /gs1, publishes the description file at /.well-known/gs1resolver, and supports linkType, linksets, and custom-domain resolution scoped to the brand that owns the hostname.
Try the generator on /gs1-digital-link. Paid plans (public on /pricing) add editable destinations, analytics, and custom domains. Trial fact (SSOT): 7-day free trial, no credit card — 5 dynamic QR codes, 0 static, 25 short links. Static QR creates require a paid plan.
Frequently Asked Questions
What is a GS1-conformant resolver?
An HTTPS endpoint that resolves Digital Link URIs per the GS1 resolver standard — discovered via /.well-known/gs1resolver, with linkType, linksets, and Link headers — not a GTIN-shaped marketing redirect.
Where is the Resolver Description File?
At https://your-domain/.well-known/gs1resolver. Live example: https://qrcodestack.com/.well-known/gs1resolver.
What should linkType=unknown return?
HTTP 404 — not a fallback to the default product page.
Is a marketing QR redirect enough for Sunrise 2027?
No. Packaging that must identify products at POS needs conformant URI syntax plus a discoverable resolver. See Digital Link vs normal QR and the Sunrise 2027 guide.
Build on a conformant resolver
Generate Digital Link QR codes, verify /.well-known/gs1resolver, and use editable destinations. 7-day free trial, no credit card — 5 dynamic, 0 static, 25 short links. From $5/mo.
Related Articles
GS1 Digital Link generator
Create conformant URIs and QR codes for packaging.
GS1 Digital Link vs normal QR
When POS needs structure and when a marketing QR is enough.
GS1 Sunrise 2027 guide
Retail timeline and packaging decisions for 2026–2027.
EU Digital Product Passport
Open product URLs without vendor lock-in.