Trackily Docs

Types de landings

Trackily expose 4 types de landing : url, local, redirect_tracker, ai. Le type détermine ce que tu stockes (URL externe / HTML inline / config redirect / HTML+meta IA) et comment Trackily la sert au runtime.

Modal Add Landing — Local par défaut

Concept

Le type est un discriminator simple sur la table landing_pages. Tous les types partagent les mêmes colonnes (name, slug, is_active, protection_config, notes) — seule la colonne payload change selon le type :

Type Colonne payload utilisée Servi via
url url (TEXT) 302 redirect
local html_content (TEXT) renvoyé tel quel inline
redirect_tracker redirect_config (JSONB) page intermédiaire + redirect
ai html_content + meta (JSONB) renvoyé inline (regénérable)

Le tool create_landing (autopilot-content-tools.js:1641) supporte les 3 premiers types ; pour générer un AI, utilise generate_ai_landing qui crée un row type='ai' et popule html_content + meta.

Type url — Redirection externe

Quand l'utiliser

  • Ta landing est hébergée ailleurs (Cloudflare Pages, Vercel, S3, WordPress).
  • Tu veux juste que Trackily tracke le clic et renvoie le visiteur.
  • La landing change souvent et tu ne veux pas re-deployer Trackily.

Comment créer

{
  "name": "create_landing",
  "arguments": {
    "name": "MemoMind FR — V2 prelander",
    "slug": "memomind-fr-v2",
    "type": "url",
    "url": "https://landings.mymeditationapp.com/memomind/fr/v2"
  }
}

Au runtime, /lp/memomind-fr-v2 répond 302 Location: https://landings.mymeditationapp.com/memomind/fr/v2. Le visiteur ne voit jamais Trackily.

Limites

  • Pas d'injection de pixels retargeting de la campagne (puisque le HTML n'est pas chez toi).
  • Pas de Lander Protection (pas le contrôle du HTML).
  • Le tracking conversion repose sur ce que tu fais côté landing externe (postback offer affiliate).

Type local — HTML inline en DB

Quand l'utiliser

  • Tu veux héberger toi-même sans pipeline de déploiement séparé.
  • Tu veux que Trackily injecte ton tracking JS (CTA hijack, pixel scripts).
  • Tu veux benefit du Lander Protection (anti-spy, no-right-click, etc.).
  • Tu pars d'un HTML écrit à la main, importé d'un concurrent, ou copié depuis ailleurs.

Comment créer

Via UI : Landings → Add Landing → type Local (HTML Content) → coller le HTML → Save.

Via MCP :

{
  "name": "create_landing",
  "arguments": {
    "name": "MemoMind manual prelander",
    "slug": "memomind-manual",
    "type": "local",
    "html_content": "<!doctype html><html><head><title>MemoMind</title></head><body>...</body></html>",
    "enable_protection": true
  }
}

enable_protection: true met protection_config: { enabled: true }. Tu peux aussi passer un protection_config complet pour configurer finement (whitelist user-agents, JS anti-debug, etc.).

Import depuis une URL

Tool : import_landing_from_url. Télécharge la page externe et la stocke en type=local.

{
  "name": "import_landing_from_url",
  "arguments": {
    "name": "Cloned competitor LP",
    "url": "https://competitor.com/landing/special-offer",
    "as_type": "local"
  }
}

Note : les assets externes (images, CSS, JS) RESTENT en URL distantes. Si tu veux tout inliner / réécrire, utilise l'admin "Import from URL" flow (avec asset inlining).

Limites

  • Le HTML est dans la DB — pas pratique d'éditer à la souris (pas de WYSIWYG natif). Use le code editor de l'admin.
  • Aucune génération AI — c'est toi qui écris le copy.

Type redirect_tracker — Prelander capture-and-redirect

Quand l'utiliser

  • Tu veux capturer les click IDs (fbclid, gclid, ttclid, subid…) au server-side avant de rediriger.
  • Tu veux ajouter un CAPTCHA ou un honeypot anti-bot avant que la conversion ne soit envoyée.
  • Tu veux un délai (delay_ms) pour faire passer le visiteur par un interstitiel.
  • Tu veux ajouter des params custom à l'URL de destination.

Schema redirect_config

{
  "target_url": "https://offer.affiliate.com/?aff=12345",  // requis
  "forward_params": true,                                   // forward tous les query params reçus
  "delay_ms": 0,                                            // délai avant redirect (en ms)
  "extra_params": { "utm_source": "trackily" },             // params injectés en plus
  "captcha": { "enabled": false, "type": "recaptcha_v3" },  // optionnel
  "honeypot": { "enabled": true }                           // form hidden anti-bot
}

Comment créer

{
  "name": "create_landing",
  "arguments": {
    "name": "MemoMind FBclid capture",
    "slug": "memomind-fbclid",
    "type": "redirect_tracker",
    "redirect_config": {
      "target_url": "https://offer.health-net.com/?offer_id=memomind",
      "forward_params": true,
      "delay_ms": 0,
      "extra_params": { "sub_aff": "trackily" }
    }
  }
}

Comment c'est servi

L'URL canonique d'un redirect_tracker est /r/<slug> (pas /lp/<slug> — c'est une route séparée dans server.js:18604). Trackily renvoie une mini-page HTML qui :

  1. Fire un POST vers /r/<slug>/verify avec les query params capturés.
  2. Reçoit la redirect URL finale (avec params merged).
  3. Fait un window.location.replace() côté client.

Si tu mets /lp/<slug> sur un redirect_tracker, Trackily redirige 302 vers /r/<slug> (cf. server.js:18588).

Limites

  • Pas d'HTML visible si delay_ms: 0 (le visiteur voit juste un flash blanc avant redirect).
  • Nécessite JavaScript actif chez le visiteur (les bots sans JS ne passent pas — c'est souvent un avantage).

Type ai — AI-générée

Quand l'utiliser

  • Tu veux une landing complète en 30 secondes sans écrire une ligne de HTML.
  • Tu veux tester N variantes (A/B archetype, A/B copywriting framework).
  • Tu veux qu'une landing soit re-générable à coût zéro (le meta permet rerender_landing_from_meta).

Comment créer

Pas via create_landing — via generate_ai_landing. Voir ai-builder pour la doc complète.

Vue rapide :

{
  "name": "generate_ai_landing",
  "arguments": {
    "description": "MemoMind — cognitive supplement for adults 45+",
    "vertical": "memory",
    "engine": "v2",
    "framework": "pas",
    "traffic_temperature": "cold",
    "force_archetype": "wellness",
    "cta_url": "https://offer.health-net.com/memomind"
  }
}

Trackily insère un row avec type='ai', html_content (le HTML rendered), meta (le copy + le design DNA + provider config). Tu peux ensuite :

  • rerender_landing_from_meta → re-génère le HTML depuis le meta SANS appel LLM (utile quand le renderer est upgradé).
  • update_landing → patch n'importe quel champ (slug, is_active, price_overrides, notes).
  • link_landing_to_campaign → branche-la dans un flow.

Stockage du meta

Le meta JSONB contient :

{
  "copy": { "headline": "...", "subheadline": "...", "testimonials": [...] },
  "design_dna": { "aesthetic_archetype": "wellness", "palette": {...}, "typography": {...} },
  "engine": "v2",
  "template_id": null,                  // pour v1 only
  "image_provider": "pollinations",
  "image_keys": { ... },                // jamais les valeurs en clair
  "llm_provider": "anthropic",
  "llm_model": "claude-3-5-sonnet",
  "last_generated_at": "2026-05-18T...",
  "last_rerendered_at": null
}

Limites

  • Coût LLM (~$0.02 v1, ~$0.05-0.15 v2 selon modèle).
  • Coût image variable (gratuit pour Pollinations, jusqu'à $0.167 pour gpt-image-1 high quality).
  • La qualité dépend du description que tu fournis. Sois précis.

Exemples concrets

Landing url externe pour campagne push

{
  "name": "create_landing",
  "arguments": {
    "name": "VPN PRO US — Vercel hosted",
    "slug": "vpn-pro-us",
    "type": "url",
    "url": "https://lp.vpnpro.com/us-promo"
  }
}

Landing local avec HTML manuel

{
  "name": "create_landing",
  "arguments": {
    "name": "Diet Keto FR — manuel",
    "slug": "diet-keto-fr",
    "type": "local",
    "html_content": "<!doctype html>...",
    "enable_protection": true
  }
}

Landing redirect_tracker pour Meta CAPI

{
  "name": "create_landing",
  "arguments": {
    "name": "Diet Keto — Meta capture",
    "slug": "diet-keto-meta",
    "type": "redirect_tracker",
    "redirect_config": {
      "target_url": "https://offer.healthstore.com/diet-keto",
      "forward_params": true,
      "extra_params": { "src": "trackily-fb" }
    }
  }
}

Landing AI rapide

{
  "name": "generate_ai_landing",
  "arguments": {
    "description": "VPN service for streaming Netflix US from EU",
    "vertical": "vpn",
    "engine": "v2",
    "framework": "pas",
    "force_archetype": "dark_tech"
  }
}

Erreurs courantes

  • type: url sans url : Trackily refuse, manque le payload.
  • type: local sans html_content : pareil.
  • type: redirect_tracker sans redirect_config.target_url : pareil. Trackily valide la shape.
  • Slug avec espaces ou majuscules : Trackily normalise en [a-z0-9-]. Une majuscule devient minuscule, un espace devient -.
  • Slug déjà pris : refusé, choisis-en un autre.
  • type: ai via create_landing : not supported — passe par generate_ai_landing. Sinon tu insères un row sans meta, donc impossible à rerender_landing_from_meta.
  • Mix enable_protection: true + protection_config: {...} : si tu passes les deux, le protection_config complet override le shortcut.
  • DALL-E URLs sur landing AI : expirent en 1h. Toujours préférer openai_gpt_image (base64 persistent) ou nano_banana (data:URL).

Voir aussi