---
title: How to connect a custom domain to a site your agent deployed
slug: connect-a-custom-domain-to-an-agent-deployed-site
type: guide
targetQuery: connect a custom domain to a site deployed by an AI agent
canonical: https://top-agent-skills.com/guides/connect-a-custom-domain-to-an-agent-deployed-site
published: 2026-09-17
updated: 2026-09-17
---

# How to connect a custom domain to a site your agent deployed

Two catalogued deploy Skills handle a custom domain themselves: github-pages configures apex and CNAME records for a Pages site, and railway-skills attaches a custom domain to a Railway service. For every other host the attach is two halves owned by two companies — the host tells you which record it wants, and the registrar-side skill (hostinger-agent-skills, zeabur-agent-skills) writes it, but only if that registrar hosts the zone. Hostinger’s connect-domain gets furthest across the seam — it takes a domain registered anywhere, verifies ownership with a TXT record, installs SSL and turns on the HTTPS redirect — and even it hands you the one A or CNAME to add at the registrar it does not run.

## Custom-domain support by deploy skill

| Host | Skill | Handles the domain? |
| --- | --- | --- |
| GitHub Pages | github-pages | Yes — apex and CNAME custom-domain setup |
| Railway | railway-skills | Yes — custom domain attach as part of platform ops |
| Hostinger | hostinger-api-mcp-skills | Yes — and uniquely, for a domain registered anywhere: verifies ownership, installs SSL, names the record you add at your registrar |
| Zeabur | zeabur-agent-skills | Yes — service URL binding plus its own registrar |
| Vercel | vercel-deploy-claimable | No — the claim flow assumes a fresh transferable deploy |
| Netlify | netlify-deploy | No — deploys and previews only |
| Cloudflare | cloudflare | No — Workers, Pages and storage, not the registrar |
| Firebase | firebase-hosting-basics | No — init, config and deploy only |

## Step by step

1. **Deploy first and keep the platform URL** — The host has to know the site exists before it can accept a name for it. Ship with the deploy skill for your host and note the platform subdomain it returns.
2. **Ask the host which record it wants** — An A record at a fixed address, a CNAME to a platform hostname, or nameserver delegation. Every host documents this and the deploy skill will usually surface it. Use whatever it documents for the apex specifically — a plain CNAME is not valid there.
3. **Write the record on the registrar side** — With hostinger-agent-skills that is the dns skill against the zone; with zeabur-agent-skills, npx zeabur@latest domain dns create --type CNAME --name www --content <platform-hostname> -i=false. If your registrar is neither, this is the manual step no catalogued skill spans.
4. **Wait out propagation, then verify** — dig +short yourname.com and curl -I https://yourname.com. Certificate issuance on most platforms waits on the record resolving publicly, so a certificate error immediately after the change usually means wait rather than misconfigured.

## Why the seam exists

A custom domain is an agreement between two systems. The host has to know the name belongs to it, and the zone has to carry a record pointing at the host. Those live behind two different APIs, and a first-party skill only ever holds credentials for one of them.

So the skills that do this in one step are the ones where both sides are the same company. GitHub Pages can write the CNAME file and configure the domain because the repo and the site are both GitHub. Zeabur can bind a service URL and edit the zone because it registered the domain.

The interesting case is the one that nearly spans it. Hostinger’s connect-domain accepts a domain registered anywhere: it verifies ownership with a TXT record the site serves, attaches the domain, installs the certificate, enables the HTTPS redirect, and is careful to carry existing MX, SPF and DKIM records through the change rather than overwrite them. Everything on the hosting side is automated. The single thing left is the A or CNAME at the other registrar, which it names for you and cannot write, because credentials at a company you do not run are the one thing a skill cannot have.

This is worth knowing before you pick a host, not after. If having the whole launch stay inside one agent session matters to you, choosing a host that is also your registrar is the decision that buys it — not a better skill.

## The two-sided path, in order

Deploy first and get the platform URL. Then ask the host what it wants: an A record at a fixed address, a CNAME to a platform hostname, or nameserver delegation. Every host documents this and the deploy skill will usually surface it.

Then write the record on the registrar side. With hostinger-agent-skills that is the dns skill against the zone; with zeabur-agent-skills it is npx zeabur@latest domain dns create with --type CNAME --name www --content <platform-hostname> -i=false, or an A record at the apex. If your registrar is neither, this is the manual step.

Then verify before you move on, with dig +short yourname.com and curl -I https://yourname.com. Certificate issuance on most platforms is automatic but waits on the DNS record resolving, so a curl that returns a certificate error immediately after the change usually means wait, not misconfigured.

## The apex-versus-www decision

Most hosts want a CNAME, and a CNAME cannot legally sit at the apex of a zone alongside the other records that must be there. Registrars solve this with a flattening or ALIAS record under various names, or with a fixed A record they publish for the purpose.

The practical rule: use whatever the host documents for the apex specifically, and do not substitute a CNAME because it worked for www. github-pages handles both shapes, which is part of why it is the smoothest custom-domain path in the catalogue despite being the least capable host.

## Common questions

**Can an agent attach a custom domain to a Vercel deploy?**

Not with vercel-deploy-claimable. That skill is built around a claimable deploy — a fresh, transferable site you claim into your account afterwards — and its own notes say it is not the right tool when you need a custom domain on the first deploy. Attach the domain after claiming.

**Which deploy skill handles the domain end to end?**

github-pages for a static site, and railway-skills for an app on Railway. On Zeabur the same CLI that hosts the service also registered the domain. Hostinger goes furthest: its connect-domain skill takes a domain registered anywhere, verifies ownership, installs SSL and enables the HTTPS redirect, leaving only the record you add at your own registrar.

**Do I point the domain with an A record or a CNAME?**

Whatever the host documents. A CNAME for subdomains like www is near-universal; at the apex most hosts publish a fixed A record or require the registrar's ALIAS-style record, because a plain CNAME is not valid there.

**Why is my certificate failing right after I pointed the domain?**

Usually because issuance waits on the DNS record resolving publicly, and it has not propagated yet. Confirm with dig +short against a public resolver first; if the record is correct and visible, give issuance a few minutes before changing anything.

## Related

- [How to manage DNS with an AI agent](https://top-agent-skills.com/guides/how-to-manage-dns-with-an-ai-agent) — The record-writing half of this, in detail.
- [How to deploy a website with AI agent Skills](https://top-agent-skills.com/guides/deploy-a-website-with-ai-agent-skills) — The deploy half, per host and per agent.
- [Build, host and launch a website with Skills](https://top-agent-skills.com/guides/launch-a-website-with-ai-agent-skills) — Both halves in the context of the full chain.
- [Best Skills for deploying websites](https://top-agent-skills.com/guides/best-skills-for-deploying-websites) — The ranked deploy skills, with what each actually ships.

---

_Top Agent Skills. Machine-readable twin of https://top-agent-skills.com/guides/connect-a-custom-domain-to-an-agent-deployed-site._
_Catalog as one JSON file (CC BY 4.0): https://top-agent-skills.com/skills.json_
