You want to know which text drove the click. Reasonable. So you wrap your link in a tracker — bit.ly, a generic click-tracking redirect, whatever your platform offers — and now you've got a tidy dashboard showing 340 clicks off a 5,000-contact blast.
What that dashboard doesn't show you: the 900 people who never got the text at all, because the carrier filtered it on the way out. And the reason it got filtered is the exact thing you added to track clicks.
Full disclosure: I work for ReadySMS, so I have a horse in this race. But this problem is provider-agnostic — it'll bite you on Twilio, on GoHighLevel, on us, on anyone. The fix is the same everywhere, and it's worth understanding before you attribute a bad campaign to bad copy.
Why carriers care about the link, not just the message
Carrier-level SMS filtering (T-Mobile's is the strictest, but they all do it) scores every message before it reaches a phone. Content, sender reputation, opt-in signals — and crucially, the domain of any URL in the message.
The domain is one of the highest-signal spam indicators a carrier has. Spammers rotate through free public shorteners constantly, so a link on a domain that thousands of unrelated senders also use inherits every one of their reputations. You could send the cleanest, most consented message in the world, and if it points at bit.ly/xyz, you're borrowing the aggregate reputation of everyone else on bit.ly — including the phishing kits and the pill spam.
The carrier doesn't see your link. It sees the domain. And a shared shortener domain is guilty until proven otherwise.
We've written the mechanism up in more depth in Why bit.ly Links Get Your Texts Filtered and a Branded Domain Doesn't, but the short version is: reputation attaches to the domain, and public shorteners are shared domains.
The specific trap: your tracker IS a shortener
Here's what trips people up. They know not to paste a raw bit.ly link. But they turn on "click tracking" in their sending tool without realizing that click tracking works by rewriting the link into a redirect on the tool's tracking domain.
That's how tracking functions. To count a click, the platform has to route the tap through its own server first, then bounce the user to the real destination. So a message that looks like:
Your order shipped! Track it: yourstore.com/track/8823
quietly becomes:
Your order shipped! Track it: trk.someplatform.io/a8Kd2
And trk.someplatform.io is a shared domain used by every other customer on that platform who also turned on tracking. You've reintroduced the exact problem you were trying to avoid — you just did it through a feature toggle instead of a paste.
The filtering doesn't announce itself. You'll see a "delivered" status because the message left the platform successfully, but as we covered in Your 98% 'Delivered' Rate Is Lying to You, "delivered" from your platform's view and "handed to the handset" are two very different events. A carrier-filtered message often reports as sent or delivered while never reaching the phone.
What the filter actually costs you in dollars
Let's make it concrete. Say you run a 5,000-contact promo. Single-segment message, ReadySMS Standard pricing: $0.02/segment + $0.0045 carrier pass-through = $0.0245 each.
- 5,000 × $0.0245 = $122.50 for the send.
Now suppose the shared tracking domain drags your delivery from a realistic ~95% down to ~78% because T-Mobile is filtering aggressively. That's roughly 850 contacts who paid to be messaged and got nothing.
- 850 × $0.0245 = ~$20.83 of send spend that produced zero reach.
Twenty bucks per blast doesn't sound catastrophic. But the real cost isn't the wasted segments — it's the revenue behind the 850 people who never saw the offer, plus the sender-reputation damage that makes your next send land worse. Filtering compounds. A domain that gets flagged keeps getting flagged.
The fix: a dedicated branded short domain
You don't have to choose between analytics and delivery. You get both by tracking on a domain you own and nobody else sends on.
A branded short domain is a short, dedicated domain — something like go.yourstore.com or yst.re — that only your messages use. The click tracking still works exactly the same way (redirect through the domain, count the tap, bounce to the destination). The difference is that the domain's reputation is yours alone. Nothing anyone else does can poison it, and as your legitimate traffic builds a clean history, carriers learn to trust it.
Here's the tradeoff laid out honestly:
| Approach | Click analytics | Delivery risk | Setup effort | Ongoing cost |
|---|---|---|---|---|
| No link tracking | None | Lowest | None | None |
| Public shortener (bit.ly, etc.) | Full | High — shared reputation | Trivial | Free / cheap |
| Platform's shared tracking domain | Full | High — shared reputation | One toggle | Bundled |
| Dedicated branded short domain | Full | Low — isolated reputation | Moderate (DNS) | A domain registration |
The branded-domain row is the one you want. The only real cost is registering a short domain and pointing a DNS record — a one-time afternoon, then it just works.
Setting it up without breaking anything
The mechanics aren't hard, but the order matters:
- Register a short, on-brand domain. Shorter is better for character count — every character you spend on the URL is a character closer to the 160-vs-153 segment cliff that can silently double your per-message cost.
- Point it at your tracking infrastructure via a CNAME or the DNS record your platform specifies. In ReadySMS, link management maps a custom domain to the click-tracking redirect so your dashboards keep working under your own domain.
- Serve it over HTTPS. A tracking domain that only speaks HTTP looks sketchy to both browsers and reputation systems. Get the cert provisioned before you send.
- Warm it gently. Don't blast 50,000 messages on a domain with zero history on day one. Carriers reward consistent, gradual volume. Start with smaller sends and ramp.
- Keep the destination domain sane too. If your tracking domain redirects to a sketchy or brand-new final URL, some filtering follows the redirect chain. The whole path should look legitimate.
One more thing: a branded domain doesn't excuse you from the rest of the deliverability stack. It sits alongside proper 10DLC registration, clean opt-in, and quiet-hours enforcement. A dedicated domain on an unregistered campaign still gets filtered — the domain is one signal among several.
When you can skip all of this
Honesty clause, because I promised: not every sender needs a branded short domain today.
- If you don't include links at all — appointment confirmations, one-time codes, plain text-back conversations — there's no domain to track and nothing to filter on. Skip it.
- If your link is already your own root domain and it's short enough (
yourstore.com/x), you may not need a separate short domain at all. You lose per-message click attribution, but your reputation is already isolated. - If you're sending a few hundred messages a month to a warm, engaged list, the filtering hit is smaller and the ROI of setup is lower. Watch your delivery, and set it up when volume justifies it.
The moment to act is when you're running data-driven campaigns at real volume and making decisions off click numbers — because at that point, a delivery hit doesn't just cost reach, it corrupts the data you're optimizing against.
The practical takeaway
Click tracking is worth having. Shared tracking domains are what make it dangerous, not tracking itself. The whole problem — public shorteners and bundled tracking domains alike — is that reputation attaches to the domain, and you're renting a domain that thousands of strangers also use.
Register a short domain, own it, track on it, warm it up. You keep every click number and stop borrowing other people's spam reputation.
If you want to see how the link management and deliverability pieces fit together — custom tracking domains alongside 10DLC handling, STOP propagation, and quiet-hours — the integrations page lays out the stack, and you can start with 2,500 free credits and no card to test delivery on your own list before you commit. Send a small batch with a branded domain, check what actually lands, and let the numbers decide.