Skip to main content
EZQR
Technical··Updated Aug 2026

Why Your QR Code Expired (and How to Fix It)

TL;DR

A QR code has no expiry field and no timer. The printed pattern encodes either your destination directly, in which case nothing can switch it off, or a short redirect URL, in which case the vendor holding that redirect can. When a code "expires" it is one of six things: the subscription lapsed, a scan cap was reached, the destination URL died, the domain lapsed, the code was manually deactivated or scheduled, or the print itself failed. Scan it and read the address bar. That one step tells you which half of the list you are in.

Key Takeaways

  • The QR specification, ISO/IEC 18004, contains no expiry field. Nothing in the printed pattern can count down.
  • Scan the code and read the URL in your address bar. A vendor domain means dynamic and the redirect is the suspect. Your own destination means static and the pattern is fine.
  • Static codes cannot be switched off by anyone, including the generator that made them. That is the whole reason to prefer them for permanent objects.
  • Scan caps break codes as effectively as non-payment, and they do it while you are still a paying customer. QR Tiger caps free codes at 500 scans each; QR Code Chimp caps free usage at 1,000 scans a month.
  • On EZQR, a lapsed subscription leaves the three oldest dynamic codes redirecting and pauses the rest. Nothing is deleted, and resubscribing restores every code with its original short URL.
  • If the printed object must outlive the subscription, the fix is architectural: static codes pointing at a domain you own.

Nothing in a QR code can expire

Start here, because the word "expired" sends people looking in the wrong place.

The QR standard is ISO/IEC 18004. It defines a version, an error-correction level, a mask pattern, and the encoded data. There is no timestamp, no expiry field, no counter. A printed QR code is a fixed arrangement of black and white squares, and squares do not run out.

So the code did not expire. Something it depends on stopped answering.

Which something depends entirely on what the pattern encodes. There are only two possibilities, and telling them apart takes about ten seconds.

A static code encodes your destination directly. The characters of https://yourdomain.com/menu are physically present in the modules. No server is consulted. No account exists. The generator that produced it could shut down tomorrow and nothing would change.

A dynamic code encodes a short URL belonging to a vendor. Scanning hits that vendor, and the vendor forwards the scan to whatever destination you configured. Editable after printing, which is the point, and dependent on a service staying switched on, which is the cost.

Everything that follows is about finding out which of six things broke.

Diagnose it in about a minute

Scan the code with your phone. Do not tap through. Read the URL that appears in the address bar or the camera preview.

If you see a vendor domain — anything like qrco.de/..., flowcode.com/..., ez-qr.com/r/... — the code is dynamic and a redirect sits in the path. Work down the first three causes below.

If you see your own destination and it loads, the code is static and working. The problem is on the destination side, or in a specific scanner rather than the code.

If your phone camera shows nothing at all, the pattern itself is not being read. That is a physical failure, and it is the sixth cause.

The table maps the symptom to the cause so you can skip ahead.

What you see when you scanMost likely causeReprint needed?
Vendor page saying the code is inactiveSubscription lapsed or code deactivatedNo, if you resubscribe
Vendor page saying a limit was reachedScan cap hitNo — upgrade the plan
Vendor error or vendor homepageCode removed, or account closedLikely yes
Your URL loads a 404Destination page was moved or deletedNo — fix the page
Browser warning, or nothing loadsDomain lapsed or certificate expiredNo — renew the domain
Phone does not recognise a code at allPrint, size, contrast or damageYes

Tips

  • Test on a second phone before concluding anything. One device with an aggressive privacy setting or a cached redirect can produce a false diagnosis.
  • Test on a phone that has never scanned this code. A device that already joined the network or saved the contact can appear to succeed when the code is broken.

Cause 1: the redirect was switched off

This is the expensive one and the most common. The subscription lapsed, a card expired, a trial ended, or somebody cancelled without realising what was printed.

What happens next is entirely a matter of vendor policy, and vendors differ more than their marketing suggests.

Here is ours, stated precisely, because we can read our own source. Cancelling changes nothing immediately: the plan runs to the end of the period you already paid for. When that period ends the account drops to the free plan, which allows three dynamic codes. The three oldest dynamic codes stay live and keep redirecting. Every dynamic code beyond those three stops resolving and sends scanners to a page saying the code is inactive. Nothing is deleted, and resubscribing turns every paused code back on with the same short URL.

Other vendors publish other rules, and some publish rules that contradict each other. The Flowcode Terms of Use state that codes above the free threshold are archived and redirected to flowcode.com or another location of their choosing, while the Flowcode help centre states that all other codes keep scanning to the destination you set. Those are different outcomes for the same event.

The fix. Log into the vendor. If the account exists, resubscribe, then rescan the printed code to confirm it resolves. Most cases end here and cost you a month of subscription rather than a print run.

If the account is gone or the vendor has shut down, the printed short URL belongs to a domain you do not control and cannot be recovered. New codes, new print. There is no way around that, which is why the prevention section below is the part worth reading before you need it.

Cause 2: a scan cap, while you were still paying

This one surprises people, because nothing was cancelled and no invoice was missed.

Several generators meter scans rather than codes. Cross the ceiling and the redirect stops, usually with a page inviting an upgrade. QR Tiger allows three dynamic codes on its free tier and stops each at 500 scans. QR Code Chimp allows ten free dynamic codes against a shared ceiling of 1,000 scans a month. Flowcode allows two codes and 500 scans.

Put a real number against 500. A table tent in a moderately busy cafe collects somewhere around 15 to 40 scans a day, so the ceiling arrives inside five weeks at the low end. A window decal on a busy street can pass it in a fortnight.

The failure mode is unusually cruel. The code works during testing, works through the soft launch, and dies during the week the campaign finally lands.

The fix. Upgrade the plan, or move to a vendor that meters codes rather than traffic. EZQR does not cap scans on any tier, free or paid, which is worth verifying yourself rather than taking from a page we wrote.

Causes 3 to 5: the destination died, not the code

If scanning takes you somewhere and that somewhere is broken, the QR code did its job perfectly. The pattern decoded, the redirect resolved, and the URL was wrong.

The page moved or was deleted. Someone reorganised the site, changed a slug, or retired a landing page. A static code pointing at that URL now scans cleanly into a 404. There is nothing wrong with the code and nothing to reprint. Restore the URL, or add a server-side redirect from the old path to the new one.

The domain lapsed. Registration expired and the destination stopped resolving entirely. Renew it. If it was bought by someone else, every printed code pointing at it now sends your customers to a stranger, which is a genuine security problem and worth treating as urgent. Our security practices post covers what an abandoned destination exposes you to.

The code was deactivated or scheduled. Most platforms let you switch a code off, set a start date, or set an expiry deliberately. Someone may have used one of those. Check the dashboard before assuming a billing problem, because a scheduled start date that has not arrived produces exactly the same symptom as a lapsed subscription.

Cause 6: the print failed, not the software

If a phone camera does not recognise a code at all, no amount of dashboard work will help. Four print failures account for most of these.

Too small for the distance. The rule of thumb is roughly 1mm of code width per 10mm of scanning distance, so a code read from two metres needs to be about 20cm across. Our size guide has the table.

Rasterised artwork. A PNG sized for a phone screen and then enlarged to poster size softens the module edges until decoders give up. Print from vector. Ask the shop for SVG, PDF or EPS, and see the SVG page for what to hand over.

Insufficient contrast, or inversion. Light modules on a dark background defeat some scanners, and a low-contrast brand palette defeats most. Dark on light, with real contrast.

Damage, glare or lamination. A code that lost a corner may still decode if the error-correction level was high enough, which is what error correction buys you. Glossy lamination under a spotlight can wash out a code that scans perfectly in the design file.

The fix for all four is a proof. Print one at production size on production stock, scan it on three phones under the lighting where it will actually live, at the distance people will actually stand. That test costs a few pounds and catches nearly everything.

Prevention is architectural, not vigilance

Calendar reminders and careful billing help, but they do not solve this. The structural fix is to remove the dependency.

Use static codes for anything permanent. Engraved signage, building plaques, product moulds, headstones, packaging with a long shelf life. A static code has no server, no account and no subscription in the path, so nothing can switch it off. You give up the ability to change the destination, which is the trade you want on an object that will outlive the campaign.

Point static codes at a domain you own. This is the technique that gets you both properties, and almost nobody does it. Encode yourdomain.com/menu into a static code and run a redirect on your own server. The printed code has no vendor dependency at all, and you can still repoint the destination whenever you like by editing your own redirect. You own the failure mode instead of renting it.

If you must use dynamic, get the lapse rule in writing first. Ask the vendor what happens to existing codes on cancellation, and if only some survive, which ones and on what rule. Screenshot the answer. The dynamic generator comparison has the full list of five questions worth sending before a print run, and the permanent code guide covers why no dynamic option is truly permanent.

Never print a free-trial code in volume. The economics are absurd. A reprint of 500 flyers costs more than a year of any entry plan in this market, and the cost breakdown puts real numbers against that comparison.

Keep a register. One spreadsheet: short code, destination, where it is physically deployed, which vendor holds it. When something breaks you will diagnose it in minutes, and if you ever migrate vendors that sheet is the migration.

FAQ

Do QR codes expire?

No. ISO/IEC 18004 defines no expiry field, so nothing in the printed pattern can count down. Static codes work as long as the pattern is intact and the destination resolves. Dynamic codes work as long as the vendor keeps the redirect switched on, which is a billing question rather than an expiry one. The [expiry explainer](/blog/do-qr-codes-expire) covers the distinction in full.

How do I tell whether my code is static or dynamic?

Scan it and read the URL before tapping anything. A vendor domain such as qrco.de or ez-qr.com/r/ means dynamic. Your own destination URL means static. That single check decides which half of the diagnostic list applies.

My QR code stopped working two weeks after I printed it. Why?

Two likely causes. Either a free trial ended and the redirect was switched off, or a scan cap was reached. Check the vendor dashboard for the code status: a plan-limit message points at the cap, an inactive or expired status points at billing. Both are recoverable without reprinting if the account still exists.

Can I recover a dynamic QR code after the subscription lapsed?

Usually yes, if the account still exists. Resubscribe and rescan the printed code to confirm. On EZQR every paused code returns with its original short URL, so printed material starts working again. If the vendor has shut down or the account was deleted, the printed short URL cannot be recovered and you need new codes and new print.

What happens to my EZQR codes if I stop paying?

You keep everything to the end of the period you paid for. After that the account drops to the free plan, so the three oldest dynamic codes keep redirecting and the rest pause. Nothing is deleted, and resubscribing restores every code with the same short URL. Static codes are unaffected permanently, because no server sits in their path.

How do I make a QR code that can never be switched off?

Generate a static code pointing at a domain you own, then control the redirect on your own server. The pattern has no vendor in it, so no subscription can break it, and you keep the ability to change where it lands by editing your own redirect. That is the only configuration that gives you both permanence and editability.

My static code scans but lands on an error page. What broke?

The destination, not the code. Either the page was moved or deleted, or the domain lapsed. Restore the URL, add a redirect from the old path, or renew the registration. Check the domain first if nothing loads at all, since an expired registration can put your printed codes in someone else's hands.

Does a damaged QR code still work?

Often, depending on the error-correction level chosen when it was generated. Level L tolerates roughly 7 percent damage and level H around 30 percent. A code printed at level H with a clean quiet zone survives surprising abuse. One printed at level L with a logo dropped over the middle may fail from day one.

More From This Category

Related Articles

Related Guides

Related Tools

Written by

Tasnim Ahmed
Tasnim Ahmed

Founder, EZQR

Tasnim Ahmed founded EZQR and writes its guides on QR code strategy, print workflows, and the specifications behind whether a code actually scans.

Ready to create your QR code?

No signup for static codes. Dynamic codes start at $5/mo. No watermarks, no expiry.

Compare EZQR plans