Links

Short links and campaign tracking

Links

Entrolytics Links provides URL shortening and campaign tracking to measure the effectiveness of your marketing efforts.

Overview

Links allow you to:

  • Shorten URLs for social media, emails, and campaigns
  • Track clicks with detailed analytics (device, location, referrer)
  • Measure campaigns with UTM parameters
  • Attribute conversions to specific links

Via Dashboard

  1. Navigate to Links in the sidebar
  2. Click Create Link
  3. Enter the destination URL
  4. Customize the slug (optional)
  5. Add UTM parameters (optional)
  6. Click Create

Via API

import { getClient } from '@entro314labs/entro-api'

const client = getClient({
  hostUrl: 'https://cloud.entrolytics.click',
  websiteId: 'your-website-id',
})

const link = await client.links.create({
  url: 'https://example.com/product',
  slug: 'summer-sale', // Optional custom slug
  utmSource: 'twitter',
  utmMedium: 'social',
  utmCampaign: 'summer-2024',
})

// Result: https://entrolytics.click/l/summer-sale

Via CLI

entro links create https://example.com/product --slug summer-sale

Links follow this format:

https://entrolytics.click/l/{slug}

For self-hosted instances:

https://your-domain.com/l/{slug}

UTM Parameters

Links support full UTM tracking:

ParameterDescriptionExample
utm_sourceTraffic sourcetwitter, newsletter
utm_mediumMarketing mediumsocial, email, cpc
utm_campaignCampaign namesummer-sale-2024
utm_termSearch keywordsrunning shoes
utm_contentAd variationcta-button-red
const link = await client.links.create({
  url: 'https://example.com/landing',
  utmSource: 'facebook',
  utmMedium: 'paid',
  utmCampaign: 'retargeting-q4',
  utmContent: 'carousel-ad-1',
})

Click Metrics

Each link tracks:

  • Total clicks - All-time click count
  • Unique visitors - Deduplicated by session
  • Click rate - Clicks over time
  • Geographic data - Country, region, city
  • Device data - Browser, OS, device type
  • Referrer - Where clicks came from

Viewing Analytics

// Get link with stats
const link = await client.links.get(linkId)

// Get detailed click analytics
const stats = await client.links.getStats(linkId, {
  startAt: '2024-01-01',
  endAt: '2024-12-31',
})

Dashboard Views

Navigate to Links → Click on a link to see:

  • Click timeline chart
  • Top countries
  • Top devices
  • Top referrers
  • Recent clicks

Links can be created at the organization level for team sharing:

// Create org-level link
const link = await client.links.createOrgLink(orgId, {
  url: 'https://example.com/team-resource',
  slug: 'team-docs',
})

// List all org links
const links = await client.links.getOrgLinks(orgId)

API Reference

const link = await client.links.create({
  url: string,           // Destination URL (required)
  slug?: string,         // Custom slug (auto-generated if omitted)
  utmSource?: string,
  utmMedium?: string,
  utmCampaign?: string,
  utmTerm?: string,
  utmContent?: string,
})
const link = await client.links.get(linkId)
const link = await client.links.update(linkId, {
  url?: string,
  slug?: string,
  // ... UTM parameters
})
await client.links.delete(linkId)
const links = await client.links.list({
  page?: number,
  limit?: number,
})

Best Practices

Naming Conventions

Use descriptive, consistent slugs:

✅ summer-sale-2024
✅ newsletter-jan-promo
✅ twitter-bio-link

❌ link1
❌ abc123
❌ test

UTM Consistency

Maintain consistent UTM parameter values:

✅ utm_medium=email (always lowercase)
✅ utm_source=newsletter (consistent naming)

❌ utm_medium=Email, EMAIL, e-mail (inconsistent)

For time-sensitive campaigns, consider:

  1. Using campaign dates in slugs: black-friday-2024
  2. Tracking link performance after campaign end
  3. Archiving old links periodically

Integration with Events

Links automatically track as events:

// When a link is clicked, Entrolytics records:
{
  eventName: 'link_click',
  data: {
    linkId: 'link_123',
    slug: 'summer-sale',
    destination: 'https://example.com/product',
    utm_source: 'twitter',
    utm_campaign: 'summer-2024',
  }
}

You can correlate link clicks with conversions:

// In your conversion tracking
await client.trackEvent({
  name: 'purchase',
  data: {
    linkId: referringLinkId, // From URL parameter
    amount: 99.99,
  },
})

Self-Hosted Configuration

For self-hosted instances, configure the link domain:

# .env
LINK_DOMAIN=https://short.yoursite.com

Ensure your DNS and server are configured to handle the /l/* route.