Links used to be dumb: one URL, one destination. brand.com/sale took everyone to the same page. That was fine in 2010. It is not fine in 2026.
Today the same link needs to send different people to different places: a Madrid iPhone visitor lands on a Spanish offer, a desktop user from Berlin lands on the DE page, the Facebook crawler lands on a neutral white page, the reader from your newsletter goes straight to checkout. One URL, six destinations. That is a smart-link.
A plain 301 redirect to a static URL is great when you migrate from one domain to another and nothing else. The moment you need one person to see X while another sees Y, you are in smart-link territory: routing on 5–6 signals with a fallback chain. It is not harder than configuring nginx, but it solves an order of magnitude more problems.
When the plain 301/302 stops working
Classic scenarios where “one URL, one redirect” falls over:
- Localized storefront. A Shopify shop selling in 12 countries. You want
shop.com/promoto send the Mexican visitor tomx.shop.com/promo, the Spanish visitor toes.shop.com/promo, everyone else toen.shop.com/promo. Handing twelve separate links to partners is asking for errors. - Creator with a single bio link. Instagram bio fits exactly one URL. You have five offers and want to rotate by geo and device.
- Landing-page A/B test. Two variants of a landing. You want 50/50 traffic split from a single link and proper conversion counts.
- Bot protection. Real users go to the offer; Google and Facebook crawlers go to a neutral white page. This is cloak-routing, not classic smart-link, but the mechanics are the same.
- Campaign with UTM. A visitor with
utm_source=newslettergets a personal discount.utm_source=facebookgets the regular price. Same link, different experience. - Transitional migration. Your store still lives on the old domain, but 30% of pages already moved to the new one. You want old URLs to forward, new URLs to open directly.
In every case you can hack around it with client-side JavaScript on the landing page (“detect language, redirect via window.location”). But that:
- looks like two chained redirects to search engines — SEO and Core Web Vitals tank;
- looks like “weird behavior” to Facebook — reach drops;
- does not work for users with JS disabled (less than 0.5%, but they exist, and they are often the most expensive traffic you have).
Six dimensions worth routing on
Any serious smart-link is a combination of these six signals:
-
Geo. Most common — country by IP. Country-level accuracy with a good database is 99.6%; city-level 88%. Decent options:
MaxMind GeoLite2,IP2Location, our internal DB. Remember: VPN/proxy gives a wrong signal in about 8% of cases. -
Device. Desktop, mobile, tablet; iOS vs Android; sometimes a specific model. Parsed from
User-Agent, but in 2026 UA is no longer source of truth — Apple and Chrome intentionally strip it. Pair it withSec-CH-UAclient hints and viewport width. -
Language. The
Accept-Languageheader. Sounds easy, until: a German user on an English macOS sendsen-US, de;q=0.9. Showing them English or German depends on who you are trying to sell to. - Traffic source. UTM tags, referer, click-id. “Came from newsletter” → one thing. “Came from Google Ads” → another. “Organic” → a third.
- Time. Timezone from geo, day of week, hour of day. If you run a food delivery app, route to a lunch landing at noon and a dinner landing in the evening. Sounds trivial — until conversion lifts 12%.
- Random split (A/B). 70/30 weights, sticky segments by cookie or fingerprint (so one person always sees the same variant). Without sticky it is not A/B, it is mush.
Teams that wire up all six dimensions on the first campaign mess it up more often: rules pile up to 30, debugging is hell, fallbacks are forgotten. Start with two. Geo + traffic source usually delivers 80% of the value of full routing. Add the rest only when you actually need it.
Fallback chain: what to do when no rule matches
Beginners' most common mistake is forgetting the default. Example: you set up “MX → mx.shop.com, ES → es.shop.com”. A Ukrainian visitor arrives. Where do they go? If you did not plan for it — 404 or redirect-into-nothing.
A proper smart-link is always an ordered chain of rules, with the last one being an unconditional fallback. Pseudo-config:
rules:
- if: geo.country == "MX"
redirect: "https://mx.shop.com/promo"
- if: geo.country == "ES" or accept_lang has "es"
redirect: "https://es.shop.com/promo"
- if: device.is_bot
redirect: "https://shop.com/about" # white page for crawlers
- default:
redirect: "https://en.shop.com/promo"
Key points:
- rules are evaluated in order — first match wins;
- there is an explicit bot route, so the crawler does not see the personalized page and decide it is a cloak;
- default is always there. Without it, the “never fall into null” rule is not satisfied.
When the plain 301/302 is the right answer
Smart-link is not a silver bullet. Three scenarios where a plain nginx redirect is better:
- Permanent domain migration. Old site → new site, forever. You need an honest 301 so search engines re-index. A smart-link looks suspicious to Google.
- One URL to one canonical page. If you just need
/old → /newwith no audience split — do not build a fence around it. - No logging or analytics. Smart-link makes sense when you watch click stats and learn from them. If the link is one-shot and forget — a 302 in nginx saves you 30 seconds.
What this looks like in TDS.SO
In TDS a smart-link is built visually without editing configs: add rules top to bottom in the campaign UI, each with its condition and destination. At the bottom — a required default. You can plug in a custom domain (go.brand.com) instead of the default tds.so/abc — branded short links get 30–40% higher clickthrough by our numbers.
Every click is logged with all matched signals: country, device, source, the rule that fired. This gives you honest analytics without wiring up GA4 or Mixpanel — particularly useful when the link goes in a newsletter or a bio, where third-party UTMs can disappear.
Conclusion
The plain redirect is not dead — it has just stopped being a universal tool. Today one link should know at least 2–3 things about its reader: where they are, what they are on, what to offer them. Without that, you are donating conversions to chance.
Start with two rules — geo and traffic source. Add a default. Watch the report for a week. From there it gets obvious which of the remaining four dimensions you actually need.