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 German page, the reader from your newsletter goes straight to checkout. One URL, many 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 several visitor signals plus a main address for everyone who matches no rule. It is not harder than configuring nginx, but it solves far 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 profile link. An Instagram profile fits exactly one URL. You have five offers and want to send visitors to them by country and device.
  • Landing-page A/B test. Two variants of a landing page. You want to split traffic from a single link in half and compare the results.
  • Bot filtering. Scrapers and data-center bots go to a separate page instead of the offer, so they do not skew your stats.
  • 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 then:

  • search engines see two hops in a row — SEO and Core Web Vitals suffer;
  • the visitor loads one page and then another — extra seconds of waiting, and some people leave before it finishes;
  • nothing works for people with JavaScript turned off: there are few of them, but they exist.

Six dimensions worth routing on

Almost any smart-link is a combination of these six signals:

  1. Geo. Most common — country by IP. Good databases rarely miss at the country level and miss noticeably more often at the city level. Decent options: MaxMind GeoLite2, IP2Location and similar. Remember: for a visitor on a VPN or proxy, the country is the exit node's, not where the person actually is.
  2. Device. Desktop, phone, tablet; iOS or Android; sometimes a specific model. Parsed from User-Agent, but in 2026 that is no longer a reliable source — Apple and Chrome intentionally trim it. Pair it with Sec-CH-UA headers and screen 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, referrer, click-id. “Came from the newsletter” → one thing. “Came from Google Ads” → another. “Came from search” → a third.
  5. Time. Day of week and hour. If you deliver food, send noon traffic to a lunch landing and evening traffic to a dinner landing. Sounds minor, but for offers like that, timing often decides.
  6. Random split (A/B). Traffic is divided between variants. Ideally the same person sees the same variant when they come back; otherwise the comparison gets muddy.
Advice

Do not wire up all six dimensions on your first campaign: rules pile up into the dozens, they are hard to untangle, and the main address gets forgotten. Start with two — geo and traffic source: they usually deliver most of the value. Add the rest when you actually need it.

The main address: what happens when no rule matches

Beginners' most common mistake is forgetting the main address. Example: you set up “MX → mx.shop.com, ES → es.shop.com”. A visitor from Ukraine arrives. Where do they go? If you did not plan for it — a 404 or a redirect into nothing.

A proper smart-link is an ordered chain of rules that always ends with the main address. Pseudo-config:

rules:
  - if: visitor.is_bot
    redirect: "https://shop.com/about"   # page for bots, checked first

  - 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"

  - default:                             # main address
    redirect: "https://en.shop.com/promo"

Key points:

  • rules are evaluated in order — first match wins;
  • the bot check comes first: otherwise a bot from Mexico matches the MX rule and reaches the offer;
  • the main address is always there. Without it, a visitor who matches no rule is left with nothing.

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 move the old addresses to the new ones. Different answers for different visitors only get in the way here.
  • One URL to one canonical page. If you just need /old → /new with no audience split — keep it simple.
  • When you do not need stats. Smart-link makes sense when you watch click stats and learn from them. If the link is one-shot — a 302 in nginx takes half a minute.

What this looks like in TDS.SO

In TDS.SO a smart-link is built in the interface, without editing configs. In the distribution rules of a link or a template you add conditions top to bottom — country, device, OS, browser, language, referrer, GET parameter, day of week, time — and give each one a destination. A visitor who matches no rule goes to the link's main address. If you list several addresses separated by | or ,, traffic is split between them evenly.

The filter handles bots before the rules: they go to the default page for non-target traffic that you choose yourself and never reach the offer. The link runs on your own domain, for example go.brand.com. The domain points to a separate cheap VPS where a lightweight proxy is installed with one command, or you buy a ready domain from sellers. There is no tracker server to run.

The stats for every click show country, city, device, source, the bot verdict and where the visitor was sent. That is an honest picture without third-party counters — particularly useful when the link goes in a newsletter or a profile, where UTM tags can get lost.

Conclusion

The plain redirect is not dead — it has just stopped being a universal tool. Today one link should know at least two or three things about its visitor: where they are, what device they are on and what to offer them. Without that, you are leaving conversions to chance.

Start with two rules — geo and traffic source. Check the main address. Watch the stats for a week. From there it gets obvious which of the remaining four dimensions you actually need.