Connecting a custom domain
Bring your own domain in three DNS records — wildcard SSL provisioning is automatic.
By default your blog lives at <slug>.velocms.org. Custom domains are available on Pro and above — the setup is a single CNAME record and we handle SSL automatically. Most people complete the whole process in under five minutes, though DNS propagation means you might wait up to an hour before the domain is live everywhere.
Quick start — what you need before you begin
You'll need login access to your DNS provider (wherever you bought the domain — Cloudflare, Google Domains, Namecheap, GoDaddy, Squarespace, etc.) and an active Pro or higher subscription on VeloCMS. If you're on a free trial, custom domains are locked until you upgrade. You don't need to configure anything on the server side — VeloCMS provisions the Cloudflare hostname and SSL certificate automatically the moment you save the domain in your dashboard.
Step 1 — Register the domain in admin
Go to Settings → Domain in your admin dashboard. Enter the domain you want to use (for example blog.example.com). We generate a verification target and a CNAME destination for you. Copy the CNAME destination — you'll need it in the next step. Don't close this tab yet; the dashboard shows real-time SSL status so you can watch the certificate provision.
Step 2 — Add a CNAME record at your DNS provider
In your DNS provider control panel, navigate to the DNS records section for your domain. Add a new record with the values from the VeloCMS dashboard.
Type: CNAME
Name: blog
Target: velocms-production.up.railway.app
Proxy: DNS onlyThe 'Name' field is just the subdomain part — so for blog.example.com, the name is blog. If you're using Cloudflare, set the proxy status to DNS-only (the gray cloud icon, not the orange one). Proxying through Cloudflare interferes with the SSL handshake because Cloudflare's proxy issues its own certificate instead of letting us provision ours. The result is a certificate error for your visitors.
Step 3 — Wait for SSL provisioning
Switch back to the VeloCMS dashboard. Once the CNAME resolves to our infrastructure, we request a Let's Encrypt certificate automatically via Cloudflare for SaaS. The status field in Settings → Domain will cycle from 'Pending' to 'Provisioning' to 'Active'. Provisioning typically takes 30 seconds to 5 minutes, though DNS propagation can occasionally take longer on some DNS providers.
You can visit your domain directly and check for the padlock icon in your browser's address bar. If you see a certificate warning instead, the certificate hasn't provisioned yet — wait a few more minutes and refresh. Don't repeatedly try different settings while it's provisioning; it just needs time.
Common pitfalls
The most common issue is leaving Cloudflare's proxy enabled (orange cloud). This is the cause of about 80% of custom domain support questions. The CNAME resolves, the dashboard shows 'Pending' but never moves to 'Active', and the domain shows a certificate error. Flip the proxy to DNS-only and the certificate will provision within a few minutes. A related pitfall: if your domain registrar auto-creates Cloudflare DNS when you transfer a domain, it often defaults to proxied — always double-check.
Another thing to watch: apex domains (bare example.com with no subdomain prefix) require CNAME flattening, which not all DNS providers support. Cloudflare supports it. If your provider doesn't, the workaround is to use www.example.com or blog.example.com. The www subdomain is CNAME-compatible on every provider and most readers don't notice or care about the www prefix.
Apex domains (example.com without a subdomain) require a CNAME flattening feature like Cloudflare's. If your DNS provider does not support it, use a subdomain like www.example.com or blog.example.com instead.
Related articles
- Setting up a blog on a subdomain vs apex domain — choosing the right URL structure
- Cloudflare configuration for VeloCMS — proxy settings, page rules, and cache
- SSL troubleshooting guide — certificate errors, mixed content warnings, and HSTS