Laura Geller — Promo Messages Verification Guide
Quick Check
Visit any LG collection page on the Marqo variant and inspect the #marqo-config meta tag:
document.getElementById('marqo-config').getAttribute('data-active-promos')
This shows the comma-separated handles of active promos for the visitor's current market.
Verify Market Scoping
AU/Default market (4 promos):
https://www.laurageller.com/collections/all-products-excl-dotd-bundles-clearance-copy?lmi_preview=7ddd0d2a-3235-4f97-bb1b-4eb16309ab25&targeting=eyJjb3VudHJ5T3ZlcnJpZGUiOiIiLCJkZXZpY2VLaW5kIjoiZCIsImV4cGVyaWVuY2VJZCI6IjdkZGQwZDJhLTMyMzUtNGY5Ny1iYjFiLTRlYjE2MzA5YWIyNSJ9&vsly_vid=612fbf27-828b-4321-b2f2-559307f71504
To switch to GB market: Open browser console and run:
const fd = new FormData();
fd.append('country_code', 'GB');
fd.append('_method', 'PUT');
fetch('/localization', { method: 'POST', body: fd }).then(() => location.reload());
Then revisit the collection page — data-active-promos should show 3 handles (not 4).
To switch back: Same as above but with country_code: 'AU'.
Console Verification Script
Paste this in the browser console on any Marqo collection page to get a full diagnostic:
(() => {
const meta = document.getElementById('marqo-config');
const activePromos = meta?.getAttribute('data-active-promos') || '';
const cfg = window.MarqoUIConfig || {};
const rules = window.__marqoPromoMetaobjectRules;
console.table({
'Country': cfg.country,
'Promo Source': cfg.uiComponents?.promo_messages?.value?.promoSource || 'manual',
'Active Promo Handles': activePromos ? activePromos.split(',').filter(Boolean).length : 0,
'Fetched Rules': Array.isArray(rules) ? rules.length : 'not loaded',
'Rendered Promos': document.querySelectorAll('.marqo-promo-message').length,
});
if (Array.isArray(rules)) {
console.log('Rules:', rules.map(r => ({
handle: r.handle,
text: r.text || '(UTM-gated)',
collection: r.collection,
})));
}
console.log('Active Handles:', activePromos.split(',').filter(Boolean));
console.log('Promo Texts:', [...new Set(
[...document.querySelectorAll('.marqo-promo-message')].map(el => el.textContent?.trim())
)]);
})();
Expected Results
| Market | Active Promos | Non-UTM Text |
|---|---|---|
| AU (default) | 4 | "40% OFF AT CHECKOUT| + EXTRA 10% WITH CODE: CL10" |
| GB | 3 | "40% OFF AT CHECKOUT" |
| US | Inherits default (4) | Same as AU |
UTM Override Test
Append &utm_campaign=VtvvyX to any collection URL — all product cards should show
"Extra 22% Off Applied at Checkout | Code: LG-Z7A994" instead of the default promo text.
Other UTM campaigns to test:
| UTM Parameter | Expected Text |
|---|---|
utm_campaign=VtvvyX | Extra 22% Off Applied at Checkout | Code: LG-Z7A994 |
utm_campaign=UVBqqX | Extra 22% Off Applied at Checkout | Code: LG-Z7F997 |
utm_campaign=Rose40-EM | CODE: ROSE40 (lipstick collection only) |
How It Works
- LG's theme has a "Global Active Promotions" setting (per-market metaobject list)
- Our Liquid template reads the setting and renders the selected handles into the page
- The widget fetches ALL active promo metaobjects via Storefront API
- The widget filters to only show ones in the market's whitelist
resolvePromoMessagematches rules to products by collection, respecting priority and UTM restrictions- Drafts are automatically excluded (Shopify Storefront API only returns ACTIVE metaobjects)
Configuring Markets (for LG team)
Per-market promo selections are managed in:
Shopify Admin → Online Store → Customize → (market dropdown at top) → Theme settings → Global Active Promotions
Changes take effect on next page load — no deploy needed.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| No promos showing | promoSource not set to "shopify" | Check MarqoUIConfig.uiComponents.promo_messages.value.promoSource |
data-active-promos empty | Theme setting not configured for this market | LG team needs to select promos in theme editor |
| Promos show on some products but not others | Product not in the targeted collection | Check product's productCollections array vs rule's collection handle |
| UTM promo not showing | UTM parameter doesn't match any rule | Check URL params against rule's utm_overrides values |
| Wrong promo showing | Higher-priority rule winning | Check rule priorities — higher number wins |