Troubleshooting
My vary() tags show as raw text in the preview. What's wrong?
Two possible causes:
- You're on a legacy template. Liquid tags only process in Liquid templates. Check your template type.
- Syntax issue. Check for nested Liquid tags. Personalization and Liquid logic must be resolved inside
assignstatements before being passed tovary().
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. Check each vary() tag and align them.
I duplicated a template with vary() tags. Will the optimization weights carry over?
No. Duplicated templates do not retain weights or performance data. Each new campaign begins with an equal distribution among variants.
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 remain active, but traffic distribution heavily favors the leading variant. A leading variant can receive 60%+ of traffic, while an underperformer drops to ~4%. The system maintains a small exploration slice for 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 each channel's engagement metrics: email uses opens and clicks; SMS uses tracked link clicks; and push uses opens.
Can I use AI Content Decisioning Agent with Send Time Optimization?
Yes, they run on separate logic layers. STO controls timing, AI Content Decisioning Agent controls content.
Constraints
What can go inside vary()?
Currently, vary() accepts plain text strings and customer attributes. Content blocks, data connections, and images are on the roadmap. You can use personalization (e.g., customer.FIRST_NAME) but it must be built inside assign statements, not nested in the vary() array.
How many variants?
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 match.
Which channels?
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?
Both scheduled and triggered campaigns.