Custom domains

By default, VibeAds funnels serve at your-subdomain.localad.app. That works, but a branded domain converts better and boosts Google Ads Quality Score (landing page experience).

Why use a custom domain

  • Higher click-through rate (your domain in the ad URL display)
  • Higher Quality Score (landing page experience component)
  • Stronger brand consistency
  • Lower bounce rate (visitors trust your domain)
  • Better SEO if you ever decide to rank the page organically

Setup

From /app/domains:

  1. Click "Connect domain"
  2. Enter the hostname (e.g. quote.acmeplumbing.com)
  3. Pick which campaign(s) it should route
  4. VibeAds gives you DNS records to add at your registrar (CNAME pointing to edge.localad.app)
  5. Once DNS propagates (5 min to a few hours), VibeAds detects the change and provisions SSL automatically
  6. Status flips from "Pending DNS" to "Connected"

Auto-polls every 10 seconds for pending domains. Most domains connect in under 30 minutes.

SSL

Cloudflare provisions SSL certs automatically using ACME + Let's Encrypt. You do not handle certs. Cert renewal is also automatic.

If your domain has a CAA record restricting which CAs can issue certs, add Let's Encrypt to the allowed list. Otherwise SSL provisioning will fail and you will see a "SSL pending" status that does not resolve.

Multi-campaign routing

One domain can route multiple campaigns. The funnel for a given campaign is selected by URL path:

  • acmeplumbing.com/drain-cleaning → drain cleaning campaign funnel
  • acmeplumbing.com/water-heater → water heater campaign funnel
  • acmeplumbing.com/emergency → emergency hybrid landing page

The custom_domain_campaigns junction table maps path patterns to campaigns. Cache TTL: 5 minutes (negative caching for invalid domains).

Robots.txt and crawling

VibeAds serves three robots.txt variants:

  • Subdomain: the .localad.app subdomain blocks all crawling (these are paid traffic only).
  • Bare domain: blocks crawling but allows AdsBot-Google (Google ad crawler).
  • Custom domain: default to allowing search indexing, configurable per campaign in the Tracking tab.