Salesforce ha anunciado un cambio importante en el motor de renderizado de las líneas de asunto en Marketing Cloud Engagement. Este cambio tendrá efecto el 15 de marzo de 2026.
A partir del 15 de marzo de 2026, la plataforma dejará de aplicar la llamada doble evaluación (double evaluation) en los subject lines de email.
Si utilizas personalización avanzada o AMPscript anidado en el asunto, es importante revisar tus emails antes de esa fecha.

¿Qué es la doble evaluación?
Hasta ahora, el asunto del email se procesaba en dos pasadas.
Antes (hasta marzo 2026)
El motor hacía:
2ª Evaluación ( 1ª Evaluación ( SubjectLine ) )
Evaluación 1
Evaluaba:
- AMPscript.
- Variables.
- Lookup.
- Personalization strings (%%FirstName%%).
Si el resultado aún contenía AMPscrip……
Evaluación 2
Lo volvía a evaluar.
Esto permitía personalización “anidada”, si había quedado una variable pendiente tipo %%Nombre%% aun podía personalizarla en esta segunda pasada.
| Ejemplo real |
|---|
| Supongamos que declaras así tu asunto: SET @Subject = «Descubre tu oferta especial, %%FirstName%%» Y el Subject es: %%=v(@Subject)=%% Antes: Pass 1 → Descubre tu oferta especial, %%FirstName%% Pass 2 → Descubre tu oferta especial, Laura Funcionaba porque había doble evaluación. |
¿Qué cambia desde marzo 2026?
Solo habrá una única evaluación.
EvaluacionUnica( SubjectLine )
Si, tras esa evaluación, el resultado aún contiene AMPscript o personalization strings…
Ya no se volverá a procesar.
| El ejemplo anterior quedaría así: |
| Pass 1 → Descubre tu oferta especial, %%FirstName%% ❌ Se queda así. No hay segunda pasada |
Salesforce ha creado una nueva funcionalidad para esta transición%%__SINGLE_RESOLVE%%
Si desde marzo solo habrá una evaluación, ¿para qué sirve?
Sirve para simular el comportamiento futuro ahora.
Al añadir:
%%__SINGLE_RESOLVE%%
estás diciendo a la plataforma:
“Evalúa este asunto solo una vez, aunque aún exista doble evaluación activa.”
Esto permite:
- Detectar emails que dejarán de funcionar.
- Probar el nuevo comportamiento antes del deadline.
- Controlar la transición.
Después del 15 de marzo 2026:
- La evaluación única será el comportamiento por defecto.
- El string dejará de ser necesario.
- Puedes dejarlo o eliminarlo.
⚠️ Importante: Solo funciona en el campo Subject.
¿A quién afecta realmente?
No todos los emails necesitan cambios.
❌ No se ven afectados:
- Hola %%FirstName%%.
- Tu pedido %%OrderNumber%% ya está listo.
- Variables simples.
- Asuntos que ya viene el texto de la variable renderizado.
✅ Sí deben revisarse:
- Subjects guardados en Data Extensions que contienen AMPscript.
- Content Blocks que devuelven personalización no resuelta.
🔍 Casos prácticos (nuevos ejemplos)
Caso 1: Asunto almacenado en Data Extension con personalización
| Data Extension DynamicSubject = «Tu saldo actual es %%Balance%% €» Subject actual %%DynamicSubject%% |
| Antes Pass 1 → Tu saldo actual es %%Balance%% € Pass 2 → Tu saldo actual es 320 € |
| Desde marzo Pass 1 → Tu saldo actual es %%Balance%% € ❌ No se resuelve. |
✅ Solución recomendada (mejor práctica)
No guardar AMPscript en la DE.
Construir el texto final:
%%=Concat(«Tu saldo actual es «, Balance, » €»)=%% %%__SINGLE_RESOLVE%%
Caso 2: Content Block que genera el asunto
Muchos equipos (como el vuestro) usan un Content Block separado para el asunto.
| Content Block (Asunto_CB) %%[ SET @subject = «Oferta especial para %%FirstName%%» ]%% Subject %%=v(@subject)=%% |
| Antes Pass 1 → Oferta especial para %%FirstName%% Pass 2 → Oferta especial para Marta |
| Desde marzo Pass 1 → Oferta especial para %%FirstName%% ❌ No se resuelve. |
✅ Forma correcta
Que el Content Block devuelva el texto ya resuelto:
%%[
SET @subject = Concat(«Oferta especial para «, FirstName)
]%%
Subject:
%%=v(@subject)=%% %%__SINGLE_RESOLVE%%
La clave:
👉 El subject debe quedar en texto final tras una sola evaluación.
Caso 3: Lookup que devuelve personalización
| Body SET @promo = Lookup(«Promotions»,»SubjectText»,»Tier»,Tier) Y el campo contiene: «Accede ahora, %%FirstName%%» Subject %%=v(@promo)=%% |
| Problema Si el Lookup devuelve texto con personalización, ya no habrá segunda evaluación. |
| Solución Construir el asunto final: SET @promo = Concat(«Accede ahora, «, FirstName) |
Caso 4: Uso de TreatAsContent()
TreatAsContent() fuerza la evaluación del contenido como si fuera código.
Ejemplo:
| %%=TreatAsContent(@subject)=%% Esto puede seguir funcionando, pero: ⚠️ TreatAsContent se comporta como un eval() en JavaScript. Si el origen de los datos no está controlado, puede ser riesgoso. |
| Recomendación: – Evitar guardar AMPscript en DE – Construir el texto final mediante Concat() |
🛠 Qué deben hacer los equipos
1️⃣ Auditar
Revisar:
- Emails activos.
- Plantillas reutilizables.
- Triggered Sends.
- Journeys activos.
2️⃣ Buscar patrones de riesgo
- Campos de DE con %% dentro.
- TreatAsContent en Subject.
- Content Blocks que imprimen variables con %% dentro.
- Lookup que devuelve texto dinámico con personalización embebida.
3️⃣ Añadir %%__SINGLE_RESOLVE%% para testear
Ejemplo:
%%=v(@subject)=%% %%__SINGLE_RESOLVE%%
Enviar pruebas.
Verificar que el asunto queda correcto con una sola evaluación.
4️⃣ Re-publicar Journeys
Muy importante:
Los cambios en emails de Journey Builder o Triggered Sends no se aplican hasta que se republícan.
📌 Conclusión
Este cambio no afecta a la mayoría de personalizaciones básicas.
Sí impacta a arquitecturas avanzadas donde el subject se construye dinámicamente a partir de:
- Content Blocks
- Data Extensions con código
- AMPscript anidado
%%__SINGLE_RESOLVE%% no es obligatorio,
pero es una herramienta para simular desde ahora el comportamiento que será definitivo en marzo 2026.
Cuanto antes se validen los emails, menor será el riesgo de envíos con asuntos sin personalizar.
MarketiNet te ayuda a abordar el cambio en Marketing Cloud
Evita problemas en tus envíos desde ahora. Deja que nuestros especialistas auditen y optimicen tus asuntos en Marketing Cloud:




