Go Back

How to build a simple, static URL shortener

I am currently working on some research papers for a small project, and some of the links in the citations are bonkers long. They break over multiple lines and just look extremely unprofessional. In order to fix that, I looked into URL shorteners.

I don't like to depend on 3rd-party services, especially if I need to hand that research paper to a client. What if the service goes out of business? But keeping an actual dynamic reverse proxy or the like running for possibly years is quite a hassle as well. If only there was a way to use static pages for redirecting!

Then I could use Github or Gitlab Pages with a custom domain, and if push comes to shove, I could still move the pages to another service or my own server.

meta http-equiv="refresh"

Enter: <meta http-equiv="refresh" content="0; url='https://www.example.org'" />. This little slice of heaven, placed in the <head> of a webpage, redirects modern user agents to https://www.example.org after 0 seconds. So you could host a exmpl.html next to your static website. This page could have a meta http-equiv="refresh" tag in its <head> which points to the URL. If a user visits https://yourpage.org/exmpl.html their browser gets redirected to the URL in the <meta>-tag.

I wrote a generator that creates redirect files in Node which does exactly that. You can add a list of links into the config.json and run yarn generate. This creates redirect pages for every link in that list.

<!DOCTYPE html>
    <link rel="canonical" href="@@URL@@" />
    <meta name="robots" content="noindex">
    <meta charset="utf-8" />
    <meta http-equiv="refresh" content="0; url='@@URL@@'" />    

It then takes the first 6 chars of the SHA-256 of the URL in base64 and uses it as the shortend URL.

function createShortFileName({url, hashLength}){
  return crypto
    .slice(0, hashLength);

But you can define your own custom function if you wish.


I have a couple of redirects deployed using the domain krz.re (kurz is German for "short"). For example, krz.re/bJj7zH redirects you to a different article of mine. Feel free to use the generator if you want to make your own.