Skip to content

Custom Domains

Configure custom domains for your podcast website on Cloudflare Pages, Netlify, or Vercel.

  1. Cloudflare Pages → Your project
  2. Click “Custom domains”
  3. Click “Set up a custom domain”
  4. Enter domain: yourpodcast.com or www.yourpodcast.com
  5. Click “Continue”

If domain is on Cloudflare DNS:

  • DNS configured automatically ✅
  • CNAME record added automatically

If domain is elsewhere:

Add CNAME record at your DNS provider:

Type: CNAME
Name: @ (for root domain) or www (for subdomain)
Value: your-project.pages.dev
TTL: Auto or 3600

For apex domain (no www):

Some DNS providers require:

Type: CNAME
Name: @
Value: your-project.pages.dev
Proxy: Enabled (if supported)

Or use ALIAS/ANAME record (if supported):

Type: ALIAS
Name: @
Value: your-project.pages.dev

Cloudflare provisions SSL automatically (5-10 minutes):

Check status:

⏳ Pending validation
⏳ Pending certificate
✅ Active

Force HTTPS:

  1. Custom domains → Domain → “Always use HTTPS” → ON

Update environment variable:

Terminal window
PUBLIC_SITE_URL="https://yourpodcast.com"

In Cloudflare dashboard:

  1. Settings → Environment variables
  2. Edit PUBLIC_SITE_URL
  3. Change to your custom domain
  4. Save
  5. Trigger rebuild

Redirect www → non-www (or vice versa):

Create Page Rule:

  1. Cloudflare Dashboard → Your domain
  2. Rules → Page Rules
  3. Add rule:
    URL: www.yourpodcast.com/*
    Setting: Forwarding URL (301 - Permanent Redirect)
    Destination: https://yourpodcast.com/$1

Or use _redirects file:

public/_redirects
https://www.yourpodcast.com/* https://yourpodcast.com/:splat 301
  1. Site settings → Domain management
  2. Click “Add custom domain”
  3. Enter domain: yourpodcast.com
  4. Click “Verify”

If domain is on Netlify DNS:

  • Configured automatically ✅

If domain is elsewhere:

Add records:

# Root domain
Type: A
Name: @
Value: 75.2.60.5 (Netlify's load balancer)
# www subdomain
Type: CNAME
Name: www
Value: your-site.netlify.app

Or use CNAME (if supported):

Type: ALIAS/ANAME
Name: @
Value: your-site.netlify.app

Netlify provisions SSL automatically via Let’s Encrypt.

Enable HTTPS:

  1. Domain settings → HTTPS
  2. Toggle “Force HTTPS” → ON
Terminal window
# In Netlify dashboard
PUBLIC_SITE_URL="https://yourpodcast.com"
  1. Project → SettingsDomains
  2. Enter domain: yourpodcast.com
  3. Click “Add”

Add records at your DNS provider:

# Root domain
Type: A
Name: @
Value: 76.76.21.21 (Vercel)
# www subdomain
Type: CNAME
Name: www
Value: cname.vercel-dns.com
  1. Vercel checks DNS records
  2. Wait for verification (5-10 minutes)
  3. Status changes to “Valid”

Vercel provisions SSL automatically.

Terminal window
# In Vercel dashboard
PUBLIC_SITE_URL="https://yourpodcast.com"

Points domain to another domain:

yourpodcast.com → your-project.pages.dev

Pros:

  • Simple setup
  • Automatic updates

Cons:

  • Some providers don’t support CNAME for root domain

Points domain to IP address:

yourpodcast.com → 75.2.60.5

Pros:

  • Universally supported
  • Works for root domain

Cons:

  • IP address might change (rare)

Like CNAME but works for root domain:

yourpodcast.com → your-project.pages.dev

Pros:

  • Works for root domain
  • Automatic updates

Cons:

  • Not all DNS providers support
yourpodcast.com

Pros:

  • Shorter URL
  • More professional

Cons:

  • Requires ALIAS/ANAME support (or A record)
www.yourpodcast.com
podcast.yourdomain.com

Pros:

  • Easy CNAME setup
  • Universally supported

Cons:

  • Slightly longer URL

Use both:

yourpodcast.com (primary)
www.yourpodcast.com (redirects to primary)

Platforms verify you own the domain:

Cloudflare: Automatic (if using Cloudflare DNS)

Netlify: Add TXT record:

Type: TXT
Name: _netlify
Value: [verification token]

Vercel: Add TXT record:

Type: TXT
Name: _vercel
Value: [verification token]

DNS changes take time to propagate:

Check DNS:

Terminal window
# Check A record
dig yourpodcast.com
# Check CNAME record
dig www.yourpodcast.com
# Check from specific DNS server
dig @8.8.8.8 yourpodcast.com

Online tools:

Propagation time:

  • Minimum: 5 minutes
  • Typical: 30 minutes - 2 hours
  • Maximum: 48 hours

All platforms provision SSL automatically:

  • Cloudflare: Universal SSL (instant)
  • Netlify: Let’s Encrypt (5-10 minutes)
  • Vercel: Let’s Encrypt (5-10 minutes)

Redirect HTTP → HTTPS:

Cloudflare:

  • SSL/TLS → Edge Certificates → Always Use HTTPS → ON

Netlify:

  • Domain settings → HTTPS → Force HTTPS → ON

Vercel:

  • Automatic (no configuration needed)

Automatically renewed before expiration:

  • Let’s Encrypt: 90-day certificates, auto-renewed at 60 days
  • Cloudflare: Auto-renewed

Point multiple domains to same site:

yourpodcast.com → Main site
yourpodcast.net → Redirects to .com
yourpodcast.org → Redirects to .com

Setup redirects:

Cloudflare:

public/_redirects
https://yourpodcast.net/* https://yourpodcast.com/:splat 301
https://yourpodcast.org/* https://yourpodcast.com/:splat 301

Netlify:

netlify.toml
[[redirects]]
from = "https://yourpodcast.net/*"
to = "https://yourpodcast.com/:splat"
status = 301
force = true

Deploy branches to subdomains:

main branch → yourpodcast.com
staging branch → staging.yourpodcast.com
dev branch → dev.yourpodcast.com

Check 1: DNS records are correct

Terminal window
dig yourpodcast.com # Should show CNAME or A record

Check 2: Domain is added in platform dashboard

Check 3: DNS has propagated (wait 30 min - 2 hours)

Check 1: DNS points to platform

Terminal window
dig yourpodcast.com
# Should show platform's IP/CNAME

Check 2: No CAA records blocking Let’s Encrypt

Terminal window
dig CAA yourpodcast.com
# Should be empty or include letsencrypt.org

Check 3: Wait longer (can take up to 24 hours)

Add redirect:

Cloudflare:

public/_redirects
https://www.yourpodcast.com/* https://yourpodcast.com/:splat 301

Netlify:

netlify.toml
[[redirects]]
from = "https://www.yourpodcast.com/*"
to = "https://yourpodcast.com/:splat"
status = 301

Ensure all resources use HTTPS:

<!-- ❌ HTTP (causes warning) -->
<img src="http://example.com/image.jpg" />
<!-- ✅ HTTPS -->
<img src="https://example.com/image.jpg" />