QR codes for museums, galleries and heritage trails

A blank interpretation label on a slanted metal holder beside a gallery plinth.

QR codes for museums, galleries and heritage trails

A curator with thirteen exhibits and two languages to interpret in does not have a code problem, they have a labelling problem: twenty-six codes, each opening a different page, each needing a name that still means something on a spreadsheet six months from now. One real OpenQR customer did exactly this job by hand, typing twenty-six labels across three separate accounts because nothing suggested a better way. This page is the better way: one convention for the label, one paste for the whole cross-product, and a scan log that tells you which of the twenty-six anyone actually stopped for.

The job is a cross-product, not a list

Thirteen exhibits in two languages is not thirteen codes and it is not twenty-six unrelated ones either, it is a cross-product: every exhibit, times every language, each pairing pointing at its own page. That shape is what makes museum work harder than a single-language poster run and easier to get wrong. Number the exhibits once, list the languages once, and every code follows a rule instead of being typed from scratch.

A label convention that survives six months

Use a fixed pattern such as Exhibit 03 - IT: two digits for the stop, a space-dash-space, a two-letter language code. It sorts correctly in a folder, a spreadsheet and a printed contact sheet, and anyone new to the project can read a filename and know exactly what it is without opening it.

Doing today's job with the tool that exists

There is no dedicated multilingual set-builder yet, and it is better to say that plainly rather than pretend otherwise. What does the job today is the bulk generator, which takes a pasted list and turns it into a whole batch of named, downloadable codes in one pass. Build the cross-product once, in a spreadsheet or a text editor, then paste it in.

Building the twenty-six from a thirteen-exhibit, two-language collection

  1. 1

    List the exhibits down one column

    One row per exhibit, in the order they're numbered on the floor: Exhibit 01, Exhibit 02, and so on.

  2. 2

    Cross it with the languages

    Duplicate the list per language and append the language code to the label: Exhibit 01 - EN, Exhibit 01 - IT, Exhibit 02 - EN, Exhibit 02 - IT.

  3. 3

    Pair each row with its destination and paste into the bulk generator

    One line per code: the destination URL, a comma, then the label. The tool shows you what each row will encode before anything is generated, so a wrong pairing is caught on screen, not on a printed panel.

  4. 4

    Export SVG for the print run, PNG for anything digital

    SVG stays sharp at any panel size; a print house will ask for it by name.

Per-exhibit scan analytics is the sellable insight

The codes are the delivery mechanism. The thing a curator cannot get anywhere else is the answer to which exhibits people actually stop for. A collection has a hierarchy of attention that nobody in the building can currently see: the object every visitor photographs, the one nobody reads past the headline of, the language split that says your Italian-language visitors cluster around three specific cases. That is a genuinely new instrument for interpretation planning, not a side effect of having codes at all, and it is only available on dynamic codes because a static code cannot be counted.

Be precise about what a scan proves, because overselling it costs trust. A scan is a phone pointed at a label near an exhibit, aggregated with the date, a rough location and a device class, and no scanner is ever identified: no cookie, no device ID, nothing that links two scans to one visitor, and no geography is ever named below five scans in a window. It tells you engagement by stop and by language. It does not tell you dwell time, whether the visitor read to the end, or anything about who they were, and it should never be reported as if it does.

An interpretation panel is read from further away than a business card, under lighting a print shop never sees, by someone who may not want to touch the panel to get closer. Three things decide whether the code actually scans in that room rather than just looking correct on a proof sheet.

FactorGuidanceWhy it matters here
Minimum sizeRoughly 30-40mm across for a panel read from 0.5-1m; scale up for anything read from further back in a gallery walkwayA code sized for a leaflet disappears on a wall-mounted panel viewed from normal visitor distance
Contrast against the panelSolid dark code on a solid light background, at the contrast ratio the panel's own graphic design already uses for textInterpretation panels use deliberate, sometimes low-contrast colour schemes that read fine as design and fail as a machine-readable code
FinishMatte laminate, never glossGallery spotlights reflect straight off a glossy laminate and put a glare band across the code; that is a genuine, common scanning failure, not a hypothetical one
Error correctionLevel M is enough for a clean indoor panel; use H if the label will be touched, wiped, or is near a doorHigher correction adds density for no benefit on a panel nobody touches, but earns its keep near an entrance

Full sizing detail, including how distance and quiet-zone margin interact, is in the print size guide, and the trade-off between correction level and code density is in the error correction guide.

No app, no barrier

For a public-sector or funded venue, accessibility is not a nice-to-have, it is a condition someone will actually check. A QR code that requires downloading a scanner app is a barrier by definition: it excludes any visitor who won't install something for a single visit, and it adds a step between curiosity and content that a genuinely accessible interpretation scheme should not have. Every phone made in roughly the last eight years reads a QR code directly in its camera app, no download, no account. That is the whole pitch to a visitor: point the camera you already have open.

Multilingual is also an accessibility answer, not just a language one

The same code-per-language pattern that solves interpretation in Italian or French also lets a venue offer a plain-language or large-print destination page from the same panel real estate, without a second physical label.

Budget: pilot free, commit for £9 a month

Static codes are free, unlimited and never expire, and they're the right choice while a collection is still being interpreted or a gallery is being trialled: paste the list, download, print, done, no account needed. The moment you want to repoint a mislabelled exhibit without reprinting the panel, or you want the scan data that makes the per-exhibit engagement picture possible, that's a dynamic code, and dynamic codes need an account. Three are free, which is enough to pilot one small gallery or a single trail stop end to end before deciding anything. A thirteen-exhibit, two-language collection is twenty-six codes, which is past the free allowance and needs Pro at £9/month, one of the smallest line items an interpretation budget will see all year, and considerably less than the labour of retyping labels by hand across accounts because nobody looked at the plan first.

Build the cross-product of exhibits and languages as a plain list, one destination per code with a label like "Exhibit 03 - IT", and paste the whole list into the bulk generator to produce every code in one pass named consistently.

Make the whole set at once

The bulk tool opens seeded with the shape of this job: example rows in your vocabulary, and the filename pattern that suits it. Free, unlimited and with no account for static codes.

Open the bulk generator