QR Code Generator for Links & Profiles
Create a QR code for a profile, menu, or campaign URL. Download a PNG you can print or add to a Story.
Runs in your browser. Nothing you enter is uploaded.
Overview
A QR code is a URL rendered as a grid of black and white squares that a phone camera can read from across a table. It solves one narrow problem well: getting a link from a physical surface - packaging, signage, a business card, a slide - into someone’s browser without them typing it.
This generator encodes whatever text or URL you enter into a 512-pixel PNG with colours you choose, rendered in the browser and downloadable immediately. The encoding is fixed and standards-compliant; the parts you control are the payload and the two colours.
Design choices that decide whether a code scans
Contrast is the whole game. Camera software finds a code by locating three high-contrast squares in the corners and then reading the grid between them. Dark foreground on a light background is what every scanner expects; inverting it - light modules on dark - fails on a meaningful share of readers even though the data is technically intact.
Pastel-on-white is the most common self-inflicted failure. A soft mint code on a white card looks pleasant in a design file and gives the camera almost nothing to threshold against, particularly under warm indoor lighting or on a phone two generations old. If you are colouring the code for brand reasons, pick the darkest version of the brand colour available.
The quiet zone - the blank margin around the grid - is part of the specification, not decoration. This generator includes a margin of two modules by default. Cropping it away in a layout tool, or butting the code against a photo or a coloured block, removes the boundary the scanner uses to find the pattern.
- Dark code on light background, never the reverse.
- Keep the built-in margin; do not crop to the edge of the grid.
- Print at 2 cm square or larger for handheld scanning; bigger for anything read at distance.
- Avoid glossy lamination where overhead lighting will reflect into the camera.
Making the destination outlive the print run
A printed code is permanent in a way a web link is not. Whatever URL you encode is what those cards, labels, or posters will point at for as long as they exist, and there is no editing them afterwards. Encoding a campaign landing page that will be retired in six months creates a stack of printed material pointing at a 404.
The way around this is indirection: encode a URL you control and can redirect, such as a short path on your own domain, then repoint that path whenever the destination changes. The code stays valid indefinitely and you keep the ability to change where it lands.
Adding UTM parameters to the encoded URL is worth doing for anything printed, since offline-to-online traffic is otherwise invisible in analytics. Build the tagged URL first, then encode it - a longer payload makes the grid denser, which is a reason to keep campaign names short rather than a reason to skip tagging.
What gets encoded and at what settings
The text you enter is encoded to a QR symbol and rendered to a 512-pixel-square PNG data URL, with a two-module quiet zone and your chosen foreground and background colours. The output regenerates on every keystroke and colour change, so what you see is always the current payload.
Error correction is set to level M, which reserves roughly 15% of the code’s capacity for redundancy. That is the standard general-purpose choice: it tolerates a scuff, a fold, or a printing defect while keeping the grid comparatively coarse and easy to read. Higher levels survive more damage but pack more modules into the same square, which makes each module smaller and can hurt scanning at small print sizes.
Payload length drives density directly. A short domain produces a sparse, forgiving grid; a long URL with several tracking parameters produces a dense one where every module is smaller at the same physical size. If a code looks visually busy, shortening the URL is more effective than enlarging the print.
Two payloads, two very different grids
Input
A: https://example.com/go/menu B: https://example.com/spring-menu-2026?utm_source=table_tent&utm_medium=print&utm_campaign=spring_menu_launch_2026
Output
A → sparse grid, comfortable scanning down to roughly 1.5 cm printed B → dense grid, needs about 3 cm printed for reliable handheld scanning
Both encode successfully and both work on a screen. On a printed table tent, B is the one that fails at small sizes in dim light, because the same physical square now has to resolve far more modules. Encoding a short redirect path that carries the parameters server-side gives you the tracking of B with the scannability of A.
Limitations
- The encoded payload is fixed at generation time. There is no dynamic or editable code here - changing the destination means reprinting unless you encoded a redirect you control.
- No scan tracking, analytics, or scan counts are provided. Attribution has to come from UTM parameters on the encoded URL.
- Error correction is fixed at level M and is not adjustable, so codes intended for harsh environments cannot be hardened here.
- Logo overlays and custom module shapes are not supported. Adding a logo in another tool eats into the error-correction budget and can break scanning.
- Low-contrast colour pairs will generate happily and fail to scan. The tool does not check contrast between your foreground and background.
- Output is a single 512-pixel PNG, which is adequate for screens and small print but below what a large-format printer would want.
When not to use this tool
- For a link people will encounter on a screen, a plain hyperlink is better - a QR code on a web page asks someone to point a second device at their first one.
- If you need scan counts, expiry, or the ability to change the destination after printing, use a dynamic QR service rather than a static encoder.
How to use it
- 1
Build the destination URL first - including any UTM parameters - and prefer a short path you control over a long campaign URL.
- 2
Paste it in and keep the foreground dark against a light background; darken any brand colour before using it.
- 3
Download the PNG and place it in your layout without cropping the white margin around the grid.
- 4
Print a proof at final size and scan it with an older phone under the lighting it will live in before committing to the run.
Questions
How small can I print a QR code?
About 2 cm square is a safe floor for handheld scanning of a short URL, and longer payloads need more. The governing rule is scanning distance: the code should be roughly a tenth of the distance it will be read from, so a poster scanned from three metres needs a code around 30 cm across.
Can I put my logo in the middle?
Not in this tool, and think carefully before doing it elsewhere. A centred logo covers data modules and relies on error correction to reconstruct them, which consumes the same redundancy budget that was protecting against print defects and scuffs. If you do it, keep the logo small and test the result on several phones.
Do QR codes expire?
The code itself never expires - it is a static encoding of text. What expires is the destination. A code from a decade ago still decodes perfectly to a URL that may no longer resolve, which is the argument for encoding a redirect path you control.
Why does my code scan on my phone but not on a customer’s?
Usually contrast, size, or lighting rather than the code. Newer cameras threshold low-contrast images far better than older ones, so a pastel code that works on a current flagship can fail on a three-year-old device. Test on the oldest phone you can find, under the lighting where it will actually be used.
Related tools
Related guides
Related tools
