Skip to content

Short links

A short link is a memorable path on a domain you already have in RouteSeam — go.example.com/docs — that sends visitors to a longer URL somewhere else. It is the same kind of object as a domain redirect: a route, published to the same edge, answered the same way. The difference is scope. A short link matches one exact path; the domain’s catch-all answers everything else.

A short link lives on a domain you own, so add the domain first and point its DNS at RouteSeam. A link is no more available than the domain under it: until the domain is active, the link shows the domain’s own status — DNS Pending or Provisioning SSL — rather than Active. See DNS setup.

Open Short links in the dashboard sidebar and choose New short link. The form asks for:

  • Domain — which of your domains the link lives on. A link stays on the domain it was created on; to move one, remove it and create it again on the other domain.
  • Slug — the path after the hostname. Leave it empty and RouteSeam generates one.
  • Where it should go — the full destination URL, including https://. It must be a real http:// or https:// URL, and RouteSeam refuses a destination that points back at the same domain or at another RouteSeam domain that redirects back to it.
  • Redirect type — 301, 302, 307, or 308. The default is 302.
  • Preserve query strings — on by default.
  • Expires on — optional, and always a future date.

Creating, editing, or removing a link publishes a new edge configuration. The change is live within a minute.

A slug can contain letters, numbers, and the characters -, ., _, and ~. It has to start with a letter or a number, and it can be nested with slashes: go/docs is valid and produces example.com/go/docs. Leading and trailing slashes are ignored, so docs and /docs create the same link. The whole slug can be up to 200 characters.

Each path can be used once per domain. If the slug is already taken, RouteSeam says so, keeps everything else you typed, and lets you pick another.

Leave the slug empty and RouteSeam generates a random seven-character one. The alphabet it draws from leaves out 0, O, I, and l, so a link read aloud or copied off a slide cannot land on the wrong place.

The edge matches paths exactly, so /Docs and /docs are two different links. Someone who types the wrong case does not reach your link — the request falls through to the domain’s catch-all, or gets a 404 if the domain has no active catch-all. Lowercase slugs are the safest habit.

All four status codes are available and the trade-offs described in redirect types still apply. What differs is the default.

302 is the default for short links, where a domain’s catch-all defaults to 308. A short link’s destination is expected to change — repointing it is much of the reason to have one. A 301 or 308 is cached by browsers and search engines, and a cached permanent redirect cannot be withdrawn: someone who followed the old one may keep landing on the old destination long after you updated the link. RouteSeam sends Cache-Control: no-store with 302 and 307 responses, so a temporary link stays changeable.

If the link is… Use
A campaign, a printed or scanned target, anything you may repoint (default) 302
Reversible and may carry non-GET traffic 307
A permanent shortcut whose destination will never move 301 or 308

A short link answers exactly one path. example.com/docs matches; example.com/docs/getting-started does not, and falls through to the domain’s catch-all. Visitors are sent to the destination URL as you entered it — nothing from the request path is appended to it.

Query strings. With Preserve query strings on, which is the default, parameters on the incoming request are carried through, so example.com/docs?utm_source=slides arrives at the destination with utm_source intact. Parameters already written into the destination URL take precedence over ones from the request. Turn the option off to send every visitor to the destination exactly as written.

A domain has one catch-all redirect and any number of short links. At the edge an exact path match wins: RouteSeam looks for a short link at the requested path first, and only falls back to the catch-all when there is none. Adding short links never changes where the rest of the domain’s traffic goes.

That fallback also decides what happens when a link stops resolving. A link that is disabled or past its expiry is left out of the published configuration, so requests to its path are answered by the domain’s catch-all again — or with a 404 if the domain has no active catch-all. See domains and routes.

Expires on is optional and takes a future date. After it passes the link stops resolving and shows as Suspended in the list, with the expiry date underneath. Clearing the date removes the expiry.

Enabled is a switch on a link that already exists. Switching it off keeps the link and its slug — the path stays yours — but stops it resolving, and the link shows as Suspended. Switch it back on whenever you like. Removing a link instead frees the slug, and the link stops resolving within a minute.

The short links list has a Last 7 days column: the number of requests the edge answered for that exact path on that domain over the past seven days. Because matching is exact and case-sensitive, requests to a different spelling or case are counted as a different path.

The window is seven days during early access, so the number means the same thing for everyone. For fuller traffic reporting, see analytics, which is reported per domain rather than per link.

Short links have no limit of their own. Each one counts as a route against your organization’s route limit, exactly as a domain’s catch-all redirect does. At the limit, creating a link is declined with a message naming the allowance and a link to the plan and usage page; existing links keep working. See early access and usage.

Organizations granted API access during early access can manage links through the API, nested under the domain:

GET /api/v1/domains/{domain_id}/short_links
POST /api/v1/domains/{domain_id}/short_links
GET /api/v1/domains/{domain_id}/short_links/{id}
PATCH /api/v1/domains/{domain_id}/short_links/{id}
DELETE /api/v1/domains/{domain_id}/short_links/{id}

Request and response bodies, validation errors, and exact status codes are in the API reference. Three behaviours are worth knowing before you write a client:

  • slug is optional on create and generated when you omit it.
  • On update an omitted field is left alone, while an explicit null for expires_at clears the expiry.
  • The list endpoint returns every link on the domain in one response. There is no pagination today.