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.

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 :
- Fire un POST vers
/r/<slug>/verifyavec les query params capturés. - Reçoit la redirect URL finale (avec params merged).
- 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
metapermetrerender_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 lemetaSANS 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
descriptionque 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: urlsansurl: Trackily refuse, manque le payload.type: localsanshtml_content: pareil.type: redirect_trackersansredirect_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: aiviacreate_landing: not supported — passe pargenerate_ai_landing. Sinon tu insères un row sansmeta, donc impossible àrerender_landing_from_meta.- Mix
enable_protection: true+protection_config: {...}: si tu passes les deux, leprotection_configcomplet override le shortcut. - DALL-E URLs sur landing AI : expirent en 1h. Toujours préférer
openai_gpt_image(base64 persistent) ounano_banana(data:URL).
Voir aussi
- Landings — index — vue d'ensemble
- AI Builder —
generate_ai_landingen détail - Image providers — pour les landings AI
- MCP — tools reference —
create_landing,update_landing,import_landing_from_url