Every few weeks someone asks me whether putting a short link in a tweet, a PDF, or a QR code "kills the SEO". The honest answer: it depends on the redirect your shortener returns — and you can check that in ten seconds.
Check what your shortener actually returns
curl -sI https://short.example/abc | grep -iE '^(HTTP|location)'
# HTTP/2 301
# location: https://example.com/landing
That's all a shortener is: a lookup table plus an HTTP redirect. What matters is the status code.
| Status | Meaning | SEO effect |
|---|---|---|
| 301 | Moved permanently | Google consolidates signals to the target. Best for links you'll never change. |
| 308 | Permanent, keeps method | Same as 301 for SEO. |
| 302 / 307 | Temporary | Google usually still follows and, if it stays long, treats it like permanent — but it's a weaker, slower signal. |
| 200 + JS/meta refresh | "Interstitial" page | Worst case: an extra page, often with ads, sometimes not followed cleanly. |
Things that actually cause problems
- Interstitial/ad pages. Some free shorteners show an ad page before redirecting. Crawlers and users both hate it.
-
Redirect chains.
short → tracking domain → http → https → www. Each hop adds latency and risk. Aim for one hop. - Shortener domains on spam lists. Shared shortener domains get abused; some platforms then block or warn on them.
- Dead services. If the shortener shuts down, every link breaks. This is the real long-term risk.
Where short links are fine
- Social posts, emails, SMS, print/QR: the links are usually nofollow or not crawled anyway — the goal is clean, trackable clicks.
- Internal analytics: a 301 with UTM parameters on the target works well.
Where to avoid them
- Links you place on your own site to your own pages — just link directly.
- Canonical tags, sitemaps, hreflang — always final URLs.
Minimal DIY shortener (for the curious)
// Node, no deps — illustrates the core idea
import http from 'node:http';
const links = { docs: 'https://example.com/docs' };
http.createServer((req, res) => {
const target = links[req.url.slice(1)];
if (!target) { res.writeHead(404).end(); return; }
res.writeHead(301, { Location: target, 'Cache-Control': 'max-age=3600' }).end();
}).listen(8080);
Real services add persistence, rate-limiting, abuse checks, and click stats — but the SEO-relevant part is just that 301.
TL;DR
- Use a shortener that returns a single 301 with no interstitial.
- Don't use short links for your own internal links or canonicals.
- Test with
curl -Ibefore you print anything.
I built a small free URL shortener while working on this — no sign-up, no expiry, no preview or waiting page; links look like riichimirza.com/s/abc — if you want to try one. Run the curl check on it too; you should verify every tool, including mine.
What redirect does your favourite shortener return? Curious what people find.
Top comments (0)