Help · QR placement

Where to put the QR.

ESPR requires every covered product to carry its Digital Product Passport in a way the buyer can reach. In practice that means two surfaces: a physical QR on the product itself, and a clickable DPP link on your webshop product page. Below is the short guide for each.

Surface 1 · physical

QR on the product.

Mandatory for anything sold in physical retail. Sticker, hangtag, woven label, screen print, laser etch — whichever fits your production. Buyers scan with their phone camera and land on the passport.

Surface 2 · digital

Link on the webshop.

Strongly recommended for everyone, often required for online-only sales. A simple link or small QR image on each Shopify / Woo / Squarespace / custom product page. The DPP becomes part of the product's online story.

On the physical product

One sticker. Anywhere it'll be seen.

  1. In /admin/qr, pick the product and download the QR. PNG (1024 px) for thermal sticker printers (Brother QL, Dymo, Zebra). SVG for vector-clean printing on hangtags, woven labels, or screen-printed packaging.
  2. Minimum readable size is 15 × 15 mm. Below that phones struggle to focus.
  3. Best spots — in order of how reliably buyers find them:
    • Sewn-in care label (textiles)
    • Hangtag
    • Inside of the lid / packaging interior
    • Bottom or back of the product itself
  4. Print one test sticker first. Scan it with your phone. Confirm the passport loads. Then run the bulk print.
Survives wear and abrasion? Our QRs use error-correction level H — they remain scannable with up to ~30% surface damage. Good for sewn-in care labels that get washed many times.
On the webshop product page

Copy-paste the snippet.

Every passport has its own URL — https://productpasses.com/p/linen-overshirt-ss26. Embed it on the matching product page so shoppers see the DPP before they buy. Three flavours below, pick whichever lands cleanest in your stack.

Minimal — text link
Works anywhere a product description accepts HTML (Shopify, Woo, Squarespace, Webflow, custom). Drop in the description editor's HTML view.
<a href="https://productpasses.com/p/linen-overshirt-ss26" target="_blank" rel="noopener" style="display:inline-flex;align-items:center;gap:6px;color:#0A0A0A;font-weight:500;text-decoration:underline;text-decoration-color:#FF4F1F;text-underline-offset:3px;">
  Digital Product Passport →
</a>
Card — link + small description
A boxed callout that fits the product gallery / specs area. Works in any rich-text editor that accepts inline styles.
<a href="https://productpasses.com/p/linen-overshirt-ss26" target="_blank" rel="noopener" style="display:flex;gap:12px;align-items:center;padding:12px 14px;border:1px solid #E6E2D8;border-radius:12px;background:#FFFEFB;text-decoration:none;max-width:340px;">
  <span style="width:32px;height:32px;border-radius:8px;background:#FFE5DA;color:#B5320E;display:inline-flex;align-items:center;justify-content:center;font-weight:600;">P</span>
  <span style="flex:1;">
    <span style="display:block;font-size:14px;font-weight:500;color:#0A0A0A;">Digital Product Passport</span>
    <span style="display:block;font-size:12px;color:#6B6B66;margin-top:2px;">Materials · care · repair · end-of-life</span>
  </span>
  <span style="color:#FF4F1F;font-weight:500;">→</span>
</a>
Shopify — Liquid (theme-wide)
Add to your product template (sections/main-product.liquid or templates/product.liquid) to show the DPP link on every product page. Replace the metafield key with one you create at Settings → Custom data → Products.
{% comment %} Renders the DPP link only when the product has a passport slug stored in a metafield {% endcomment %}
{% if product.metafields.productpasses.slug %}
  <a href="https://productpasses.com/p/{{ product.metafields.productpasses.slug }}"
     target="_blank" rel="noopener"
     class="product-dpp-link"
     style="display:inline-block;margin-top:12px;padding:8px 14px;border:1px solid #E6E2D8;border-radius:999px;text-decoration:none;color:#0A0A0A;font-weight:500;">
    Digital Product Passport →
  </a>
{% endif %}
WooCommerce — functions.php
Adds the DPP link below the price on every product page. Reads the passport slug from a Woo product custom field named `dpp_slug` — set that per product in the Custom Fields section of the product editor (enable via Screen Options if hidden).
// functions.php in your active theme
add_action( 'woocommerce_single_product_summary', 'productpasses_dpp_link', 25 );
function productpasses_dpp_link() {
  global $product;
  $slug = get_post_meta( $product->get_id(), 'dpp_slug', true );
  if ( ! $slug ) return;
  printf(
    '<a href="https://productpasses.com/p/%s" target="_blank" rel="noopener" class="dpp-link" style="display:inline-block;margin:10px 0;padding:8px 14px;border:1px solid #e6e2d8;border-radius:999px;text-decoration:none;color:#0A0A0A;font-weight:500;">Digital Product Passport →</a>',
    esc_attr( $slug )
  );
}
Tip — generate the snippet automaticallyFrom inside the admin, the /admin/qr page now has a Copy embed snippet button next to each passport. It pre-fills your slug so you don't need to template anything yourself.
Common questions
Do I need both the physical QR and the webshop link?

For products sold in physical retail, the physical QR is required. The webshop link is strongly recommended in addition — buyers expect to find the DPP from the product page too, and some EU member-state implementations require it for online sales.

Can I use one QR for a whole product family / SKU range?

No. ESPR is per-product (per SKU, per variant where variants differ materially). Each scannable code resolves to one passport. If you ship two colours of the same shirt with different materials, they each need their own passport and their own QR.

What if I change the passport later?

Editing a passport is fine — the URL stays the same, content updates. Just don't change the slug after stickers are printed; old QRs would 404. Inactive passports keep resolving for the workspace's grace window (7 days by default) so retired stickers don't immediately break.

Does the QR work offline?

The QR encodes a URL — to load the passport, the scanner's phone needs internet (almost always cellular or wifi at this point). The QR itself doesn't go stale, but the passport page is a live, EU-hosted web page.

Ready to print your first one?

Sign in to your workspace, pick a product, download the QR.

Where to put the QR — ESPR Digital Product Passport guide · productpasses.com