You wrote a clean message. Your 10DLC campaign is approved. Your opt-in list is real. And your delivery rate still dropped off a cliff the day you started shortening your links with bit.ly. That's not bad luck — it's how carrier filtering treats shared shortener domains, and it has almost nothing to do with your content.
Full disclosure: I work for Ready, an SMS platform. We deal with this exact problem constantly, so I have opinions. But the mechanism I'm about to walk through is vendor-neutral — it's true whether you send through us, Twilio, or anything else.
The domain is what gets scored, not your text
Carriers and their spam-filtering partners don't just read your message body. They extract every URL in it, resolve the domain, and check that domain's reputation. That reputation is a rolling score built from every message that has ever carried a link on that domain.
Here's the problem with bit.ly, tinyurl, is.gd, and every other free public shortener: millions of senders share the same domain. Legitimate newsletters, phishing campaigns, sketchy crypto pumps, and your local dentist's appointment reminder all resolve to bit.ly/. The filter can't tell your link apart from the scam link — same domain, same reputation bucket.
So the reputation of bit.ly isn't yours to control. It's the aggregate behavior of everyone using it, and enough of them are spammers that the domain sits permanently on the "treat with suspicion" list. Some carriers throttle it. Some silently drop messages containing it. T-Mobile in particular has been aggressive here.
The frustrating part: you never get a bounce. The carrier accepts the message, returns a "delivered" receipt to your platform, and quietly filters it before it reaches the handset. Your dashboard says 98% delivered. The recipient got nothing. If that gap sounds familiar, we broke it down in detail in your 98% delivered rate is lying to you.
Why a shortener at all — and why the raw URL isn't better
You might be thinking: fine, I'll just paste the full URL. Sometimes that works. But long URLs have their own problems.
- A 90-character tracking URL with UTM parameters eats most of your 160-character segment budget, pushing you into multipart segments at 153 chars each — which multiplies your cost.
- Raw URLs with lots of query parameters can themselves look suspicious to filters (long random strings read like tracking-heavy spam).
- You lose click attribution entirely.
So the real question isn't "shorten or not." It's "shorten on a domain whose reputation you own, or a domain that 40,000 spammers ruined for you."
The fix: a branded (dedicated) short domain
A branded short link uses a domain you register and only you send on. Instead of bit.ly/3xR2k, it's go.yourbrand.com/spring or yb.link/spring. The redirect logic is identical. The difference is that the reputation attached to that domain is built entirely from your own sending.
That has two effects:
- You start with a clean slate. No inherited spam penalty. A brand-new domain has no reputation, which filters treat far more neutrally than a known-bad shared shortener.
- You control the reputation from then on. Send opted-in, wanted messages and the domain's score climbs. Your good behavior compounds instead of being diluted by strangers.
The tradeoff is honest and worth stating: a brand-new domain also has to earn trust. Warm it up. Don't register go.yourbrand.com on Monday and fire 50,000 links through it on Tuesday — that pattern itself looks like a spammer standing up a fresh domain. Ramp your volume over a couple of weeks. And relatedly, don't put a link in your very first text to a new contact at all; carriers reward a two-message warmup before the first link.
Shared vs. branded vs. raw URL, side by side
| Approach | Reputation you inherit | You control it? | Click tracking | Segment cost |
|---|---|---|---|---|
| Public shortener (bit.ly) | Everyone's, mostly bad | No | Yes (bit.ly's) | Low (short) |
| Raw full URL | None (domain = your site) | Partially | No | High (long) |
| Branded short domain | None to start, then yours | Yes | Yes (yours) | Low (short) |
Branded is the only row where you get short links and tracking and a reputation you own. That's why it's the standard fix for anyone sending at volume.
The click-tracking catch nobody mentions
Here's the part that trips people up. A branded short domain still works by redirecting — the recipient taps yb.link/spring, hits your domain, and gets bounced to the real destination. That redirect is exactly how you capture the click.
But a redirect is also a signal filters watch. A link that resolves to one domain and immediately 301s to another looks, structurally, like a cloaking technique. If your branded domain's reputation is solid, that's fine. If it's new or borderline, the redirect can be the thing that tips a message into filtering.
So there's a genuine attribution-vs-deliverability tension here, and it's not one you fully escape by going branded — you just move it onto a domain you can manage. We went deep on that line in every click you track is a redirect the carrier can flag and on the branded setup that tracks without tripping filters. The short version:
- If you need attribution, use a branded domain and warm it — don't track through a public shortener.
- If a specific campaign is delivery-critical (a 2FA code, an appointment confirmation), consider skipping the tracked link entirely and sending the raw destination or no link at all.
- Never assume the link preview/unfurl helps — iPhone strips most of those anyway.
What this looks like in practice
A worked example. Say you're sending a spring promo to 5,000 opted-in contacts. Message is 140 characters plus a link, one segment.
On Ready's Standard tier that's 5,000 × ($0.02 + $0.0045) = $122.50 for the blast, assuming everything lands.
Now suppose you shortened with bit.ly and T-Mobile filters 35% of your T-Mobile subscribers silently. If T-Mobile is ~40% of your list, that's roughly 700 messages you paid for that never arrived. Same $122.50 bill, meaningfully fewer conversions — and you'd never know from the dashboard, because they all came back "delivered."
The branded domain doesn't change what you're billed. It changes how many of those messages actually reach a phone. That's the ROI: you're already paying for the send; filtering means paying for sends that evaporate.
Where Ready fits
We run 10DLC registration in-app (brand + campaign, approval typically 1–3 days), enforce quiet hours by the recipient's local time, honor STOP automatically and propagate the opt-out across campaigns, and route over multiple carrier providers for redundancy. That stack keeps the sender-side signals clean so your domain reputation isn't fighting a rejected campaign or a messy consent trail on top of everything else.
Registration alone doesn't cure content-level filtering, though — an approved campaign can still get throttled on message content, which we covered in approved but still filtered. A shared-shortener domain is one of the most common content-level triggers. Clean domain, clean content, warmed number — you need all three.
The practical takeaway
- Public shorteners hand you a domain reputation ruined by strangers, and you can't fix it.
- A branded/dedicated short domain gives you a clean slate and a reputation you own — the standard fix for volume senders.
- It's not free: you have to warm the domain and you still carry a redirect that filters can scrutinize.
- Weigh tracking against deliverability per campaign. Transactional and delivery-critical sends can skip the tracked link entirely.
If you're sending real volume and still leaning on bit.ly, the branded domain is the highest-leverage single change you can make to delivery. Set one up, warm it slowly, and watch the real (not the "delivered"-receipt) numbers.
If you want the sending side handled while you sort out links, you can start on Ready with 2,500 free credits, no card required, at app.tryready.com/signup, or read more about how the platform handles deliverability at tryready.com/readysms.