Personalization: variables, dynamic blocks and safe fallbacks
The Personalization domain tests how you use contact data and behaviour to change what a recipient sees - in subject lines, body content, product blocks and on-site experiences - without breaking the message for contacts whose data is missing or stale.
Variables and fallbacks
- Personalization variables map to contact data fields and are resolved at render time, close to send.
- Always set a fallback: a contact with an empty first name should read "Hi there", not "Hi ,".
- Variables can be used in subject lines, preheaders, body copy, links and plain-text versions; in URLs, check that the substituted value is encoded correctly.
- Preview against a real test contact rather than the default profile so empty fields and unusually long values are visible.
Dynamic content and recommendations
- Dynamic content blocks serve different variants based on segment membership, rules or data field values; each recipient receives only the matching variant.
- Variants are evaluated at send time, so segment membership must be correct before the send begins.
- Recommendation blocks draw on order and browsing data to show viewed, related or best-selling products, and need sensible fallback content when data is thin.
Worked example
A retailer personalizes a subject line as "Hi @FIRSTNAME@, your @LAST_CATEGORY@ picks" and adds a dynamic block: VIPs see free next-day delivery, everyone else sees a 10% code. A contact named Alex has no last category recorded, so the fallback text renders; because she sits in the VIP segment, she receives only the delivery variant.
Reasoning: the fallback keeps the subject readable when the field is empty rather than producing a broken string. The dynamic block is resolved at send time against current segment membership, so yesterday's tier change is reflected, and only one variant is delivered - variants are not cumulative.
Traps that cost marks
- Personalizing from fields that have not synced since the last ecommerce or CRM integration run.
- Testing with a preview that is not a real contact, so empty-field behaviour is never observed.
- Renaming a data field without updating the variable, which silently renders the placeholder blank.
- Building a dynamic block with no default or else-branch, so unmatched contacts see nothing.