Free Link-in-Bio Page on Your Own Domain

Share:
A free link-in-bio page on your own domain

Every time someone asks "where can I find you?", I have the same awkward moment of listing my website, my LinkedIn and my booking page out loud. A link-in-bio page fixes that: one tidy address with your important links on it. The catch is that most tools put their own name in the address. Here's how to host your own for $0, on a web address you own, using one small file.

This setup is ideal for freelancers, consultants, and small teams who want one clean page of links at an address like links.yourdomain.com.

What this gives you

  • A links page on your own domain, not someone else's
  • Free HTTPS, so visitors see the padlock
  • Full control: no ads, no tracking you didn't add, no template limits
  • $0 per month for the hosting (you still pay for the domain you already own)

Tech stack: GitHub Pages (free static hosting) + your DNS provider (where you add one record)

What you need

Good to know: on a free GitHub account, the repository must be public, so anything in it is visible to everyone. GitHub's limits page also says Pages is not intended to be used as a free web host to run a business, e-commerce site or commercial SaaS. A page of links is fine. A store is not.

1Create the repository

A repository is a folder on GitHub that holds your files. GitHub Pages turns the files in one special repository into a website.

  1. Sign in to GitHub, click the + icon in the upper-right corner, then New repository
  2. Name it your-username.github.io, using your own GitHub username in lowercase
  3. Set visibility to Public and turn on Add README
  4. Click Create repository
Illustration: the new repository form with the name your-username.github.io, Public selected and Add README ticked

Common mistake: typing the wrong repository name. GitHub requires a user site to be named your username followed by .github.io, and each account gets one user site.

2Add your links page

The whole page is a single file called index.html. GitHub Pages looks for that name first, so it becomes the front door of your site.

  1. In your new repository, click Add file, then Create new file
  2. Name the file index.html
  3. Paste the code below, then replace the name, tagline and links with your own
  4. Click Commit changes
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Your Name - Links</title>
  <style>
    body { font-family: sans-serif; background: #0a0a0a; color: #fff;
           max-width: 420px; margin: 0 auto; padding: 3rem 1rem; text-align: center; }
    a { display: block; background: #ff6b35; color: #fff; text-decoration: none;
        padding: 1rem; margin: 1rem 0; border-radius: 999px; font-weight: 600; }
  </style>
</head>
<body>
  <h1>Your Name</h1>
  <p>One line about what you do.</p>
  <a href="https://yourdomain.com">My website</a>
  <a href="https://www.linkedin.com/in/your-profile">LinkedIn</a>
  <a href="mailto:you@yourdomain.com">Email me</a>
</body>
</html>

Add another button by copying one <a> line and changing the address and the label.

3Turn on GitHub Pages

This tells GitHub where your site's files live. GitHub says it builds and deploys the site with a GitHub Actions workflow, and changes can take up to 10 minutes to appear.

  1. Open the repository's Settings tab. If you don't see it, use the ⋯ dropdown in the repository header.
  2. In the sidebar, under "Code, planning, and automation", click Pages
  3. Choose a publishing source: your main branch and the root folder
  4. Wait a few minutes, then click Visit site

If you can see your page at your-username.github.io, the hosting works. ✅

4Connect your own domain

Right now the page lives at GitHub's address. A custom domain makes it yours. I recommend a subdomain such as links.yourdomain.com because it needs one DNS record and leaves your main website alone.

  1. Back in Settings > Pages, find Custom domain
  2. Enter links.yourdomain.com and click Save
  3. Do this before you create the DNS record. GitHub warns that setting DNS first can let someone else host a site on your subdomain.
Illustration: the Pages settings with links.yourdomain.com in the Custom domain field and a Save button

5Add the DNS record

A DNS record is an entry in your domain's address book. This one says "links.yourdomain.com is hosted by GitHub". Add it where you manage your domain's DNS, which is your registrar or a service like Cloudflare.

TypeNameValue
CNAMElinksyour-username.github.io
Illustration: a DNS table with one CNAME record named links pointing to your-username.github.io

Common mistake: including the repository name in the value. GitHub says to point to <user>.github.io only. Also avoid wildcard records like *.yourdomain.com, which GitHub flags as a takeover risk.

Want the bare domain instead, such as yourdomain.com? GitHub's documentation lists four A records (185.199.108.153, 185.199.109.153, 185.199.110.153 and 185.199.111.153) for the apex domain. Only do this if that domain isn't already used by another website.

6Turn on HTTPS

HTTPS encrypts the connection and gives visitors the padlock. GitHub offers it as a checkbox once your DNS is working.

  1. Return to Settings > Pages
  2. Tick Enforce HTTPS

Timing: DNS changes can take up to 24 hours to propagate, and GitHub says Enforce HTTPS may take up to 24 hours to become available. If the box is greyed out, wait and check again.

7Test that it's working

  1. Open https://links.yourdomain.com in a browser and check you see your page with the padlock
  2. To check the DNS record from a terminal, run:
dig links.yourdomain.com +noall +answer -t CNAME
  1. The answer should point to your-username.github.io

If your page loads at your own address over HTTPS, you're done. ✅

Final result

  • A links page at an address you own
  • Free hosting and free HTTPS from GitHub Pages
  • An easy edit flow: change index.html, commit, wait a few minutes
  • It cost nothing beyond the domain

Troubleshooting quick checks

Comments

Be the first to leave a comment!

← Back to Blog
Link copied!