Blog

301 vs 302 redirects: which one a short link should use

A 301 is cached by the browser forever, which silently stops your clicks being counted. Why gc.mw defaults to 302, and when to override it.

By Wasim Idrishi · Updated · 5 min read

Someone printed 8,000 flyers with a short link on them, and three weeks later the click count froze. The link still worked. People were still scanning it. The number simply stopped moving.

The link had been created with a 301.

What the browser does with each code

A 301 says "this has moved permanently". Browsers take that literally: Chrome, Safari and Firefox all cache a 301 and, on the next click, skip the network entirely. The request never reaches us, so there is no click to record and no chance to change where the link goes. Chrome caches a 301 until the profile's cache is cleared, which for most people is never.

A 302 says "found, but ask me again next time". Every click comes back to the server. That round trip is what makes a short link editable and countable — the two things a short link exists for.

The four codes, in the terms that actually matter

CodeCached by the browserMethod preservedSensible use for a link
301Yes, aggressivelyNo, POST may become GETA page that has genuinely moved and will never move back
302No, unless you send caching headersNo, POST may become GETAnything you may edit, count or expire — the default for short links
307NoYesRedirecting a form submission or an API call
308YesYesA permanent move where the method must survive
Behaviour that affects a short link, per RFC 9110 §15.4

The two columns people forget are the interesting ones. 301 and 308 are the cached pair; 302 and 307 are the "ask again" pair. Whether the method survives only matters when something other than a person clicking is being redirected.

Why gc.mw defaults to 302

Three reasons, in the order they came up while building the redirect path.

A short link is a promise you can keep. The whole point of putting gc.mw/menu on a laminated card is that the menu can move next year and the card stays valid. That only holds if the browser keeps asking.

Analytics need the request. Our click pipeline records the event on the redirect and hands it to a queue rather than writing it inline — the redirect itself does no database write. That is cheap, but only for requests that arrive.

Expiry and safety need the request too. If a link is reported and blocked, or hits its expiry date, we can only stop serving it to people whose browsers still come to us. Cached 301s keep sending traffic to a destination we have already decided is unsafe.

The cost of the default is one round trip per click, and we hold that to a budget: under 10 ms at the edge for a simple link served from KV, and a p50 under 15 ms at the origin with a p99 under 60 ms. Those are the numbers the redirect path is designed and monitored against, not a marketing claim — the hot path does a cache lookup and returns, with no database write and no user-agent parsing in the way.

When to override it

Set a 301 when the link is genuinely permanent and you will never want to edit or count it: an old domain of yours pointing at the new one, or a retired page pointing at its replacement. Search engines pass signals through a 301, which is exactly what you want for a moved page and exactly what you do not need for a campaign link.

Set a 308 for the same situation when a form or API call travels through the redirect and the method must survive.

Set a 307 when you are redirecting a POST and the destination is temporary — an API endpoint being moved during a migration, for example.

For everything else, leave it at 302. In three years of running links for print, WhatsApp and Instagram bios, the only regret worth having is a cached 301 on a link that later needed to change.

Chains are where this gets messy. A link that redirects to a link that redirects to a page can mix codes, and the first cached 301 in the chain freezes everything after it.

Redirect Checker

Open the full tool

Paste any URL and you get every hop with its status code, plus a note about what the chain means. Two things worth looking for: a 301 anywhere near a link you may want to edit, and a hop that drops from https to http, which browsers warn about and which lets the redirect itself be tampered with.

The rule, stated plainly

If you might ever change where it points, or you want to know how many people clicked it, use a 302. If it has moved for good and you want search engines to know, use a 301. Everything else is detail.

Questions people ask

Does a 302 hurt SEO?

Not for a short link. Search engines index the destination page, which is where your content and your canonical tag live; the short link itself carries X-Robots-Tag noindex. A 302 only matters for SEO when you permanently move a page you want indexed — then use 301 or 308 so signals transfer to the new URL.

Why did my click count stop going up?

Almost always a cached 301. The browser stops asking the server and goes straight to the destination, so there is no request to count. Nothing on the server can undo that for people who already have it cached; the fix is to use a new code and serve 302 from then on.

What is the difference between 302 and 307?

A 307 guarantees the method is preserved, so a POST stays a POST. A 302 historically allowed browsers to turn a POST into a GET, and most still do. For an ordinary link that a person clicks, both behave the same; use 307 when a form or an API call is being redirected.

Which code does gc.mw use by default?

302. You can set 301, 302, 307 or 308 per link in the dashboard, and the redirect updates within about a second because changing a link invalidates its cache entry everywhere.

Sources

  1. RFC 9110 §15.4 — Redirection 3xx — checked 5 September 2026
  2. Google Search Central: redirects and Google Search — checked 5 September 2026

Try it with your own link

Paste a long link and get a 10-character gc.mw link with a QR code. No account needed for 30 days; free forever with one.