18 августа 2025 г.

Как использовать динамический контент в email-рассылках

Время чтения: 13 минут

Персонализация в email-кампаниях принимает разные формы, от простой подстановки имени до персональной скидки. Но гораздо эффектнее, когда шаблон адаптируется динамически: показывает товары в корзине, предлагает аксессуары к недавней покупке или напоминает о просмотренных позициях. Такие рассылки выглядят как продолжение диалога, а не как простые массовые письма.

В этой статье расскажем про динамический контент: что это, зачем он нужен и как он работает.

Что такое динамический контент

Динамический контент — это элементы письма, которые меняются автоматически в момент отправки. Они могут быть уникальными для каждого получателя или сегмента, превращая шаблон в персонализированное сообщение.

Шаблоны карточек товаров в Pixcraft

Примеры динамических элементов:

ЭлементОписание
Товарные карточкиФормируются из YML- или JSON-фида либо через инструменты CDP и адаптируются под определённого пользователя или сегмент. Также это могут быть универсальные карточки, которые не нужно повторно верстать вручную: система сама добавляет товары и цены с сайта или из CDP.
Актуальные акцииПодставляются в письмо с учётом региона пользователя, его данных и истории взаимодействий, участия в A/B-тестировании и других факторов.
Бонусный баланс пользователяОтображает персональные бонусы, накопленные баллы или доступные привилегии.
Новости и статьиДобавляются в зависимости от типа письма. Например, можно автоматизировать ежемесячный дайджест, подгружая в шаблон самые популярные материалы из блога.

Зачем использовать динамический контент

Если коротко — чтобы письма были эффективнее, быстрее разрабатывались и проще масштабировались. Ниже расскажем про основные преимущества подробнее.

Повышение эффективности рассылок

Когда письмо адаптировано под интересы пользователя, оно выглядит уместно и сильнее привлекает внимание. Глубокая персонализация помогает:

  • точнее попадать в потребности аудитории;

  • удерживать внимание за счёт релевантных предложений;

  • превращать клики в целевые действия.

Лёгкое масштабирование

Без использования динамики для каждого сегмента приходится собирать отдельный шаблон, а это — десятки часов ручной работы. С динамическим контентом вы создаёте один шаблон, а система сама подставляет нужные блоки. Благодаря этому запуск новых кампаний проходит быстрее даже в масштабных проектах, а структура рассылки остаётся аккуратной и управляемой.

Реакция в нужный момент

Динамика позволяет реагировать, когда пользователь максимально вовлечён и заинтересован. Для этого можно настроить автоматические сценарии:

  • Клиент несколько раз просмотрел товар на сайте → отправляется письмо с аналогичными товарами или аксессуарами.

  • Клиент оформил заказ → отправляется письмо с тематикой «Вам также может понравиться…» и подборкой товаров.

  • Появились новинки в категории товаров, которые покупал клиент → отправляется письмо с подборкой «Возможно, вас заинтересуют эти новинки».

Меньше рутинной работы

Один продуманный шаблон с динамическими вставками сокращает число однотипных задач по подготовке писем. За счёт этого освобождается время на более комплексные процессы, такие как разработка креативов и продумывание стратегии.

Как работает динамика в письмах

Чтобы письмо стало динамичным, в нём должна быть реализована особая логика, которая позволяет автоматически менять содержимое. В сервисах рассылок для этого используются специальные инструменты: шаблонизаторы, условия, циклы и подключение внешних источников.

Переменные: подстановка данных

Это самый простой способ персонализации. Переменные подставляют в письмо нужные значения из базы: имя, город, сумму заказа, дату регистрации и другую информацию.


Примеры переменных:

ПеременнаяОписание
{{user.name}}Имя получателя
{{user.city}}Город из адресной базы
{{item.title}}Название товара из массива данных



Такие переменные можно использовать как в тексте, так и в ссылках, изображениях или заголовках. Главное, чтобы на момент формирования письма эти данные были доступны в системе, иначе переменная останется пустой.

Циклы: перебор списков

Циклы нужны, чтобы отобразить в письме какой-либо список элементов, например, подборку товаров.


Пример цикла:

1
2
3
4
5
6
7
{% for product in recommendations %}
  <div class="product-card">
    <img src="{{product.image}}" alt="{{product.title}}">
    <p>{{product.title}}</p>
    <p>{{product.price}} ₽</p>
  </div>
{% endfor %}

В этом случае если в recommendations будет указано 5 товаров, то в письме отобразятся 5 товарных карточек.

Условия: показ нужного контента

Условия позволяют управлять содержимым письма в зависимости от пола, статуса, активности или других параметров пользователя. Например, с их помощью можно показывать один блок только мужчинам, а другой — только женщинам.


Пример условия:

1
2
3
4
5
6
7
{% if user.gender == "male" %}
  <img src="banner-men.jpg" alt="Мужская коллекция">
{% elseif user.gender == "female" %}
  <img src="banner-women.jpg" alt="Женская коллекция">
{% else %}
  <img src="banner-default.jpg" alt="Новые поступления">
{% endif %}

Условия также можно сочетать с циклами, например, чтобы показывать только товары определённого ценового диапазона или из выбранных категорий.

Фиды: подключение внешних данных

Чтобы в письмо добавлялась актуальная информация о категориях, ценах и наличии товаров, можно использовать внешние источники. Чаще всего это файлы формата YML или JSON.

Платформа подгружает фид и делает его содержимое доступным для отображения в письмах. Так как данные загружаются из внешнего источника (например, сайта магазина), они сохраняют актуальность в рассылках.


Обобщённый пример подключения YML-фида:

1
[% external_extra("https://site.ru/catalog.yml", "format", "yml") %]

Как использовать динамический контент в различных платформах

В качестве примера рассмотрим, как применяется динамический контент в трёх популярных платформах для массовых рассылок: Altcraft, Sendsay и DashaMail.

Altcraft

В платформе Altcraft доступен «Маркет» — модуль для работы с данными о товарах и клиентских заказах. Он позволяет задействовать эти данные в рассылках для формирования динамического контента.

Маркет позволяет использовать в шаблонах:

  • Продукты. Префикс — product. Базовая товарная карточка с названием (name), идентификатором (external_id), категориями (categories), произвольными полями (custom_fields) и множеством других параметров.

  • SKU (Stock Keeping Unit). Префикс — sku. Вариации и свойства продукта, например, производитель (manufacturer_name), наличие в магазине (is_available), возможность курьерской доставки (delivery) и другие.

  • Заказ. Префикс — order. Включает общую информацию об одном заказе: например, идентификатор (external_id), статус (status) и общую стоимость (total_price).

  • Заказы. Префикс — orders. Позволяет выбирать несколько заказов в списке профиля.

Altcraft поддерживает два основных способа импорта товарных данных:

  • YML. Стандартный формат «Яндекса» для описания товаров. Подходит для массовой выгрузки из CMS, маркетплейсов или складских систем. Включает название магазина, категории и список товаров, цены и иные параметры.

  • JSON. Поддерживает загрузку сущностей продуктов, SKU, категорий, заказов и их позиций с необходимыми параметрами (external_id, name, entity_type и другими). С помощью JSON в сообщение добавляется информация, генерируемая на вашем сервере точно в момент отправки.

Рассмотрим пример подстановки товарных карточек из макета Altcraft в шаблон. Ниже — упрощённый вариант кода, включающий только ключевые фрагменты:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td align="center" valign="top">
{for $index $el = products("product.manufacturer_name == 'Apple'" 4 "price" "desc")}
<div style="display: inline-block;width:300px;">
    <div><a href="{$el.url}" ><img src="{$el.pictures}" /></a></div>
    <div><a href="{$el.url}" >{$el.name}</a></div>
      {if "el.old_price"}
        <div><s>{$el.old_price}</s></div>
    {end}
      <div>{$el.price}</div>
    <a href="{$el.url}" >Купить</a>
</div>
  {if iseven($index)}
        <!--[if (gte mso 9)|(IE)]>
        </td>
        <td valign="top" width="300" style="width: 300px">
        <![endif]-->
    {else}
          {if $index lt 3}
          <!--[if (gte mso 9)|(IE)]>
          </td></tr>
          <tr><td valign="top" width="300" style="width: 300px">
          <![endif]-->
          {end}
    {end}
{end}
</td></tr>
</table>

Разберём некоторые элементы подробнее:

  • for $index $el — цикл, позволяющий вывести массив элементов. В данном случае массив представляет собой список товаров.

  • products("product.manufacturer_name == 'Apple'" 4 "price" "desc") — запрос товаров. Здесь он содержит четыре параметра: в первом задан фильтр (какие товары нужно вывести), во втором — их количество, а два последних — это поле для сортировки и порядок сортировки.

  • Ещё один важный момент — условие под карточкой товара. Для корректного отображения в Outlook нужна правильная табличная структура. В зависимости от чётности текущей карточки (if iseven($index)) нужно либо перейти к следующей ячейке в том же ряду, либо завершить текущий ряд и начать новый. Для этого используют условные комментарии, которые Outlook понимает и обрабатывает.

Важный плюс Altcraft — единый синтаксис шаблонизатора для различных каналов: email, push, SMS и мессенджеров. Одна логика подстановки и фильтрации работает одинаково в разных форматах коммуникации, что упрощает настройку и масштабирование кампаний.

Sendsay

Sendsay оснащён внутренним механизмом шаблонизации контента для рассылок — языком PROScript. Он создан для того, чтобы внутри шаблона письма можно было:

  • формировать динамический контент;

  • управлять структурой на основе условий;

  • подставлять данные из внешних источников.

PROScript поддерживает:

  • Переменные. Дают доступ к значениям полей профиля или данных из внешнего источника. Переменная может быть хэшем, ссылкой на массив или объектом.

  • Циклы (foreach). Позволяют перебирать массивы данных (например, список акций или подарков).

  • Условия (if, elsif, else). Выводят блоки контента в зависимости от значений переменных.

  • Операторы (==, !=, and, or). Дают возможность строить сложные, составные проверки и вложенные условия.

Для сценариев e-commerce вроде «Брошенная корзина» или «Брошенный просмотр» Sendsay использует внешние YML-файлы. Кроме описания товаров они могут содержать список категорий, промо-акций и подарков. Элементы этих разделов доступны через специальные ключевые слова в пути:

  • [% yml.CATEGORY.<id>.* %] — категории товаров. Здесь <id> — это значение атрибута id тега <category> в YML-файле, которое идентифицирует конкретную категорию в каталоге.

  • [% yml.GIFT.<id>.* %] — список подарков. Здесь <id> соответствует значению атрибута id тега <gift>, описывающего конкретный подарок.

  • [% yml.PROMO.<id>.* %] | — список акций. Здесь <id> — значение атрибута id тега <promo>, в котором описаны условия и данные акции.

Рассмотрим упрощённый пример подстановки товарных карточек из JSON в шаблон:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[% external_extra("URL/products.json","ignore_error","1","timeout","1") %]

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td align="center" valign="top">
[% FOREACH item IN products %]
<div style="display: inline-block;width:300px;">
    <div><a href="[% item.url %]"><img src="[% item.pictures %]" /></a></div>
    <div><a href="[% item.url %]">[% item.name %]</a></div>
      [% IF item.old_price %]
        <div><s>[% item.old_price %]</s></div>
    [% END %]
      <div>[% item.price %]</div>
    <a href="[% item.url %]">Купить</a>
</div>

        [% IF loop.index % 2 == 0 %]
            <!--[if (gte mso 9)|(IE)]>
            </td>
            <td valign="top" width="300" style="width: 300px">
            <![endif]-->
        [% ELSE %]
        [% IF !loop.last %]
            <!--[if (gte mso 9)|(IE)]>
            </td></tr>
            <tr><td valign="top" width="300" style="width: 300px">
            <![endif]-->
            [% END %]
        [% END %]

[% END %]
</td></tr>
</table>

Здесь стоит отдельно упомянуть следующие элементы:

  • Через external_extra запрашивается JSON с каталогом товаров.

  • Цикл [% FOREACH item IN products %] перебирает все полученные товары.

  • Корректное отображение в Outlook обеспечивается через табличную структуру. Для этого проверяем чётность текущей итерации: [% IF loop.index % 2 == 0 %].

Как это работает при отправке:

  • Платформа подгружает данные из JSON.

  • Фильтрация и отбор нужных элементов выполняются прямо в шаблоне.

  • Получатель видит контент, сформированный по заданным правилам: например, только товары выбранной категории или акции для определённого сегмента.

DashaMail

В отличие от Altcraft и Sendsay, в DashaMail нет полноценного языка шаблонов, циклов и условий в привычном виде, но есть механизм автоматической подстановки товарных данных из YML-файла. Его необходимо предварительно добавить в разделе «Товары». Важно отметить, что подстановка товаров в DashaMail предусмотрена только для триггерных писем.

Здесь базовый пример добавления товарных карточек будет выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td align="center" valign="top">
<!--json_products_limit--><!--4--><!--/json_products_limit-->
<!--json_products-->
<div style="display: inline-block;width:300px;">
    <div><a href="%YML_URL%"><img src="%YML_IMAGE%" /></a></div>
    <div><a href="%YML_URL%">%YML_NAME%</a></div>
        <div><s>%YML_OLDPRICE%</s></div>
      <div>%YML_PRICE%</div>
    <a href="%YML_URL%">Купить</a>
</div>
<!--/json_products-->
</td></tr>
</table>

Рассмотрим подробнее некоторые из элементов:

  • <!--json_products--><!--/json_products--> — цикл, который выводит товарные карточки.

  • <!--json_cart-->...<!--/json_cart--> — для вывода данных из корзины.

  • <!--json_recent-->...<!--/json_recent--> — для вывода недавно просмотренных товаров.

  • <!--json_products_limit--><!--4--><!--/json_products_limit--> — позволяет ограничить количество выводимых товаров.

Задать условные комментарии для корректного отображения в Outlook здесь не получится. Для вёрстки необходимо искать другие решения: например, показывать по одной карточке в строке или делать адаптацию через CSS-медиазапросы.

Советы при работе с динамическим контентом

Перед запуском кампании важно проверять, как рассылка выглядит и ведёт себя в реальных условиях. Вот ключевые моменты, о которых стоит помнить:

  • Тестируйте шаблоны в разных почтовых клиентах. Например, Gmail может обрезать контент, а Outlook — некорректно отображать таблицы. Проверяйте подстановку: например, что произойдёт, если цикл выводит один товар, а не четыре. Оценивайте рендеринг и на десктопе, и на мобильных устройствах.

  • Используйте fallback, если данные не подгрузились. Например, нет товаров в корзине или указано поле без значения. Если товар окажется недоступен, отобразите в письме заглушку (например, «Товар скоро появится») или скрывайте пустые блоки полностью.

  • Не перегружайте подборками. Если в письме слишком много товаров, читателю сложнее сосредоточиться. Ограничьте шаблон 4–6 карточками. Под ними добавьте кнопку «Смотреть все», которая откроет список товаров на сайте.

  • Следите за размерами изображений. Тяжёлые изображения замедляют загрузку письма. Сжимайте их до оптимального размера (лучше всего до 100 КБ каждое).

Заключение

При грамотной реализации, тестировании и учёте поведения пользователя динамический контент становится мощным инструментом email-маркетинга. Ключ к успеху — сочетать технологию и внимание к деталям:

  • выбирать подходящий инструмент под задачи и уровень сложности;

  • тестировать сценарии и адаптивность шаблонов;

  • следить за корректностью данных и качеством отображения.

А чтобы не вникать в тонкости работы с кодом — воспользуйтесь нашим удобным визуальным конструктором писем Pixcraft. Воплощайте ваши идеи наглядно, быстро и без погружения в сложные технические процессы.

Хотите прокачать навыки в email-маркетинге? Загляните в наш Telegram-канал. Там мы делимся полезными материалами, лайфхаками и идеями для работы.

Поделиться: