Every time you shorten a link with Bit.ly or TinyURL, you hand them a logbook. Who clicked. When. From what country. On what device. That data gets sold, analyzed, and stored forever — even for the link you sent to your mom.

There's a fix. Run your own shortener. You keep the click logs, or keep none at all.

Why bother with short links at all?

Short links aren't just pretty. They let you:

  • Change where a link points after you've shared it
  • Use one memorable address (go.yoursite.com/taxes) instead of a 200-character monster
  • Track clicks on your terms — or not track them

The catch with free services: that redirect server sees every single click. That's the trade you didn't agree to.

Pick the right tool

For beginners, Shlink is the sweet spot. It's open source, actively maintained, and ships with a clean web dashboard. No coding required after setup.

If you want something even lighter, YOURLS is a classic PHP option. But Shlink runs in Docker with one command, so we'll use that.

Step 1: Install Docker

If you don't have it, install Docker Desktop (Mac/Windows) or Docker Engine (Linux). One install, done forever.

Step 2: Run Shlink

Open a terminal and paste this, swapping in your own domain:

docker run --name shlink -p 8080:8080 \
  -e DEFAULT_DOMAIN=links.yoursite.com \
  -e IS_HTTPS_ENABLED=true \
  shlinkio/shlink:stable

That's it. Shlink is now running on port 8080.

Step 3: Add the dashboard

The command line works, but the web UI is friendlier. Run the official dashboard:

docker run --name shlink-web -p 8000:8080 shlinkio/shlink-web-client

Visit http://localhost:8000, point it at your Shlink server, and create links by clicking buttons.

Step 4: Generate an API key

From your terminal:

docker exec -it shlink shlink api-key:generate

Paste that key into the dashboard to connect them. Now you create, edit, and delete short links from your browser.

Step 5: Decide how much to track

This is the privacy payoff. Shlink lets you turn visit tracking off entirely per link, or strip out IP addresses while keeping basic counts. Set it in the dashboard under each link's settings.

Want zero logs? Add this when launching:

-e DISABLE_TRACK_PARAM=true

Now your links redirect silently. No one — not even you — gets a profile of who clicked.

Point a domain at it

Use a short domain you own. Add an A record pointing to your server, slap a free Let's Encrypt certificate in front with a reverse proxy like Caddy, and your links go live as links.yoursite.com/x.

The takeaway

Spin up Shlink in Docker tonight, flip tracking off, and every link you share stops feeding a marketing database. Your clicks become your business again.