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.

TL;DR

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/promo to send the Mexican visitor to mx.shop.com/promo, the Spanish visitor to es.shop.com/promo, everyone else to en.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=newsletter gets a personal discount. utm_source=facebook gets 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:

  1. 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.
  2. 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 with Sec-CH-UA client hints and viewport width.
  3. Language. The Accept-Language header. Sounds easy, until: a German user on an English macOS sends en-US, de;q=0.9. Showing them English or German depends on who you are trying to sell to.
  4. Traffic source. UTM tags, referer, click-id. “Came from newsletter” → one thing. “Came from Google Ads” → another. “Organic” → a third.
  5. 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%.
  6. 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.
What we see in practice

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 → /new with 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.