# How to Add a Custom Domain to Your Deployed App in 2026

> Your app is live but stuck on a platform subdomain. Learn how to connect your own domain, configure DNS records correctly, and get SSL working in minutes.
- **Author**: tom-weston
- **Published**: 2026-05-26
- **Modified**: 2026-05-26
- **Category**: Deployment Guides
- **URL**: https://kuberns.com/blogs/add-custom-domain-to-your-deployed-app/

---

Your app is deployed. It is live, it is running, and everything works. But the URL is something like `yourapp.onrender.com` or `something.up.railway.app`. You want `yourapp.com`.

Adding a custom domain sounds like a five-minute job. For most developers, it takes longer, not because the process is complex, but because DNS records, SSL provisioning, and propagation delays each have their own gotchas that nobody explains upfront.

This guide walks through what is actually happening under the hood, how to add a custom domain on Kuberns in three steps, and why the same process is more involved on Render, Railway, and Vercel. By the end you will have your domain connected, HTTPS active, and a clear picture of what to do when something does not go as expected.


## What Actually Happens When You Add a Custom Domain

![What actually happens when you add a custom domain](https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/custom-domain-how-dns-works.png)

Before touching any settings, it helps to understand what you are actually changing. Custom domain setup involves three moving parts: DNS, SSL, and your platform's routing layer.

### How DNS Connects Your Domain Name to Your Server

DNS stands for Domain Name System. It is the system that translates a human-readable domain like `yourapp.com` into the IP address or hostname where your app is actually running.

When you add a DNS record at your registrar, you are telling the global DNS network: "requests for this domain should go to this destination." It takes time for that instruction to spread across DNS servers worldwide, which is why there is always a propagation delay after you make a change.

### A Record vs CNAME: Which One and When

There are two record types you will encounter:

- **A record**: maps your domain directly to an IP address. Used for apex domains like `yourapp.com`.
- **CNAME record**: maps your domain to another hostname, which then resolves to an IP. Used for subdomains like `www.yourapp.com`.

The reason this matters is that some platforms give you an IP to point to, others give you a hostname. The record type you need depends on which one your platform provides and whether you are setting up the root domain or a subdomain.

### What SSL Provisioning Means and Why It Takes a Few Minutes

SSL is the certificate that enables HTTPS. Most platforms use Let's Encrypt to issue free SSL certificates automatically. Once your DNS record propagates and the platform can verify that your domain is pointing to it, it requests a certificate from Let's Encrypt and installs it.

This is why you will often see "SSL pending" for a few minutes after your domain verifies. The certificate is being issued in the background. You do not need to do anything. You just need to wait.


## What You Need Before You Start

![What you need before you start adding a custom domain](https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/custom-domain-prerequisites.png)

Before you open your deployment dashboard, make sure you have:

- A deployed app with a live public URL
- A domain name you own and have access to manage
- Login credentials for your domain registrar

Here is where to find DNS settings on the most common registrars:

| Registrar | Where to find DNS settings |
|-----------|---------------------------|
| Cloudflare | Dashboard, select domain, click DNS |
| Namecheap | Dashboard, Domain List, Manage, Advanced DNS |
| GoDaddy | My Products, DNS, Manage Zones |
| Porkbun | Account, Domain Management, DNS Records |
| Google Domains | My Domains, Manage, DNS |
| Squarespace | Domains, select domain, DNS Settings |



## How to Add a Custom Domain on Kuberns

![How to add a custom domain on Kuberns](https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/kuberns-home-page-new.png)

Kuberns keeps this as simple as it should be. There are three steps and none of them require you to figure out which record type to use or wait for a manual verification step.

If you have not deployed your app yet, the "[the fastest way to get your app live without touching a single config file](https://kuberns.com/blogs/fastest-way-to-deploy-web-app/)" is with Kuberns. Once your app is running, adding a custom domain takes under five minutes.

![Add a custom domain to your app with AI](https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/add-domain-with-ai.png)

### Step 1: Open Your App Settings and Enter Your Domain

Log in to your [Kuberns dashboard](https://dashboard.kuberns.com), open your deployed app, and navigate to the Settings tab. Find the Custom Domain section and type in the domain you want to connect, for example `yourapp.com`.

Kuberns accepts both root domains and subdomains. You do not need to decide which record type to use before you get here.

### Step 2: Copy the CNAME Value Kuberns Gives You

Once you enter your domain, Kuberns immediately generates a CNAME value specific to your app. Copy it. This is what you will paste into your registrar in the next step.

There is no manual IP lookup, no digging through platform documentation to find what record to add. Kuberns gives you the exact value you need.

### Step 3: Add the CNAME in Your Registrar and Wait for Verification

Go to your domain registrar's DNS settings. Add a new CNAME record with:

- **Name / Host**: your domain or subdomain (e.g. `www` or `@` for root)
- **Value / Points to**: the CNAME value Kuberns provided

Save the record. Kuberns polls for the change automatically. Once DNS propagates and the record resolves correctly, Kuberns verifies the domain and provisions your SSL certificate without any extra action from you.

Your app is now live at `yourapp.com` with HTTPS active. The `www` redirect and root domain are both handled automatically.

<a href="https://dashboard.kuberns.com" target="_blank" rel="noopener noreferrer">
  <img src="https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/deploy-on-kuberns-bannner6.png" alt="Deploy with Kuberns" style={{ width: "100%", height: "auto" }} />
</a>


## How Other Platforms Handle Custom Domains

![How other platforms handle custom domains comparison](https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/custom-domain-platform-comparison.png)

The process on Kuberns takes three steps. On other platforms, the same outcome requires more steps, more record types, and more waiting. Here is what that looks like in practice.

### Render

On Render, adding a custom domain is a three-step flow: add the domain in the dashboard, configure DNS at your registrar, then return to the dashboard to verify. Render auto-provisions TLS certificates, which is good, but there are a few things that catch developers off guard.

Render's Hobby plan includes only two custom domains. If you need more, you pay $0.25 per domain per month on top of your plan. Render also warns you to remove any AAAA records from your domain before configuring DNS, because Render uses IPv4 only and AAAA records cause unexpected behaviour.

If you are deploying a Node.js app on Render, the "[full Node.js deployment guide that shows exactly where the domain setup falls apart on Render](https://kuberns.com/blogs/deploy-nodejs-on-render/)" walks through each step. The domain process works, but it is more manual than it needs to be for a workflow that should take minutes.

### Railway

Railway's custom domain setup requires two DNS records together: a CNAME record and a TXT verification record. Both are required before Railway will verify the domain. Miss either one and verification fails without a clear error.

Traffic on Railway is routed through their edge network, which adds an extra layer to the configuration. If you are evaluating Railway versus other options, the "[why most developers eventually look for Railway alternatives](https://kuberns.com/blogs/best-railway-alternatives/)" covers where teams typically run into friction.

### Vercel

Vercel's domain configuration splits into two paths depending on what you are connecting. For an apex domain like `yourapp.com`, you need an A record. For a subdomain like `www.yourapp.com`, you use a CNAME. If you want a wildcard domain, you have to switch your entire domain to use Vercel's nameservers, which is a bigger change than most developers expect.

Vercel's Hobby plan allows one custom domain per project. The record type split between apex and subdomain is a persistent source of confusion for developers deploying a frontend app for the first time. The "[what deploying a React app on Netlify actually looks like step by step](https://kuberns.com/blogs/deploy-react-app-on-netlify/)" covers a similar flow if you want to see how frontend-focused platforms approach this differently.

### Why the Process Is Harder Than It Needs to Be

Each of these platforms requires you to know which record type to use, which depends on whether you are setting up an apex domain or a subdomain, which depends on how your registrar handles CNAME flattening at the root level, which most developers have never heard of.

Kuberns removes that decision entirely. You enter your domain. You get one CNAME value. You paste it. That is the whole process.


## Common Errors and How to Fix Them

![Common custom domain errors and how to fix them](https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/custom-domain-common-errors.png)

Even when you follow the steps correctly, things can go wrong. Here are the errors developers hit most often and what to do about each one.

### Domain Not Verified After Setup

If your domain shows as unverified in the dashboard after 15 minutes, DNS propagation has most likely not completed yet. This is normal.

Check whether your record has propagated using [dnschecker.org](https://dnschecker.org). Enter your domain and look for green checkmarks across regions. If you see partial propagation, wait another 15 to 30 minutes.

You can also flush the DNS cache in Google's public DNS at [developers.google.com/speed/public-dns/cache](https://developers.google.com/speed/public-dns/cache) and Cloudflare's at [1.1.1.1/purge-cache](https://1.1.1.1/purge-cache/) to speed things up.

### SSL Certificate Pending or "Your Connection Is Not Private"

If your domain is verified but the browser shows an SSL warning, the certificate is still being issued. SSL provisioning through Let's Encrypt typically takes 2 to 5 minutes after domain verification. Refresh after a few minutes and the warning should clear.

If it persists beyond 15 minutes, check whether your domain is still pointing to a different server. Conflicting DNS records from a previous setup are a common cause of SSL provisioning failures.

### App Loads on www but Not on the Root Domain

This usually means you have added a CNAME for `www.yourdomain.com` but have no record for the root `yourdomain.com`. Some registrars do not support CNAME records at the root level. You will need to add either an A record pointing to your server's IP, or an ALIAS or ANAME record if your registrar supports it.

On Kuberns, this is handled automatically. When you add a root domain, both the root and www are configured together.

### 502 Bad Gateway After Verification

A 502 error immediately after domain verification usually means the platform is still updating its internal routing rules to recognise the new domain. It is not a DNS issue. Your domain is correctly configured. Wait a few minutes before trying again.

### DNS Propagation Taking Longer Than Expected

In rare cases, propagation can take up to 48 hours. This usually happens when the TTL on your previous DNS records was set very high, telling DNS servers around the world to cache the old record for a long time before checking for updates.

If you know you will be switching domains, lowering your TTL to 300 seconds the day before making the change significantly reduces propagation time.

If you are also setting up "[how to set up automatic deployments from GitHub so every push goes live without manual steps](https://kuberns.com/blogs/how-to-auto-deploy-your-apps-from-github-in-one-click/)", doing that before adding your custom domain means your app is in a stable state when the domain goes live.


## Conclusion

Adding a custom domain is a short process when the platform gives you what you need upfront: one record value, automatic verification, and SSL that provisions itself.

On Kuberns, that is exactly how it works. You enter your domain, copy a single CNAME value, add it to your registrar, and your app is live at your own domain with HTTPS active. No record type decisions, no plan-based domain limits, no separate SSL configuration step.

On Render, Railway, and Vercel, the same outcome requires more steps. Some need two DNS records. Some split the process based on apex versus subdomain. Some restrict custom domains to paid plans or charge per domain beyond a set limit.

The core process is the same across platforms. The difference is how much of it the platform handles for you.

If your app is not deployed yet, "[what one-click deployment actually does under the hood](https://kuberns.com/blogs/what-does-one-click-deployment-do/)" takes under five minutes before you even reach the custom domain step. Once it is running, you are three steps away from having it on your own domain.

[Deploy Your App and Add a Custom Domain in One Click](https://dashboard.kuberns.com/)

<a href="https://dashboard.kuberns.com" target="_blank" rel="noopener noreferrer">
  <img src="https://kuberns-blogs-media.s3.ap-south-1.amazonaws.com/CTA_banner.png" alt="Deploy on Kuberns" style={{ width: "100%", height: "auto", cursor: "pointer" }} />
</a>


## Frequently Asked Questions

### How long does DNS propagation take?

DNS propagation typically takes between a few minutes and 48 hours. In most cases, changes are visible within 30 minutes to a few hours. You can monitor propagation in real time using dnschecker.org and speed things up by flushing the Google Public DNS cache and Cloudflare's cache manually.

### Do I need an A record or CNAME for my custom domain?

It depends on whether you are connecting an apex domain or a subdomain. Apex domains like `yourapp.com` typically require an A record pointing to an IP address. Subdomains like `www.yourapp.com` use a CNAME pointing to a hostname. On Kuberns, you only need a single CNAME for both, which removes this decision entirely.

### Why is my custom domain not working after setup?

The most common reasons are DNS propagation not complete yet, wrong record type added, or conflicting records from a previous setup still present. Wait at least 30 minutes, use dnschecker.org to confirm the record has propagated, and double-check the exact values your platform provided.

### Can I use a custom domain on a free plan?

It depends on the platform. Render restricts custom domains to paid plans. Vercel allows one custom domain on the free Hobby plan. Railway supports custom domains on all plans. Kuberns supports custom domains during the trial period and on all paid plans.

### What is the difference between an A record and CNAME?

An A record maps a domain directly to an IP address. A CNAME maps a domain to another domain name, which then resolves to an IP. CNAMEs are more flexible because if your platform's IP changes, your DNS does not need updating. A records are required for apex domains on platforms that do not support CNAME flattening at the root.

### How do I get HTTPS on my custom domain automatically?

Most modern deployment platforms auto-provision SSL certificates via Let's Encrypt once your domain is verified. On Kuberns, SSL provisioning is fully automatic after the CNAME record propagates and the domain verifies. You do not configure anything manually. On Render and Railway, SSL is also automatic but requires you to complete their domain verification step first.

### Can I use a wildcard domain for staging environments?

Yes. A wildcard domain like `*.yourdomain.com` lets you route multiple subdomains to your app, which is useful for staging, preview, or per-client environments. On Vercel, wildcard domains require switching to Vercel's nameservers. On Kuberns, subdomains can be added individually through the same custom domain flow.

### Why does my app load on www but not on the root domain?

This happens when you have added a record for `www.yourdomain.com` but not for the root `yourdomain.com`. Some registrars do not support CNAME records at the apex, so you need either an A record pointing to your server's IP or an ALIAS or ANAME record if your registrar supports it. On Kuberns, root and www are configured together automatically when you add your domain.

---
- [More Deployment Guides articles](https://kuberns.com/blogs/category/deployment-guides/1/)
- [All articles](https://kuberns.com/blogs/)