HTTP gives you two kinds of redirect, and they are not interchangeable: they differ in caching behavior, in how search engines treat them, and in whether you can measure anything afterwards. This guide is the decision framework — for short links, for domain moves, and for content changes.
The semantics, precisely
| 301 Moved Permanently | 302 Found (Temporary) | |
|---|---|---|
| Meaning | This URL is permanently replaced | This URL is temporarily elsewhere |
| Browser caching | Aggressive — repeat visits skip the old URL | Not cached; every request follows the chain |
| Search engines | Consolidate signals onto the target | Keep both URLs; attribute with care |
| Analytics | First visit only | Every visit |
The practical consequence: a 301 turns off the measurement point. Browsers remember the mapping and resolve it locally; the shortener never sees the second, third, or tenth click.
The short-link rule: always 302
Short links exist to be measured. The platform must see every click — for totals, series, referrers, and bot filtering — and 301 caching breaks that at the browser level. The analytics pipeline depends on the redirect happening every time.
The SEO objection — "but 301 passes more link equity" — misunderstands the architecture. The short link is not the ranking page; the destination is. The destination carries its own canonical, metadata, and backlinks, and receives the visitor (and the crawler) via the 302. The understanding URL shortening guide covers the full chain.
The destination rule: 301 when the page really moved
On your own site, use 301 when a URL is permanently replaced:
old: example.com/blog/old-slug
new: example.com/blog/new-slug ← 301 from old to new
old: www.example.com → example.com ← 301 (canonical host)
old: http:// → https:// ← 301 (protocol upgrade)
After the move: keep the destination's canonical self-referential, submit the new URLs in Search Console, and monitor the transition window — 301s pass signals but the crawl-and-replace cycle takes time. The custom domain setup guide shows the same discipline applied to branded short domains.
The measurement consequences, in practice
Consider a campaign link shared in an email sent to 10,000 people:
| 301 | 302 | |
|---|---|---|
| First open | counted | counted |
| Second open (browser cache) | not counted | counted |
| Forwarded click | not counted | counted |
| Reported total | ~2,000 of 10,000 | ~4,500 of 10,000 |
The 302 number is the honest one. Any decision made on 301 totals — budget allocation, channel comparison, campaign kill/keep — is made on partial data. This is why conversion tracking and channel comparison both assume a 302 link layer.
Redirect chains and latency
Redirects stack: a short link → destination → (maybe) another redirect. Each hop costs latency and crawl budget. Keep chains to one hop, and keep each hop fast:
Bad: short.link/a → lander → old-page 301 → new-page
Good: short.link/a → new-page (one hop)
Edge-cached redirects answer in ~30–50ms; every extra hop multiplies. If you control the destination, fix the chain there rather than papering over it with another redirect.
The decision table
| Situation | Code | Why |
|---|---|---|
| Short link (analytics platform) | 302 | Keep every click measurable |
| Domain migration on your site | 301 | Consolidate signals permanently |
| HTTP → HTTPS | 301 | Permanent, security-relevant |
| A/B test between destinations | 302 | Switch targets without cache pollution |
| Temporary campaign swap | 302 | Restore the old target later |
| Permanent content move | 301 | Tell crawlers the URL is gone for good |
What the status code communicates
The three-digit status tells the browser, and search engines, how to treat the redirect. A 301 (Moved Permanently) says the destination has moved for good; browsers and crawlers may cache it and transfer authority to the new URL. A 302 (Found) — and its modern equivalent 307 — says the move is temporary; the original URL remains the canonical address and should keep its authority. This difference is why the choice matters for both SEO and for analytics, not just for whether the redirect works.
The SEO and link-equity angle
For anything that has accumulated ranking value, the choice between 301 and 302 is consequential:
- A 301 signals a permanent relocation, so search engines consolidate the old URL's signals into the new one over time. Use it when you are permanently moving a page or link from one address to another — for example, migrating a blog URL, or moving an old short link's destination permanently.
- A 302 tells crawlers to keep the original URL as the real address. Use it when the redirect is temporary — a campaign page that points at a seasonal destination, an A/B variant, or a redirect you expect to reverse.
The practical rule: permanent move → 301; temporary state → 302. Using a 301 for something you will revert, or a 302 for a permanent migration, sends the wrong signal and can dilute or mis-route your link equity.
The analytics angle for short links
For short links, the status code is also a measurement decision. A 302 is the common default for link tracking because it returns the visitor through the short link layer each time, letting the platform count the click, filter bots, and record the source. A 301, because it may be cached and skipped on repeat visits, can undercount and bypass some tracking. This is why the link analytics model usually pairs with 302-style temporary redirects for click tracking, while permanent content moves use 301. Understanding this trade-off lets you choose the code that serves your priority — preserved authority or accurate per-visit tracking.
Making the choice deliberately
Rather than defaulting blindly, ask what the destination means: is this a permanent relocation of a piece of content (301) or a live, trackable pointer that may change (302)? Matching the code to the intent keeps both search engines and your analytics honest. For the fuller landscape of redirect statuses including 307 and 308, the redirect status codes deep dive is the reference.
Conclusion
The redirect status code is a product decision, not a trivia detail: 301 for permanent moves you want consolidated, 302 for anything that must stay measurable. Short links belong to the 302 family — the destination does the ranking, and the link layer does the counting. Verify the behavior live on any yas.sh link: every redirect is 302, every click is recorded, and the API docs document the contract.
