# QR codes for public transport riders

> Rider-facing transit codes work when they are stop-specific: the stop ID in the URL turns a generic timetable into this stop's next departures. Printed rail tickets usually carry Aztec codes, not QR: signage and information use QR. Mount codes at 1.0–1.4 m with a printed short URL beside them.

Source: https://useqr.app/qr-codes-for/public-transport · Last reviewed 2026-08-21 · UseQR is free forever, no signup.

---

## This page and the operations one

Sizing for platforms, load-time budgets and the sticker-fraud problem are covered on the
general [transport](/qr-codes-for/transport) page. This one is about the codes riders
actually touch: timetables, alerts and tickets.

## The stop ID is the whole product

A code that opens the operator's homepage gets scanned once. A code that opens *this
stop's* next departures (the stop ID carried in the URL) gets scanned daily. The
pattern:

```
https://operator.example/stops/4471
```

One page template, thousands of codes, generated
[in bulk](/docs/how-to/how-to-make-qr-codes-in-bulk) from the stop database. Behind the
same URL, offer the live board *and* the printed-timetable
[PDF](/pdf-qr-code) fallback, because underground and rural stops lose data coverage.

## Your ticket is probably not a QR code

Most European rail and airline tickets carry an [Aztec code](/glossary/aztec-code), a
square symbol with a bullseye centre. Aztec needs **no quiet zone**, so it packs into
tight ticket layouts, and the rail industry standardised on it years ago. Phone scanner
apps read both; generators do not, so do not try to reproduce a ticket barcode with a QR
tool. QR's territory in transit is signage, information and payment links, and ticket
*purchase* links, which must point only at your official domain
([fake payment stickers](/glossary/quishing) are the sector's known fraud).

## Service alerts

Disruption posters go up fast and come down late. Print the alert poster with a code to
the live status page rather than the details of one incident: the poster stays truthful
after the incident changes.

## Accessibility

- Mount codes at **1.0–1.4 m** so wheelchair users and children can reach the scan
  distance; a code at eye height for a standing adult is out of frame for a seated one.
- Print a short URL in large text beside every code: riders without a working camera,
  with low vision, or with a dead battery still get the information.
- Alert pages must be real HTML, not image scans of a notice.

## FAQ

### Why do train tickets use Aztec codes instead of QR codes?

Aztec codes need no quiet zone and were adopted as the rail-industry standard for mobile
and print-at-home tickets years ago. Phone cameras read both symbologies, but the choice
of ticket barcode belongs to the ticketing system, not a general-purpose QR generator.

### What should a bus stop QR code link to?

The departures page for that specific stop, with the stop ID in the URL. Serve the live
board where there is coverage and a timetable fallback where there is not. A code that
opens a generic homepage is not worth the rider's time.

### At what height should transit QR codes be mounted?

Between about 1.0 and 1.4 m. That keeps the code within reach and camera range for
wheelchair users while staying comfortable for standing riders. Always pair the code with
a short printed URL for people who cannot scan.

## Try it

- https://useqr.app/url
- https://useqr.app/location
- https://useqr.app/pdf
