How to Connect a Custom Domain and Subdomain to GoHighLevel Funnels

by Fahim

You built a solid funnel in GoHighLevel, but sending live traffic to a clunky preview.ghl... URL with random string hashes looks unprofessional. Getting your custom apex domain or dedicated subdomain hooked up takes five minutes once you know which records to drop in and how GHL handles routing.

I’ve wired up dozens of sub-accounts across Cloudflare, GoDaddy, and Namecheap, and I’ve hit every SSL handshake error and redirect loop along the way. Here’s the exact setup to get your domains mapped without breaking anything or pulling your hair out over DNS caching.

Terminal screen displaying DNS records and SSL status for custom domain configuration
Terminal screen displaying DNS records and SSL status for custom domain configuration

Apex Domain vs. Subdomain DNS Architecture

Before jumping into your DNS manager, decide where your funnels should actually live. HighLevel needs different record types depending on whether you’re pointing a bare root domain or a subdomain.

  • Apex / Root Domain (e.g., example.com): Points an A Record to GHL’s load balancer IP (162.159.140.166 or 34.68.234.4).
  • Subdomain (e.g., go.example.com, offers.example.com, or www.example.com): Points a CNAME Record to flash.funnels.msgsndr.com.

If your main site already lives on WordPress, Shopify, or Webflow at example.com, do not touch the root A record. Use a dedicated subdomain like offers.example.com with a CNAME instead. If GHL is hosting your entire public site, you’ll set up both the root A record and a www CNAME.

Step 1: Adding the Domain in GoHighLevel Settings

Always register the domain in the GHL dashboard first so its edge router is ready for the incoming DNS requests.

  1. Open your sub-account in HighLevel.
  2. Head to Settings (gear icon bottom left) > Domains.
  3. Click Add Domain in the top right.
  4. Type in your domain string (like offers.yourdomain.com or yourdomain.com).

GHL will pop up a modal showing the exact IP and CNAME targets it expects. Leave this open while you switch over to your DNS provider.

Step 2: Configuring DNS Records

Open your DNS management panel (Cloudflare, GoDaddy, Namecheap, etc.) and add the record matching your setup.

If you’re pointing the root domain and handling www, your zone configuration will look like this:

; Apex / Root Domain
Type: A
Name: @
Value: 162.159.140.166
TTL: 300 ; WWW Subdomain
Type: CNAME
Name: www
Value: flash.funnels.msgsndr.com.
TTL: 300

If you’re just wiring up a dedicated funnel subdomain, you only need one CNAME:

; Dedicated Subdomain
Type: CNAME
Name: join
Value: flash.funnels.msgsndr.com.
TTL: 300

Set the TTL to 300 seconds (5 minutes) or “Auto”. Keeping TTL low during setup means if you mistype a record, you won’t be stuck waiting hours for the bad cache to clear.

The Cloudflare Proxy Gotcha (DNS Only vs Proxied)

If you use Cloudflare, this is where almost everyone gets stuck. By default, Cloudflare turns on the orange cloud proxy icon for every new record.

HighLevel auto-provisions SSL certificates through Let’s Encrypt and Cloudflare for SaaS. When you leave the Cloudflare proxy enabled during setup, HighLevel can’t complete the HTTP/ACME verification challenge. You’ll run straight into an SSL mismatch or an endless ERR_TOO_MANY_REDIRECTS loop.

Click the orange cloud and switch it to DNS Only (grey cloud) for both your A and CNAME records before verifying.

Check the Cloudflare DNS Documentation if you need details on proxy routing. Once GHL issues the certificate and marks the domain active, keep it on DNS Only so GHL’s edge nodes manage the traffic directly.

Step 3: Verifying the Records and Binding to a Funnel

Hop back into HighLevel and click Verify Records (or Add).

As soon as GHL detects the records, it’ll ask you to select a default funnel and step. Pick your landing page from the dropdown. If you haven’t built the funnel yet, you can skip this and link it manually later.

To bind a verified domain to an existing funnel directly:

  1. Go to Sites > Funnels.
  2. Click your funnel and open the Settings tab at the top.
  3. Choose your domain from the Domain dropdown.
  4. Hit Save.

Once saved, every page in that funnel uses the domain prefix. You can tweak individual step slugs (like /checkout or /thank-you) under the Publishing tab on each step.

Step 4: Setting Up Root to WWW Redirects

If you connected a root domain (example.com), anyone who types www.example.com will hit a browser error unless you configure both variants.

GHL makes this simple. Under Settings > Domains, add both:

  • yourdomain.com (pointing to the A record)
  • www.yourdomain.com (pointing to the CNAME)

Click the edit pencil next to the root domain in the list, then set the default redirect to point to www (or vice versa). That keeps all incoming traffic on a single canonical URL and prevents SEO duplicate content issues.

Debugging DNS Propagation and SSL Errors

If HighLevel throws “Could not find DNS records” or an SSL failure, stop hammering the verify button. Check what the public DNS resolvers are actually seeing from your terminal.

Run these commands to query the records directly:

# Check the A record for the root domain
dig +short A example.com @8.8.8.8 # Check the CNAME record for the subdomain
dig +short CNAME offers.example.com @8.8.8.8

Here’s what clean output looks like:

# Expected A record response:
162.159.140.166 # Expected CNAME response:
flash.funnels.msgsndr.com.

If the terminal returns blank answers or old IP addresses, your DNS changes are still propagating. You can track global rollout with whatsmydns.net.

If DNS resolves cleanly but the browser throws an SSL_ERROR_NO_CYPHER_OVERLAP or Your connection is not private warning, check these three culprits:

  • Domain stuck in another sub-account: GHL won’t provision an SSL cert if that exact domain string is registered in a different sub-account. You have to remove it from the old sub-account first.
  • Cloudflare SSL mode mismatch: If you’re proxying traffic, make sure SSL is set to Full (Strict), never Flexible.
  • Let’s Encrypt rate limits / queue: Cert generation usually takes 1 to 3 minutes, but can stretch to 15 minutes during peak times. Give it a minute before tearing down your DNS records.

For more edge-case issues, check the GoHighLevel Official Support Docs.

Testing Webhook Integrations and Live Actions

Once the green padlock shows up in your browser, test every interactive element on the funnel. Changing your domain changes the absolute URLs on forms, tracking pixels, and webhooks—especially if you’re using explicit origin headers or static endpoints.

If your form submissions trigger backend automation workflows, see our guide to fix GoHighLevel webhook not firing issues. If you sync lead data out to external tools, check how to push Google Sheets contacts to the GoHighLevel API.

Also test any embedded booking widgets on the new domain. If availability disappears after the domain switch, take a look at how to fix GoHighLevel calendar not showing available slots.

Frequently Asked Questions

Can I connect the same custom domain to multiple sub-accounts?

No. HighLevel enforces global domain uniqueness across its entire infrastructure. If Sub-account A has offers.mydomain.com registered, Sub-account B will throw a “Domain already exists” error. You must delete it from Sub-account A or assign a different subdomain (like promo.mydomain.com) to Sub-account B.

How long does SSL provisioning take once DNS is verified?

Most of the time, GHL issues and binds the SSL certificate within 60 to 180 seconds. If there’s an active backlog or your DNS propagation is slow, it can take up to 15 minutes. Don’t delete and re-add the domain while it’s in a “Pending” status or you’ll reset the queue.

Do I need to create separate subdomains for every funnel?

No. You can bind dozens of funnels to the same subdomain or root domain. HighLevel routes visitors based on the step URL path (e.g., offers.mydomain.com/product-a and offers.mydomain.com/product-b). Just make sure your step paths don’t collide.

Why does my funnel show a 404 error on the root path?

If visiting offers.mydomain.com gives you a 404, you haven’t assigned a default step to the domain. Head to Settings > Domains, hit edit on that domain, and pick which funnel and step should load when someone lands on the bare base URL without a slug.

Next Steps for Your Funnel Stack

With your domain live and SSL verified, your funnel is ready for production campaigns. If you’re building custom webhook listeners or API middleware alongside this setup, check out how to test webhooks locally with Cloudflare Tunnels so you can catch and inspect inbound payloads on your local machine before deploying.

all_in_one_marketing_tool