Self-hosted email marketing with full source code. Pay once, own forever. Get AcelleMail — $74 →

Custom Tracking Domain Setup for AcelleMail

Replace the default tracking-link domain with your own (track.example.com). Why it matters for click-through, branding, and avoiding shared-domain blacklist hits.

By default, AcelleMail rewrites every campaign link through a tracking URL on the AcelleMail host's domain (e.g. https://mail.example.com/t/abc123/redirect). When recipients hover over a link, they see your AcelleMail-host's domain, not your brand's domain — and on shared/multi-tenant hosts, every customer's links go through the same domain, exposing all customers to any reputation hit on that domain. The fix: a custom tracking domain (https://track.example.com/...) per sending domain.

This article covers when to use a custom tracking domain, the DNS + certbot setup, AcelleMail's TrackingDomain model config (per app/Model/TrackingDomain.php), and the operational gotchas.

Why custom tracking domains matter

Three reasons:

1. Brand consistency

Recipients hover over a link in your campaign. If they see mail.acellemail-host.com/t/..., the message looks like a third-party broadcast tool. If they see track.example.com/t/..., it looks like a first-party communication. Brand consistency matters more than most operators give it credit for — psychologically, hover-domain mismatch is a small trust deduction that compounds over thousands of recipients.

2. Deliverability isolation

When AcelleMail hosts multiple customers' tracking on a shared domain (acellemail-host.com), one customer's bad-actor behavior (link to a phishing destination, obviously spammy URL) can land the shared domain on URL-reputation lists like:

A listing on any of these affects EVERY customer using that shared tracking domain — every link in every campaign hits a "this URL is in a spam blocklist" filter. The fix: per-customer tracking domains so each customer's URL reputation is isolated.

3. Tracking-URL preview

Some receivers (like Gmail) preview the destination of links in their UI. A track.example.com URL renders as your brand; a mail.acellemail-host.com URL renders as a third party. Same UX argument as #1.

DNS setup

The tracking domain is a CNAME pointing to the AcelleMail host:

CNAME  track.example.com  →  mail.acellemail-host.com

The CNAME means traffic to track.example.com resolves to whatever IP the AcelleMail host is using — no separate hosting infrastructure needed. AcelleMail handles the request (its nginx vhost listens for the tracking-domain hostname).

After CNAME publishes, verify:

dig +short track.example.com
# Should return the AcelleMail host's IP via CNAME chain

TLS via certbot

The tracking domain needs HTTPS — modern browsers warn loudly on HTTP. From the AcelleMail host:

sudo certbot --nginx -d track.example.com \
  --non-interactive --agree-tos --email you@example.com --redirect

Certbot validates ownership via HTTP-01 challenge, issues a certificate, configures nginx to serve the tracking domain over HTTPS. The renewal cron handles future certs.

For multi-tenant AcelleMail hosting many tracking domains:

# Bulk renewal cron (already runs daily via /etc/cron.d/certbot)
# All certs renew via the same cron; just keep adding domains.

AcelleMail config

Admin → Domains → Tracking Domains → New
   Name: track.example.com
   Customer: <customer assigned this tracking domain>

The TrackingDomain model (per app/Model/TrackingDomain.php) verifies the CNAME resolves correctly — it queries DNS and confirms the CNAME points at the configured AcelleMail host. If verification fails, the config is rejected.

After creation, link the tracking domain to the customer's sending domain:

Admin → Customers → <customer> → Edit → Tracking Domain
   = track.example.com

Or set it per-campaign in the campaign editor.

Verify it's working

Send a test campaign. In the received message, hover over a link. The URL should be:

https://track.example.com/t/<encoded-recipient>/<campaign-id>

Click it. The redirect should:

  1. Hit https://track.example.com/...
  2. Log the click in AcelleMail (TrackingLog row created)
  3. Redirect to the original destination URL

If any step fails, check:

  • DNS: dig track.example.com returns the AcelleMail host
  • TLS: curl -sI https://track.example.com returns 200 OK with valid cert
  • AcelleMail: TrackingDomain row is verified=true

Per-customer rotation strategy

For multi-tenant AcelleMail with high-volume customers:

Customer A: track.customer-a.com
Customer B: track.customer-b.com
Customer C: track.customer-c.com

Each customer's URL reputation is fully isolated. If Customer A gets a SURBL listing, Customers B and C are unaffected.

The cost: each customer needs a domain or subdomain + certbot cert. For a host with 100+ customers, this is ~$500/year in certs (Let's Encrypt is free; the cost is just certbot renewal infrastructure) and ~10 hours/year of management.

Related reading

FAQ

Do I need a separate certbot cert per tracking domain?

Yes — each domain gets its own cert. They auto-renew via the same cron.

Can I use a wildcard cert?

Yes, but it requires DNS-01 challenge (more setup) and the wildcard must cover all your tracking subdomains. For 100+ customers, wildcard makes sense; for < 10, individual certs are simpler.

What if my AcelleMail host changes IP?

The CNAME chain auto-updates — no DNS change needed. If you change the AcelleMail host's hostname (not just IP), update the CNAME target.

Does this affect email delivery itself?

No, only link tracking. The DKIM-signing, SMTP delivery, bounce-handling are all on different infrastructure (sending IP). Tracking domain only affects the click-redirect path.

More in DNS & Domain Setup