Custom Domain

Connect your own domain name to your marketplace for a professional, branded experience. This guide covers everything from purchasing a domain to configuring DNS records.

Why Use a Custom Domain?

A custom domain provides several key benefits for your marketplace:

Brand Trust

Customers trust professional domains over subdomains. A branded domain increases credibility and conversion rates.

SEO Benefits

Custom domains rank better in search engines and allow you to build domain authority over time.

Professional Email

Use your domain for business emails ([email protected]) instead of generic providers.

Full Control

You own the domain, giving you control over your marketplace's identity regardless of platform.

Domain Options

Default Prometora URL (Free)

Every marketplace gets a free branded URL on Prometora. This works immediately with no setup required:

prometora.com/s/your-store

Good for: Testing, development, or budget-conscious launches. You can use this URL as long as you want.

Custom Domain (Recommended)

Use your own domain for a fully branded, professional experience:

yourmarketplace.comwww.yourmarketplace.comshop.yourbrand.com

Good for: Production marketplaces, established brands, serious businesses

Prerequisites

Before setting up a custom domain, you'll need:

A registered domain name

Purchase from any registrar (GoDaddy, Namecheap, Cloudflare, Google Domains, etc.)

Access to DNS settings

You'll need to add DNS records at your registrar

A Prometora marketplace

Create your marketplace first before connecting a domain

Where to Buy a Domain

If you don't have a domain yet, here are popular registrars:

RegistrarStarting PriceNotes
Cloudflare Registrar~$9/year (.com)At-cost pricing, excellent DNS
Namecheap~$10/year (.com)Free WHOIS privacy, good UI
Google Domains~$12/year (.com)Simple interface, Google integration
GoDaddy~$12/year (.com)Large selection, 24/7 support
Porkbun~$9/year (.com)Affordable, free WHOIS privacy

💡 Domain Naming Tips

  • • Keep it short and memorable
  • • Avoid hyphens and numbers if possible
  • • Check social media availability for your brand name
  • • Consider .com, .shop, .store, or .market extensions
  • • Avoid trademarked names

Understanding DNS Records

DNS (Domain Name System) translates domain names to IP addresses. Here are the record types you'll use:

A Record (Address Record)

Points your domain directly to an IP address. Used for root domains (e.g., yourmarket.com without www).

Type: A | Name: @ | Value: 76.76.21.21

CNAME Record (Canonical Name)

Points one domain to another domain. Used for subdomains like www or shop.

Type: CNAME | Name: www | Value: cname.vercel-dns.com

AAAA Record (IPv6 Address)

Like an A record but for IPv6 addresses. Optional but recommended for modern compatibility.

Type: AAAA | Name: @ | Value: 2606:4700:...

Step-by-Step Setup

Simple 3-Step Setup

Connecting your domain is easy! Just add one CNAME record and we handle the rest - including automatic SSL certificates.

Step 1: Add Your Domain in Prometora

1

Go to Store Settings → Custom Domain

2

Enter your domain name (e.g., www.yourmarketplace.com)

3

Click Add Domain - you'll see the CNAME record to add

Step 2: Add CNAME Record at Your Registrar

Add this single CNAME record at your domain registrar. The exact steps vary by registrar (see instructions below).

Required DNS Record

TypeName/HostValue/TargetTTL
CNAMEwwwdomains.prometora.comAuto or 3600

💡 Using www is Recommended

We recommend using www.yourmarket.com as your primary domain. This works with all registrars. You can set up a redirect from the root domain (yourmarket.com) to www at your registrar.

⚠️ Important

If you have existing DNS records for www (A or CNAME), delete them before adding the new CNAME record.

Registrar-Specific Instructions

GoDaddyClick to expand

1. Log in to your GoDaddy account

2. Go to My Products → find your domain → DNS

3. Delete any existing CNAME or A record for "www" (if present)

4. Click Add → Type = CNAME, Name = www, Value = domains.prometora.com

5. Click Save

NamecheapClick to expand

1. Log in to Namecheap and go to Domain List

2. Click Manage next to your domain

3. Go to the Advanced DNS tab

4. Delete any existing CNAME or A record for "www" (if present)

5. Click Add New Record

6. Type = CNAME Record, Host = www, Value = domains.prometora.com

7. Click the checkmark to save

CloudflareClick to expand

1. Log in to Cloudflare and select your domain

2. Go to DNSRecords

3. Delete any existing record for "www" (if present)

4. Click Add record

5. Type = CNAME, Name = www, Target = domains.prometora.com

6. Proxy status: Either "Proxied" (orange cloud) or "DNS only" works

7. Click Save

Google Domains / SquarespaceClick to expand

1. Go to domains.google.com (or Squarespace Domains)

2. Select your domain and go to DNS

3. Scroll to Custom records

4. Delete any existing record for "www" (if present)

5. Add CNAME: Host name = www, Type = CNAME, Data = domains.prometora.com

6. Click Save

PorkbunClick to expand

1. Log in to Porkbun and go to your domain

2. Click the DNS dropdown arrow

3. Delete any existing record for "www" (if present)

4. Add CNAME: Type = CNAME, Host = www, Answer = domains.prometora.com

5. Click Save

Step 3: Verify Your Domain

1

Return to Store Settings → Custom Domain in Prometora

2

Click Verify DNS

3

Wait 1-5 minutes for SSL certificate provisioning

4

Your domain is live! Visit https://www.yourdomain.com

That's it!

Your marketplace is now live at your custom domain with automatic SSL encryption.

After Verification

Your domain is verified, but there are a few things to know about DNS propagation and optional Cloudflare settings.

DNS Propagation Time

Your Site May Not Load Immediately

Even after verification, DNS changes can take 15-60 minutes to propagate worldwide. If you see an error when visiting your domain, wait and try again. In rare cases, propagation can take up to 24 hours.

You can check DNS propagation status using these tools:

Cloudflare Users: Recommended Settings

If your domain is managed through Cloudflare (either transferred to Cloudflare DNS or using Cloudflare as a proxy), enable these settings for the best experience:

1. Always Use HTTPS

This ensures all HTTP traffic is automatically redirected to HTTPS for security.

How to enable:

  1. Go to SSL/TLS in Cloudflare sidebar
  2. Click Edge Certificates
  3. Toggle "Always Use HTTPS" to ON

2. Apex Domain to WWW Redirect

If you're using www.yourdomain.com, set up a redirect so visitors who type just yourdomain.comare automatically sent to the www version.

How to set up:

  1. First, add a DNS record for the apex domain:
    • Type: A
    • Name: @
    • IP: 192.0.2.1 (placeholder)
    • Proxy status: Proxied (orange cloud)
  2. Go to Rules → Redirect Rules
  3. Click "Create rule"
  4. Use the "Redirect from root to WWW" template
  5. Set source: https://yourdomain.com/*
  6. Set target: https://www.yourdomain.com/${1}
  7. Status code: 301 (permanent redirect)
  8. Click Deploy

3. SSL Mode (if using Cloudflare proxy)

If your DNS record shows "Proxied" (orange cloud), ensure SSL mode is set correctly.

How to check:

  1. Go to SSL/TLS in Cloudflare sidebar
  2. Click Overview
  3. Set SSL mode to "Full" or "Full (strict)"

Not Using Cloudflare?

If you're using a different registrar (GoDaddy, Namecheap, etc.) without Cloudflare, the simple CNAME setup is all you need. SSL is automatically handled by our infrastructure. For apex domain redirects, check your registrar's forwarding or redirect options.

Advanced: Cloudflare Workers Setup (Legacy)

Note: This is an older setup method

The simple CNAME setup above is now the recommended approach for most users. The Cloudflare Workers method below is kept for users who set up their domain before December 2024 or need advanced customization.

For more control over your domain routing, you can use Cloudflare Workers instead of simple DNS records. This approach offers additional benefits like edge caching and custom routing logic.

Why Use Cloudflare Workers?

  • Free SSL: Automatic SSL certificates via Cloudflare
  • Global CDN: Content delivered from 300+ edge locations
  • DDoS Protection: Enterprise-grade protection included free
  • Apex Redirects: Easy www to non-www (or vice versa) redirects
  • Analytics: Free traffic analytics and insights

Step 1: Transfer DNS to Cloudflare

First, you need to transfer DNS management to Cloudflare. This is a one-time setup that gives you access to free SSL certificates and a global CDN.

1

Create a free account at Cloudflare

2

Click "Add a Site" and enter your domain (e.g., example.com)

3

Choose the Free plan

4

Review imported DNS records (keep MX records for email!)

5

Cloudflare will provide you with 2 nameservers - go to your domain registrar and replace existing nameservers with Cloudflare's

6

Save changes and wait 5-30 minutes for propagation

⚠️ Important for Email Users

If you use email with your domain (like [email protected]), make sure your MX records are preserved when transferring to Cloudflare. Set mail-related A records to "DNS only" (grey cloud), not Proxied (orange cloud).

Step 2: Create a Cloudflare Worker

Cloudflare Workers allow you to route your custom domain to your Prometora marketplace.

1

In Cloudflare, go to Workers & Pages (left sidebar)

2

Click "Create Application"

3

Click "Create Worker"

4

Give it a name (e.g., "domain-proxy" or "marketplace-router")

5

Click "Deploy"

Step 3: Configure Worker Code

The Worker needs the routing logic to look up your store and proxy requests to Prometora's servers.

1

In your Worker, click "Edit Code" or "Quick Edit"

2

Replace ALL code with the full routing code below

3

Go to Settings → Variables and add environment variable:

  • Name: VERCEL_DEPLOYMENT_URL
  • Value: https://www.prometora.com
4

Click "Save and Deploy"

⚠️ Important

Use the complete code below. The Worker needs to look up which store owns your domain and route requests accordingly.

/**
 * Cloudflare Worker for Custom Domain Routing
 */

// Your Vercel deployment URL
const VERCEL_URL = typeof VERCEL_DEPLOYMENT_URL !== 'undefined' ? VERCEL_DEPLOYMENT_URL : 'https://www.prometora.com';
const API_BASE_URL = `${VERCEL_URL}/api`;

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  const hostname = url.hostname;

  // Skip for workers.dev domain (use for testing)
  if (hostname.endsWith('.workers.dev')) {
    return new Response('Cloudflare Worker is running! This is used for custom domain routing.', {
      headers: { 'content-type': 'text/plain' }
    });
  }

  try {
    // Check if this is a static asset request
    const isStaticAsset = url.pathname.startsWith('/_next/') ||
                          url.pathname.startsWith('/static/') ||
                          url.pathname.startsWith('/favicon.ico') ||
                          url.pathname.startsWith('/images/') ||
                          url.pathname.match(/\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot)$/);

    // Check if this is an API request
    const isApiRequest = url.pathname.startsWith('/api/');

    // For static assets or API requests, proxy directly WITHOUT rewriting path
    if (isStaticAsset || isApiRequest) {
      const newUrl = new URL(request.url);
      newUrl.hostname = new URL(VERCEL_URL).hostname;
      newUrl.protocol = 'https:';

      const headers = new Headers(request.headers);

      // For API requests, add the custom domain header so middleware knows which store
      if (isApiRequest) {
        headers.set('X-Custom-Domain', hostname);
      }

      const response = await fetch(new Request(newUrl.toString(), {
        method: request.method,
        headers: headers,
        body: request.body,
        redirect: 'manual'
      }));
      return rewriteRedirectResponse(response, hostname);
    }

    // Step 1: Look up which store owns this domain (only for non-API requests)
    const storeSlug = await getStoreByDomain(hostname);

    if (!storeSlug) {
      return new Response('Store not found for this domain', {
        status: 404,
        headers: { 'content-type': 'text/plain' }
      });
    }

    // Step 2: Rewrite URL to custom-domain path on Vercel
    const newUrl = new URL(request.url);
    newUrl.hostname = new URL(VERCEL_URL).hostname;
    newUrl.protocol = 'https:';
    if (url.pathname === '/') {
      newUrl.pathname = `/custom-domain`;
    } else {
      newUrl.pathname = `/custom-domain${url.pathname}`;
    }

    // Step 3: Create modified request with custom headers
    const headers = new Headers(request.headers);
    headers.set('X-Custom-Domain', hostname);
    headers.set('X-Store-Slug', storeSlug);
    headers.set('X-Forwarded-Host', hostname);

    const response = await fetch(new Request(newUrl.toString(), {
      method: request.method,
      headers: headers,
      body: request.body,
      redirect: 'manual'
    }));
    return rewriteRedirectResponse(response, hostname);

  } catch (error) {
    console.error('Worker error:', error);
    return new Response(`Error: ${error.message}`, {
      status: 500,
      headers: { 'content-type': 'text/plain' }
    });
  }
}

/**
 * Rewrite redirect responses to use the custom domain
 */
function rewriteRedirectResponse(response, customHostname) {
  const modifiedResponse = new Response(response.body, response);
  modifiedResponse.headers.set('X-Served-By', 'Cloudflare-Worker');

  if (modifiedResponse.headers.has('location')) {
    let location = modifiedResponse.headers.get('location');
    const vercelHostname = new URL(VERCEL_URL).hostname;
    if (location.includes(vercelHostname)) {
      location = location.replace(vercelHostname, customHostname);
    }
    location = location.replace('/custom-domain/', '/');
    location = location.replace('/custom-domain', '/');
    if (location.startsWith('/')) {
      location = `https://${customHostname}${location}`;
    }
    modifiedResponse.headers.set('location', location);
  }

  return modifiedResponse;
}

async function getStoreByDomain(domain) {
  try {
    const response = await fetch(`${API_BASE_URL}/stores/lookup?domain=${encodeURIComponent(domain)}`, {
      headers: {
        'Content-Type': 'application/json'
      }
    });

    if (!response.ok) {
      console.error('Store lookup failed:', response.status);
      return null;
    }

    const data = await response.json();
    return data.slug || null;

  } catch (error) {
    console.error('Error looking up store:', error);
    return null;
  }
}

Step 4: Add Custom Domain to Worker

After configuring the Worker code, attach your custom domain to it. This automatically creates the necessary DNS routing.

1

In your Worker, go to Settings → Domains & Routes

2

Click "Add Custom Domain"

3

Enter your domain: www.example.com

4

Click "Add Domain" - Cloudflare will automatically create DNS routing and provision an SSL certificate (1-2 minutes)

💡 Note

When you add a custom domain to a Worker, Cloudflare automatically creates the necessary DNS records. You don't need to manually add CNAME records.

Step 5: Set up Apex Domain Redirect (Optional)

If you're using www.example.com, you should redirect the apex domain (example.com) to www for consistency.

1

In Cloudflare, go to DNS → Records and add an A record:

  • Type: A
  • Name: @ (represents apex domain)
  • IPv4 address: 192.0.2.1 (placeholder IP)
  • Proxy status: Proxied (orange cloud)
2

Go to Rules → Redirect Rules and click "Create rule"

3

Use the "Redirect from root to WWW" template - redirect https://example.com/* to https://www.example.com/$1 with status code 301

4

Enable SSL/TLS → Always Use HTTPS in Cloudflare settings

Step 6: Verify in Prometora Dashboard

The final step is to verify your domain in your Prometora store settings.

1

Log in to your Prometora dashboard

2

Go to Store Settings → Custom Domain

3

Enter your custom domain (e.g., www.example.com)

4

Click "Add Custom Domain"

5

Wait 30 seconds, then click "Verify DNS"

✅ Success!

Your marketplace is now live at your custom domain with automatic SSL encryption. Visit https://www.example.com to see your store.

Step 3: Verify Your Domain

After adding DNS records, return to Prometora and click Verify Domain.

DNS Propagation Time

DNS changes can take anywhere from 5 minutes to 48 hours to propagate worldwide. Most changes complete within 1-2 hours. During this time, verification may fail - this is normal.

Domain Status

Your domain will show one of these statuses:

VerifiedDomain is connected, SSL is active, your marketplace is live!
PendingWaiting for DNS propagation. Check back in a few hours.
SSL ProvisioningDNS verified, SSL certificate is being generated (5-10 minutes)
FailedDNS records not found or incorrect. See troubleshooting below.

SSL Certificate

SSL (Secure Sockets Layer) encrypts data between your visitors and your marketplace, showing the padlock icon in browsers.

Automatic SSL

SSL certificates are automatically provisioned and renewed for all custom domains. You don't need to purchase or configure SSL separately.

Auto-Renewal

Certificates are renewed automatically before expiration. No action needed from you.

HTTPS Enforced

All traffic is automatically redirected to HTTPS. HTTP requests redirect to the secure version.

WWW vs Non-WWW

You can use either www.yourmarket.com or yourmarket.com as your primary domain:

Root Domain (yourmarket.com)

  • • Shorter, cleaner URL
  • • Modern convention for most websites
  • • Requires an A record (some hosts have limitations)

WWW Subdomain (www.yourmarket.com)

  • • Traditional format, familiar to users
  • • Uses CNAME record (more flexible)
  • • Better for cookie handling in some cases

Recommendation: Set up both! Our DNS configuration handles this - visitors can access your site with or without www, and they'll be redirected to your preferred version.

Using a Subdomain

If you already have a website and want your marketplace on a subdomain (e.g., shop.yourcompany.com):

TypeName/HostValue/Target
CNAMEshopdomains.prometora.com

Replace shop with your desired subdomain name (store, marketplace, buy, etc.). Then add the domain shop.yourcompany.com in Prometora and verify it.

Email Configuration

Connecting a custom domain does NOT affect your email. If you have email on your domain (e.g., through Google Workspace, Microsoft 365), it will continue working.

✅ Safe to Keep

MX records (email), TXT records (SPF, DKIM, DMARC), and other DNS records are not affected by our A and CNAME records. Only modify the specific records listed above.

Troubleshooting

"Domain not verified" after adding records

  • • Wait longer - DNS propagation can take up to 48 hours
  • • Double-check the record values (no typos)
  • • Ensure you deleted conflicting A/CNAME records
  • • Try verifying again in 30 minutes

"SSL certificate error" or "Not secure" warning

  • • SSL provisioning takes 5-10 minutes after DNS verification
  • • If using Cloudflare, ensure proxy is OFF (gray cloud)
  • • Clear your browser cache and try again

"This site can't be reached"

  • • DNS records may not have propagated yet
  • • Try accessing from a different device or network
  • • Use a DNS checker tool to verify your records are live

"Redirect loop" or infinite loading

  • • If using Cloudflare, set SSL/TLS mode to "Full" or "Full (strict)"
  • • Disable any redirect rules at your registrar
  • • Check for conflicting proxy settings

Email stopped working after domain setup

  • • You may have accidentally deleted MX records
  • • Only modify A and CNAME records for @ and www
  • • Contact your email provider to get MX records to re-add

DNS Checker Tools

Use these free tools to verify your DNS records are correct:

Frequently Asked Questions

Can I use multiple domains for one marketplace?

Yes! You can add multiple domains or subdomains. One will be primary (used for canonical URLs), and others will redirect to it. This is useful for typo domains or regional variations.

How do I transfer my domain to a different registrar?

Domain transfers don't affect your Prometora setup. After transfer, just make sure the same DNS records are configured at your new registrar. There may be brief downtime during transfer.

What happens if my domain expires?

Your marketplace will become inaccessible at that domain. Set up auto-renewal at your registrar to prevent this. Most registrars offer a grace period to renew expired domains.

Can I change my domain later?

Yes, you can add a new domain and remove the old one anytime. Consider SEO impact - set up redirects from the old domain if it had traffic and search rankings.

Do I need to buy SSL separately?

No! SSL certificates are included free and automatically managed. All custom domains get HTTPS enabled automatically.

💡 Need More Help?

If you're having trouble setting up your domain, contact support at [email protected] with your domain name and registrar, and we'll help you get connected.

Custom Domain | Prometora Docs