A restaurant prints its menu QR code on every table. Two years later the code leads to an advertising page, or nothing at all. The printing was fine; the code was rented.
Most free generators produce a dynamic code: what gets printed is a link to their server, which then redirects to your address. That indirection is useful — you can change the destination later — but it means your printed code only works while that company keeps running it, and keeps it free.
A static code contains your content directly. Scanning it needs no server and no company: the data is in the pattern printed on the paper, so it works forever and offline. A dynamic code contains someone else's short link. It can be edited and it can be tracked — and it can be switched off, rate-limited, or turned into an upsell when the free tier changes.
For anything printed and left in the world, static is the safer default. For a campaign you expect to redirect later, dynamic is the point, and it is worth paying a provider you trust rather than using a free one.
Anything textual fits, and phones understand several conventions:
Keep a quiet zone: empty space around the code roughly four modules wide. Codes placed tight against a border or a photo fail more often than people realise.
Print dark on light, not the reverse, and avoid placing the code over a busy background. Keep contrast high, and test with more than one phone before you print a thousand copies.
Size follows distance: roughly one centimetre of code for every ten centimetres of scanning distance. A table card needs two to three centimetres; a poster read from three metres needs about thirty.
A static code cannot be edited and cannot count scans. If the destination might change, encode a URL you control — your own domain with a redirect you own — which gives you the editability of a dynamic code without renting the code itself from anyone.