This FAQ covers common troubleshooting questions, how the optimization works, and the constraints of Content Decisioning at launch. For setup steps, see Setting Up Content Variations.
Troubleshooting
My vary() tags show as raw text in the preview. What's wrong?
There are two common causes:
- You're on a legacy template. Liquid tags only process in Liquid templates. Check your template type.
-
Syntax issue — you're nesting Liquid inside the
vary()array. Personalization and Liquid logic must be resolved insideassignstatements before being passed tovary(). See Setting Up Content Variations for the correct pattern.
I'm getting a validation error about mismatched variant counts. How do I fix it?
Every vary() tag in a template must have the same number of items. The error "All vary function calls must have the same number of items. Expected 2, found 3" means one tag has a different array length. Check each vary() tag and align them.
I duplicated a template with vary() tags. Will the optimization carry over?
No. Duplicated templates start fresh — no weights, no history, no performance data transfers. The duplicate begins a new optimization cycle from equal distribution.
I removed vary() tags from a template that already ran. Can I get the data back?
Removing content variations hides variant performance data from Mission Control. The underlying data is retained, but is no longer visible in the breakdown view. Export or record your results before removing content variations from an active template.
How the Optimization Works
Does it pick a winner and stop testing?
No. All variants stay active, but traffic distribution becomes heavily skewed. A leading variant can receive 60%+ of traffic while an underperformer drops to ~4%. The system keeps a thin exploration slice on every variant.
How fast does it learn?
Send 1 is always equal distribution. From Send 2 onward, weights adjust based on engagement. For best results by campaign type:
- Recurring: Allow 3–5 sends before drawing conclusions. Avoid pausing and restarting, as this interrupts the optimization cycle.
- Intraday: Aim for a send window of at least 2–3 hours with meaningful volume in each 15-minute batch.
- Triggered: High-frequency flows optimize fastest. For lower-volume triggers, allow more time before expecting significant weight shifts.
What metrics does it optimize for?
Optimization is based on total engagement for the channel: email uses opens and clicks; SMS uses tracked link clicks; push uses opens.
Can I use Content Decisioning with Send Time Optimization?
Yes — they run on separate layers. STO controls timing, Content Decisioning controls content. See Monitoring Content Decisioning Performance for how they interact and when the combination works best.
Constraints
What can go inside vary()?
Currently, vary() accepts plain text strings only. Content blocks, data connections, and images are on the roadmap. You can use Liquid personalization (e.g., customer.FIRST_NAME) but it must be built inside assign statements, not nested in the vary() array.
How many variants can I test?
Up to 4 per vary() tag.
Can I use different variant counts per field?
No. All vary() tags within a template are linked and must be 1:1. Combinatorial variations are planned for a future release.
Which channels are supported?
Email, SMS, and push. SMS requires a tracked link in the message for optimization to work — without it, the system has no engagement signal to measure.
Which campaign types are supported?
All — scheduled and triggered.
Related Articles
- For an overview, see Introduction to Content Decisioning
- For setup, see Setting Up Content Variations
- For the Campaign Builder step, see Sending a Campaign with Content Variations
- For post-launch behavior, see Monitoring Content Decisioning Performance