Short answer
Make the code, add your logo in the middle at about a fifth of its width, use the highest error correction and keep a dark code on a light background. The free QR code generator on this site does all of that in your browser, with nothing uploaded. Then scan a printed copy before you order a batch.
Free tools for this
Why a logo can break a QR code
A QR code is a grid of small squares. A logo covers some of them. Scanners cope because the code carries spare data, called error correction, which lets it be rebuilt when part is missing.
There are four levels. The strongest can lose about 30% of the code and still read. A plain code uses a lower level to stay less dense. When you add a logo, the code has to switch to the strongest level, or the covered squares make it unreadable.
How big the logo can be
Keep the logo to about a fifth of the code's width, in the centre. The three large squares in the corners must stay clear, because the scanner uses them to find the code. A bigger logo looks bolder and scans worse.
A simple logo on a plain background survives better than a detailed one. If the logo has a transparent background, the tool puts the code's background colour behind it.
Try it now: QR Code Generator → · vCard QR Code Generator →
Colours that scan
Scanners look for contrast. A dark code on a light background works almost everywhere. Two mid-tone colours close together, such as grey on beige, often fail.
A light code on a dark background is readable by many phone cameras, but some scanner apps cannot read it. If you use it, test with more than one phone.
Static or dynamic
A static code holds the information inside it, so it never expires and has no scan limit. The cost is that you cannot change where it points after printing.
A dynamic code points to a link the provider controls. You can change the destination later and see scan counts, but it often stops working if the subscription ends. For printed material that has to last, a static code is the safer choice.
Test before you print
Scan the code with at least two different phones, one of them older. Test a printed copy at the size you will actually use, not only the screen. For print, download the SVG, which stays sharp at any size, and leave a clear blank border of a few millimetres around the code.