GTM — Test A/B Sold Out PDP
Script que implementa un test A/B sobre el botón "Add to Cart" en la PDP para un conjunto fijo de SKUs. Lee una cookie (Test_AB) para determinar en qué segmento está el usuario y modifica el estado del botón en consecuencia.
Toda la configuración está hardcodeada en el script — no usa variables de plantilla GTM ni emite ningún evento al dataLayer. La asignación de segmentos la gestiona el sistema externo que escribe la cookie.
Configuración hardcodeada
| Variable | Valor | Descripción |
|---|---|---|
gtmTestABCookieName | "Test_AB" | Nombre de la cookie que determina el segmento. |
gtmTestABSegmentName | "segment_A" | Valor de la cookie que activa la experiencia "Sold Out". |
gtmTestABCtaButtonSoldOut | "SOLD OUT" | Texto del botón para el segmento A. |
gtmTestABCtaButtonAddToCart | "ADD TO CART" | Texto del botón para el segmento B (restauración). |
gtmTestABSkus | Lista de ~110 SKUs | Productos incluidos en el test. Ver sección siguiente. |
SKUs en el test
El script solo actúa sobre los productos cuyo data-pid esté incluido en la lista. En total son 110 SKUs hardcodeados:
110072, 130020, 140013, 140039, 400019, 400031, 400044, 400045, 400047,
A1801, BELTR04, F18TR02, H02LHM5001, H03LHM0630, HALL22DEMP, HALL22KVM0,
HALL22SLM0, HAUR22BBTP, HAUR22BKTP, HBEL22BBTP, HBEL22CKTP, HCLI22CEMP,
HCLI22DBMP, HCLR22CETP, HCLR22DBTP, HCRA24BBTP, HCRA24BFTP, HCRO22WWXP,
HDEA22BBTP, HDEA22CETP, HDEA22EETP, HDEA22TLTG, HDIV23BBXP, HDIV23BWXP,
HDUS23LSTP, HDUS23WETG, HEDG23BBTP, HETE20HLX0, HFRA22BFTP, HFRA22BLT0,
HFRA22NLT0, HFRA22NPT0, HFRA22NRT0, HHAW22KKMP, HHAW22SLMP, HLAS23BBXP,
HLAS23BEX0, HLAX20BDMP, HLAX22BBMP, HLAX22DBMP, HLAX22DLMP, HMAR22BBXP,
HMAR22KWX0, HNCL22BWTP, HNCL22CETP, HOCA22NETP, HOCR21BLM0, HOCR21BMM0,
HOLF22TLTC, HOLM23CLTP, HOLR21BBT0, HOLR22BPTP, HOLS20HLT0, HOLS20KIT0,
HOLS22TFTP, HONE21EBGH, HONE21XRTP, HONE21XYTP, HONE22CBTP, HONR21BFTP,
HONR21NFTP, HONR21TFTP, HONR21TKTP, HONR21TLTP, HONR21TPTP, HONR22GBT0,
HONR22TPT0, HONR22WBTP, HONR22WOTP, HOUP21BBXP, HOUP21EBX0, HRAV23GKT0,
HRAV23VVT0, HRFL22DWMP, HRFL22SKM0, HSAL23BBTP, HSAL23EMX0, HSAL23WWT0,
HSAU22DWMG, HSDR22DGMP, HSDR22DPMP, HSHA22BBMP, HSOR22BBM0, HSOR22DLM0,
HSOR22SLM0, HSTA22CWXG, HTRA23BBTP, HTWI23BBXP, HTWI23CWX0, HTWI23CYX0,
HWCR22BBMP, HWCR22OBMP, HWFA22LGTC, HWRA22BKT0, HWRA22BLT0, HWRA22BSTP,
HWUP21CBX0, HWVM20SLM0, NDB300005, NDR200101, NDR200119, ROCTR01, W18X02
Si el producto actual no está en esta lista, el script no hace nada.
Lógica de segmentación
| Condición | Acción |
|---|---|
SKU en lista + cookie = segment_A + botón no deshabilitado | Deshabilita el botón, pointerEvents: none, texto → "SOLD OUT" |
SKU en lista + cookie ≠ segment_A + botón ya deshabilitado | Habilita el botón, pointerEvents: auto, texto → "ADD TO CART" |
SKU en lista + cookie = segment_A + botón ya deshabilitado | Sin acción (idempotente) |
SKU en lista + cookie ≠ segment_A + botón no deshabilitado | Sin acción |
| SKU no en lista | Sin acción |
| Botón no presente en el DOM | Sin acción |
La rama del segmento B incluye la condición if (gtmTestABAddToCartButtonIsDisabled). Esto protege contra habilitar incorrectamente botones que SFCC haya deshabilitado por razones propias (stock real agotado). Solo re-habilita botones que el segmento A hubiera deshabilitado previamente.
Selectores DOM
| Selector | Descripción |
|---|---|
.js-button-add-to-cart | Botón de añadir al carrito. El script lee su atributo data-pid y su estado disabled. |
.js-button-add-to-cart__text | Span interior del botón — su textContent se reemplaza con el CTA correspondiente. |
Flujo de ejecución
fnGtmInitTestAB() ← llamada directa al cargar el tag
│
├─ fnGtmTestABToGetCookieValue()
│ └─ Lee document.cookie, busca "Test_AB=..." → devuelve el valor o null
│
├─ Lee .js-button-add-to-cart
│ ├─ Obtiene data-pid → sku actual
│ ├─ Obtiene .js-button-add-to-cart__text → referencia al texto
│ └─ Obtiene .disabled → estado actual del botón
│
└─ fnGtmTestABToProductIsInTest(sku)
├─ false → no hace nada
└─ true:
├─ cookie = "segment_A":
│ └─ Si botón no deshabilitado:
│ ├─ setAttribute("disabled", true)
│ ├─ style.pointerEvents = "none"
│ └─ textContent = "SOLD OUT"
└─ cookie ≠ "segment_A":
└─ Si botón ya deshabilitado:
├─ removeAttribute("disabled")
├─ style.pointerEvents = "auto"
└─ textContent = "ADD TO CART"