# Custom funnel domains and conversion tracking — 1.8.0

Open Funnels → Results & domains beside a saved funnel. Owners and administrators manage domains and the measurement switch; agents can read results. Reviewers do not receive funnel administration or analytics access.

## Connect a domain

1. The installation owner sets `FUNNEL_DOMAIN_TARGET` in the Hyperchat Convex deployment to the public CNAME target for this installation (for example the target supplied by the web host). Keep the main web app's `NEXT_PUBLIC_SITE_URL` and Convex `SITE_URL` correct. Never use the DevLaunch website backend or another installation's credentials.
2. Add a hostname such as `offers.yourcompany.com`. Hyperchat creates a unique challenge for that workspace/funnel claim.
3. Add the hostname to your existing hosting project and configure HTTPS there. For Vercel, use Project Settings → Domains and the DNS values supplied by Vercel. For another host, configure its ingress/reverse proxy and certificate. Hyperchat does not purchase domains, call hosting-account APIs, issue certificates or change DNS on your behalf.
4. Publish the exact TXT value at `_hyperchat.offers.yourcompany.com` and the CNAME pointing to the installation target shown in the panel. Select Check DNS after propagation.
5. Publish the funnel and test its public URL and all steps on HTTPS. DNS verified means ownership and the DNS routing target were checked; it is not a certificate or HTTP reachability check. Use a subdomain when apex alias flattening prevents CNAME verification.

Only a verified hostname with an active published funnel resolves. Root requests temporarily redirect to the first step and preserve campaign parameters. Pages and form/next-step links stay on the custom hostname. Canonicals, sharing metadata, structured data, robots and sitemap use that hostname, with existing explicit canonical overrides retained. Sharing images use the installation origin. Dashboard/auth routes are not served through custom hostnames. Hosting proxies must preserve the actual Host header; caller-supplied forwarded-host headers never select a workspace.

Disconnect removes the binding immediately. Unpublishing disables resolution and intake; already-loaded HTML can remain visible. A new claim from a new owner must pass its own DNS proof before replacing an old verified binding. Pending claims alone never take over an existing site. Ownership verification is point-in-time: disconnect domains you no longer own, and recheck after DNS/hosting changes. Hyperchat checks source records, not arbitrary user-provided URLs or private network HTTP endpoints.

## Measure a funnel

Measurement starts off. Turn on Measure visits & conversions after reviewing your installation's privacy disclosures and requirements. Only published public pages emit analytics; gallery demos and private previews do not.

- A session is a random first-party browser session identifier counted once per funnel per UTC day. It is not a unique person. Different hostnames or browser sessions can count separately.
- Views count published page loads. CTA clicks count configured published button interactions, including jumps to forms and outbound links.
- Lead conversions count sessions with accepted server-side lead submissions, once per session/day. Invalid forms, honeypot submissions and duplicate request retries do not create conversions. Repeat accepted submissions remain available in Leads but do not inflate that session's conversion count.
- Conversion rate is converted measured sessions divided by measured sessions. A valid lead can reach the server before its view beacon; that accepted lead establishes one measured session, not an invented page view.
- External clicks never establish a paid purchase, booking, revenue attribution or ad-platform conversion. No advertising pixels or third-party analytics calls are added.

Do Not Track and Global Privacy Control suppress measurement, as does unavailable session storage. No IP addresses, full referrers, user-agent fingerprints, dedicated names or emails are stored in the analytics tables. Form names and emails are not copied into analytics records. Campaign attribution is visitor-supplied and uses the existing bounded allowlist; keep personal information out of campaign tags. These observational metrics may be affected by blockers and automated traffic; they are not verified ad-network results or a privacy compliance certification.

Results show 30 UTC days of daily rollups and entry source/campaign groups. Campaign breakdown is explicitly partial beyond 5,000 sessions or 100 groups. Daily totals remain complete. Raw session/deduplication records expire after 35 days via a bounded cleanup job; daily aggregates are retained. Technical ingestion safeguards currently accept up to 600 events/minute and 100,000/day per funnel, with at most 200 view/click metric updates per session/day. Adapt the documented limits and storage budgets for a high-volume buyer deployment; these are not provider billing guarantees. Analytics failures never block navigation, and a queued beacon is not proof of ingestion.

## References

- https://vercel.com/docs/domains/set-up-custom-domain
- https://vercel.com/docs/domains/working-with-domains/add-a-domain
- Installed Next.js 16 guides for Proxy, async headers and route handlers.
