First appearing around 2003 as a means of reducing site load times in the face of consumers who have grown to expect fast and uninterrupted experiences online, Single page applications have become so popular that many site owners are now either building their client-side or moving current applications to the framework.
The current state of personalization with SPAs
Most A/B testing software and personalization platforms today vary in their support of single page applications, with some going the route of APIs or tag managers, others providing SDKs per each individual framework, and a few who are simply incapable of implementing SPA-based personalization.
At Dynamic Yield, we believe marketers should be empowered to create and deliver experiences, with agility and speed. And for us, that meant providing a seamless integration with any SPA framework in the market, such as React, Vue.js, Angular, Backbone, among others. One that does not interfere with the development process and codebase, or require adjusting the implementation as new versions of the framework are released.
Dynamic Yield for SPAs
We developed a flexible solution that allows brands to tailor the website using Dynamic Yield’s full suite of personalization capabilities while prioritizing performance.
Now, let me tell you a little more about what is included in the implementation.
Automatic tracking of UI changes
Given SPAs load virtual page views as visitors engage with different areas of the site, Dynamic Yield continually monitors whether there have been any changes in context, such as a transition to a new URL or when a product ‘Quick View’ overlay pops up on a listing page. In these cases, Dynamic Yield will auto-fire an SPA event, after which we will re-evaluate the current context, enabling marketers to seamlessly target the appropriate audience for that specific view.
That means you can rest easy knowing changes will be applied or reapplied at the right moment on your SPA site, without developer intervention or the risk of firing an event in the wrong place.
Know exactly when SPA interactions, like a product ‘Quick View,’ are happening
Real-time page-type detection
When personalizing on an SPA site, which does not rely on full page loads to update the content a visitor sees, it’s absolutely critical to understand when a user clicks from one page to another in order to trigger the intended experience. For example, if a user navigated from a product page to the cart, where the marketer intended to showcase free shipping threshold messaging, this typically requires coding a manual event to fire and render the experience – as it would for any other page transition.
Dynamic Yield’s codeless context implementation offers marketers an easy way to set the definitions for each page type and its attributes right from within the admin console, allowing them to be exact in their detection and activation. This also guarantees that audiences, views, and impressions are collected and calculated in an automated fashion.
Auto-detect page transitions, such as from PDP to cart for accurate personalization
Seamless elements optimization
Historically, optimizing experiences with SPA frameworks meant pre-selecting and defining each element from a web page in the back end to be able to implement any changes in real time. Interfering with the source code in this way is not only time-consuming but also increases the likelihood of breaking the actual code.
With Dynamic Yield’s Shadow DOM, we mimic your environment and the actual structure, content, screens, elements, and even page stylings so you can safely personalize hero banners, product recommendations, page layouts, and more, without development. And because she Shadow DOM is “invisible” to your SPA, this minimizes the number of element lookups, reducing flicker and boosting performance.
Our Shadow DOM provides a safe environment for personalization
How it works (where are our developers at?)
Dynamic Yield applies changes to elements on a traditional, static site when a page is activated. However, with single page applications, new elements are updated or added to alter the site experience as a visitor explores.
In order to accomplish this, we introduced three new technologies to the Dynamic Yield platform (marketers may want to have a developer close by to translate):
- MutationObserver
- State Machine
- Shadow DOM
First, we use a Web API called a MutationObserver to monitor when page elements load, even when the page doesn’t fully reload itself. The MutationObserver provides hooks into DOM mutations, enabling Dynamic Yield to keep track of when a DOM node is inserted, destroyed, or modified so that we can apply (or reapply) changes at the right moment. In other words, we use MutationObserver to “see” when something has changed on your site.
Once an experiment or campaign activates and a visitor is bucketed into the experiment, the MutationObserver checks the DOM for as long as the page is active and applies (and reapplies) changes as appropriate. Once the page deactivates, Dynamic yield no longer attempts to change the elements on that page.
Furthermore, our script has a new state machine, with all of our elements existing as stateful smart objects. This allows us to keep track of what should be shown and when, while listening to your application via the MutationObserver.
And finally, we’ve added Dynamic Yield elements via the Shadow DOM, creating a safe environment for us to make changes in a way that doesn’t interfere with your application’s lifecycle.
Read our Knowledge Base article for more technical details on how Dynamic Yield works with SPAs as well as our solution’s high-level architecture.
The future is dynamic
One thing is clear, and that’s the fact that more and more websites, many of which used to be based on classic server-side-rendering, are now built or re-built as Single Page Applications (SPAs) using React and similar frameworks.
Dynamic Yield for SPAs guarantees that brands can experiment based on real-time changes, regardless of infrastructure, page, or use case. And we will continue to evolve as new techniques, frameworks, and approaches become available, prioritizing the needs of those who are experimenting with new and innovative technologies to put the customer experience first.
<!DOCTYPE html> <!--[if IE 6]><html id="ie6" lang="en-US"> <![endif]--> <!--[if IE 7]><html id="ie7" lang="en-US"> <![endif]--> <!--[if IE 8]><html id="ie8" lang="en-US"> <![endif]--> <!--[if !(IE 6) | !(IE 7) | !(IE 8) ]><!--><html lang="en-US"> <!--<![endif]--><head><meta name="msvalidate.01" content="1033997EC383621B874EB0392F261984"/><link rel="preconnect" href="//cdn.dynamicyield.com"><link rel="preconnect" href="//st.dynamicyield.com"><link rel="preconnect" href="//rcom.dynamicyield.com"><link rel="dns-prefetch" href="//cdn.dynamicyield.com"><link rel="dns-prefetch" href="//st.dynamicyield.com"><link rel="dns-prefetch" href="//rcom.dynamicyield.com"> <script data-cfasync="false">window.dataLayer = window.dataLayer || [];
window.gtag = function() { dataLayer.push(arguments); }
window.gtag('consent', 'default', {
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
analytics_storage: 'denied',
functionality_storage: 'denied',
personalization_storage: 'denied',
security_storage: 'granted', // Only this is granted by default
});</script> <script data-cfasync="false">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-MCQHF8');</script> <script data-cfasync="false" async>// Init the adobeDataLayer array
var adobeDataLayer = adobeDataLayer || [];
// Only when the API is ready
function adobeWaitForDY() {
if (typeof(window.DY) !== 'undefined' && typeof(window.DY.AdDetection) !== 'undefined' &&
typeof($dy) !== 'undefined' && typeof($dy(window)) !== 'undefined' && typeof($dy.renderSmartTagSlider) !== 'undefined') {
var zi_data = localStorage.getItem('ZoomInfoData'),
ada_page_info = {
"pageName": "Dynamic Yield for SPAs – Seamless Personalization with Any Framework",
"siteName": "Mastercard Dynamic Yield",
"pageTitle": "en_US :dynamic-yield-for-spas",
"pageURL": "https://www.dynamicyield.com/blog/dynamic-yield-for-spas/",
"country": "US",
"language": "en",
"dyID": DY.dyid,
"userStatus": "Guest"
};
// Detect the hierarchy and
// site sections based on the URL slugs
var current_pathname = window.location.pathname.replace(/^\/|\/$/g, '');
if(current_pathname) {
var current_sitesections = current_pathname.split('/'),
current_hierarchy = current_sitesections.map(function(segment) {
return segment.split(/[-_]/).map(function(word) {
return word.charAt(0).toUpperCase() + word.slice(1);
})
.join(' ');
});
// Site section 1
if(current_sitesections[0]) {
ada_page_info.siteSection1 = current_sitesections[0];
}
// Site section 2
if(current_sitesections[1]) {
ada_page_info.siteSection2 = current_sitesections[1];
}
// Hierarchy
ada_page_info.hierarchy = current_hierarchy.join('|');
}
// Push the ZI params as well
if(zi_data) {
zi_data = JSON.parse(zi_data);
if(zi_data.name) {
ada_page_info.ziCompany = zi_data.name;
}
if(zi_data.domain) {
ada_page_info.ziDomain = zi_data.domain;
}
if(zi_data.employeesrange) {
ada_page_info.ziEmployees = zi_data.employeesrange;
}
if(zi_data.industry) {
ada_page_info.ziIndustry = zi_data.industry;
}
}
// Decode HTML prior to dispatching the event
Object.keys(ada_page_info).forEach(function(key) {
ada_page_info[key] = $('<textarea/>').html(ada_page_info[key]).text();
});
adobeDataLayer.push({
"event": "pageLoad",
"pageInfo": ada_page_info
});
} else {
setTimeout(adobeWaitForDY, 150);
}
}
adobeWaitForDY();</script> <script type="text/javascript">function OptanonWrapper() {
console.log('OneTrust Loaded');
DY_API_update_consent_mode();
OneTrust.OnConsentChanged(DY_API_update_consent_mode);
}
function DY_API_update_consent_mode() {
var groups = OnetrustActiveGroups.split(',');
DY.userActiveConsent = {accepted: groups.includes('C0004')};
DYO.ActiveConsent.updateConsentAcceptedStatus(groups.includes('C0004'));
if(groups.includes('C0004')) {
console.log('OneTrust_Consent_Is_Granted');
DY.API('event',{ name: 'OneTrust_Consent_Is_Granted', properties: {}});
}
console.log('OneTrust - DY API is ' + (groups.includes('C0004') ? 'Enabled' : 'Disabled'));
}
window.addEventListener('OTConsentApplied', function() {
var groups = OnetrustActiveGroups.split(',');
if(groups.includes('C0004')) {
console.log('OneTrust_Initial_Consent_Granted');
DY.API('event',{ name: 'OneTrust_Initial_Consent_Granted', properties: {}});
}
});</script> <script type="text/javascript">/*WebFontConfig = {
google: { families: [ 'Shadows+Into+Light::latin', 'Handlee::latin', 'Roboto:400,100,300,500:latin' ] }
};
(function() {
var wf = document.createElement('script');
wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
'://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
wf.type = 'text/javascript';
wf.async = 'true';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wf, s);
})(); */
console.log(
'%cLet’s personalize experiences together.\n%cDynamic Yield is hiring smart engineers like you to help solve hard problems.\n%cSee our jobs page: https://www.dynamicyield.com/careers',
'font-size:2.2em;line-height:1.4em;margin-top:20px;color:rgb(93, 56, 185);',
'font-size:1.1em;line-height:1.6em;color:rgb(0, 0, 0);',
'font-size:1.1em;line-height:1.6em;margin-bottom:20px;color:rgb(0, 0, 0);'
);
function waitForElementToDisplay(selector, time, functionName) {
if (document.getElementById(selector) != null) {
functionName();
return;
} else {
setTimeout(function () {
waitForElementToDisplay(selector, time, functionName);
}, time);
}
}
function dcWaitForJQuery(time, functionName) {
if (window.jQuery || window.n2) {
functionName();
return;
} else {
setTimeout(function () {
dcWaitForJQuery(time, functionName);
}, time);
}
}</script> <meta name="msvalidate.01" content="451B75B70520F4C76D67F116C9EFFE5C"/><meta property="twitter:account_id" content="4503599629852947"/><meta name="p:domain_verify" content="f8112f57c09778e892850075a87dc1cf"/><meta name="google-site-verification" content="9FbmfdC4cM7JG8sgYh6w9HhFlxvEHewltexeUVzuSfE"/><meta charset="UTF-8"/><link rel="pingback" href="https://www.dynamicyield.com/xmlrpc.php"/> <!--[if lt IE 9]> <script src="https://www.dynamicyield.com/wp-content/themes/Divi/js/html5.js" type="text/javascript"></script> <![endif]--> <script type="text/javascript">document.documentElement.className = 'js';</script> <script type="text/javascript">var getLangCode = 'en';</script> <link rel="prefetch" href="/wp-content/themes/Divi/css/custom-style.css" as="style" crossorigin="anonymous"><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /><link rel="alternate" hreflang="en" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/" /><link rel="alternate" hreflang="x-default" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/" /> <script data-cfasync="false" data-pagespeed-no-defer>var gtm4wp_datalayer_name = "dataLayer";
var dataLayer = dataLayer || [];</script> <title>Dynamic Yield for SPAs – Seamless Personalization with Any Framework</title><link rel="preload" as="font" href="https://www.dynamicyield.com/wp-content/themes/Divi/fonts/CircularXXTT/CircularXXWeb-Bold.woff2" crossorigin/><link rel="preload" as="font" href="https://www.dynamicyield.com/wp-content/themes/Divi/fonts/CircularXXTT/CircularXXWeb-Medium.woff2" crossorigin/><link rel="preload" as="font" href="https://www.dynamicyield.com/wp-content/themes/Divi/fonts/CircularXXTT/CircularXXWeb-Book.woff2" crossorigin/><meta name="description" content="With Dynamic Yield for SPAs, personalize with a seamless solution for agile and performance-driven experience delivery." /><link rel="canonical" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/" /><meta property="og:locale" content="en_US" /><meta property="og:type" content="article" /><meta property="og:title" content="Dynamic Yield for SPAs – Seamless Personalization with Any Framework" /><meta property="og:description" content="With Dynamic Yield for SPAs, personalize with a seamless solution for agile and performance-driven experience delivery." /><meta property="og:url" content="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/" /><meta property="og:site_name" content="Mastercard Dynamic Yield" /><meta property="article:publisher" content="https://www.facebook.com/DynamicYield" /><meta property="article:published_time" content="2021-07-27T13:00:36+00:00" /><meta property="article:modified_time" content="2023-07-20T22:18:45+00:00" /><meta property="og:image" content="https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-1200x628-1-1.png" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="628" /><meta property="og:image:type" content="image/png" /><meta name="author" content="Gidi Vigo" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:image" content="https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-1200x628-1-1.png" /><meta name="twitter:creator" content="@DynamicYield" /><meta name="twitter:site" content="@DynamicYield" /><meta name="twitter:label1" content="Written by" /><meta name="twitter:data1" content="Gidi Vigo" /><meta name="twitter:label2" content="Est. reading time" /><meta name="twitter:data2" content="5 minutes" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"Article","@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#article","isPartOf":{"@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/"},"author":[{"@id":"https://www.dynamicyield.com/#/schema/person/9514fbd7a0486cce18bdc54058c44f14"}],"headline":"Dynamic Yield for SPAs – Seamless Personalization with Any Framework","datePublished":"2021-07-27T13:00:36+00:00","dateModified":"2023-07-20T22:18:45+00:00","mainEntityOfPage":{"@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/"},"wordCount":1052,"commentCount":0,"publisher":{"@id":"https://www.dynamicyield.com/#organization"},"image":{"@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#primaryimage"},"thumbnailUrl":"https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-795x320-1-1.png","keywords":["Personalization Infrastructure","Single Page Applications"],"articleSection":["Product"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#respond"]}]},{"@type":"WebPage","@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/","url":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/","name":"Dynamic Yield for SPAs – Seamless Personalization with Any Framework","isPartOf":{"@id":"https://www.dynamicyield.com/#website"},"primaryImageOfPage":{"@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#primaryimage"},"image":{"@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#primaryimage"},"thumbnailUrl":"https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-795x320-1-1.png","datePublished":"2021-07-27T13:00:36+00:00","dateModified":"2023-07-20T22:18:45+00:00","description":"With Dynamic Yield for SPAs, personalize with a seamless solution for agile and performance-driven experience delivery.","breadcrumb":{"@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://www.dynamicyield.com/blog/dynamic-yield-for-spas/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#primaryimage","url":"https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-795x320-1-1.png","contentUrl":"https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-795x320-1-1.png","width":795,"height":320},{"@type":"BreadcrumbList","@id":"https://www.dynamicyield.com/blog/dynamic-yield-for-spas/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.dynamicyield.com/"},{"@type":"ListItem","position":2,"name":"Dynamic Yield for SPAs – Seamless Personalization with Any Framework"}]},{"@type":"WebSite","@id":"https://www.dynamicyield.com/#website","url":"https://www.dynamicyield.com/","name":"Mastercard Dynamic Yield","description":"","publisher":{"@id":"https://www.dynamicyield.com/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://www.dynamicyield.com/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://www.dynamicyield.com/#organization","name":"Mastercard Dynamic Yield","url":"https://www.dynamicyield.com/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.dynamicyield.com/#/schema/logo/image/","url":"https://www.dynamicyield.com/wp-content/uploads/2019/10/DY-Hero_Logo-Black@x2.png","contentUrl":"https://www.dynamicyield.com/wp-content/uploads/2019/10/DY-Hero_Logo-Black@x2.png","width":458,"height":458,"caption":"Mastercard Dynamic Yield"},"image":{"@id":"https://www.dynamicyield.com/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/DynamicYield","https://x.com/DynamicYield","https://www.instagram.com/dynamic.yield/","https://www.linkedin.com/company/dynamic-yield","http://www.pinterest.com/dynamicyield/","https://www.youtube.com/channel/UCPWEcR8lQRadVKYW8H4sndQ","https://en.wikipedia.org/wiki/Dynamic_Yield"]},{"@type":"Person","@id":"https://www.dynamicyield.com/#/schema/person/9514fbd7a0486cce18bdc54058c44f14","name":"Gidi Vigo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://www.dynamicyield.com/#/schema/person/image/f0a4bfb1f2e41ca51bb8b995dbc3809d","url":"https://secure.gravatar.com/avatar/47394a0bc1040da7553e8072e4a3599b?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/47394a0bc1040da7553e8072e4a3599b?s=96&d=mm&r=g","caption":"Gidi Vigo"},"description":"Gidi is the VP of Product at Dynamic Yield, responsible for leading various product-led growth initiatives, including UX/UI, analytics, product documentation, data enrichment, email personalization, triggering capabilities, and cross-channel experiences.","sameAs":["https://www.dynamicyield.com/"],"url":"https://www.dynamicyield.com/blog/author/gidi/"}]}</script> <link rel='dns-prefetch' href='//pages.dynamicyield.com' /><link rel='dns-prefetch' href='//cdnjs.cloudflare.com' /><link rel="alternate" type="application/rss+xml" title="Mastercard Dynamic Yield » Feed" href="https://www.dynamicyield.com/feed/" /><link rel="alternate" type="application/rss+xml" title="Mastercard Dynamic Yield » Comments Feed" href="https://www.dynamicyield.com/comments/feed/" /><link rel="alternate" type="application/rss+xml" title="Mastercard Dynamic Yield » Dynamic Yield for SPAs – Seamless Personalization with Any Framework Comments Feed" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/feed/" /><meta content="Divi v." name="generator"/><link rel='stylesheet' id='sbi_styles-css' href='https://www.dynamicyield.com/wp-content/plugins/instagram-feed/css/sbi-styles.min.css?ver=6.2.6' type='text/css' media='all' /><style id='wp-emoji-styles-inline-css' type='text/css'>img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}</style><link rel='stylesheet' id='wp-block-library-css' href='https://www.dynamicyield.com/wp-includes/css/dist/block-library/style.min.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><style id='classic-theme-styles-inline-css' type='text/css'>/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}</style><style id='global-styles-inline-css' type='text/css'>body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}</style><link rel='stylesheet' id='rfw-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_7c036e0987ef80b703d7eb1abf922895.css?ver=2026020901' type='text/css' media='all' /><link rel='stylesheet' id='divi-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_ab3666a686d3dac03fd3032e5757637e.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><link rel='stylesheet' id='ctt-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_f1d1b2f761cf3768f427cdc5c4c2544b.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><link rel='stylesheet' id='inline-tweet-sharer-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_daa32ca85e114a0c6e5d1432c89237f3.css?ver=2.6.4' type='text/css' media='all' /><link rel='stylesheet' id='et_lb_modules-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_c0102af27938567cb82cc02e4da3a673.css?ver=2.4' type='text/css' media='all' /><link rel='stylesheet' id='et-shortcodes-css-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_40cb404848bc2e556105c8aea77f29aa.css?ver=3.0' type='text/css' media='all' /><link rel='stylesheet' id='et-shortcodes-responsive-css-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_3a30a77569bc4544b9465acbee8e5f97.css?ver=3.0' type='text/css' media='all' /><link rel='stylesheet' id='wp-featherlight-css' href='https://www.dynamicyield.com/wp-content/plugins/wp-featherlight/css/wp-featherlight.min.css?ver=1.3.4' type='text/css' media='all' /><link rel='stylesheet' id='baskerville-font-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_8c23179f030d02e0065d2054eab34279.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><link rel='stylesheet' id='markformc-font-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_0eb51906eca648ca4559d0a03b898d83.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><link rel='stylesheet' id='mackinac-font-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_9c8fec2609ebc9764a6e16471d9451ae.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><link rel='stylesheet' id='button-pulse-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_4cabc8dd29eaa9af7bf2df62f1c40af9.css?ver=935c7f8ce03960b02800bc8ae3231df8' type='text/css' media='all' /><link rel='stylesheet' id='fontawesome-css' href='https://www.dynamicyield.com/wp-content/themes/Divi/custom/font-awesome/css/font-awesome.min.css' type='text/css' media='all' /><link rel='stylesheet' id='bootstrap-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_d375e60add46d8de26a78728b517660f.css' type='text/css' media='all' /><link rel='stylesheet' id='slick-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_13b1b6672b8cfb0d9ae7f899f1c42875.css' type='text/css' media='all' /><link rel='stylesheet' id='slick-theme-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_f9faba678c4d6dcfdde69e5b11b37a2e.css' type='text/css' media='all' /><link rel='stylesheet' id='custom-theme-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_57f41281576414370c141cd00d2a80a9.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='custom-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_417039b6d54561fe1e8c94ee67cd902c.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='header-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_d75ad7543415df427913a5fe91606386.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='footer-style-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_25400e1cfd7099cc557083769c928231.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='video_tabs_module-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_f1109a8bc8c46ec9f2205cc8603c132f.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='select2-css' href='https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css' type='text/css' media='all' /><link rel='stylesheet' id='post-checklist-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_ede7f9aa4d78ac997ea5e48f5d511400.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='post-event-cards-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_d02c1d48c2c1fde18d405f087a0fe833.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='mkto-reset-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_d117c8ecde800f5dccd137c16bab71af.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='learning-center-general-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_73dd3b78cf6e21c28be39db6740774b1.css?ver=26.27' type='text/css' media='all' /><link rel='stylesheet' id='article-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_e1d850b2d8d6fd6331ad74bd35ddde51.css?ver=1772269298' type='text/css' media='all' /><link rel='stylesheet' id='customers-shortcode-css' href='https://www.dynamicyield.com/wp-content/cache/autoptimize/css/autoptimize_single_c6bf61e9c8beb560d64d119f58757b8b.css?ver=26.27' type='text/css' media='all' /> <script type="text/javascript" src="https://www.dynamicyield.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_dbdab0f35217f6041eb7e2028dc94ba4.js?ver=2.6.4" id="inline-tweet-sharer-js-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/themes/Divi/js/blazy.min.js" id="blazy-js"></script> <script type="text/javascript" src="//pages.dynamicyield.com/js/forms2/js/forms2.min.js?ver=21.85" id="mkto-form-script-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_db6be3b57dba139e789fec1a78186c8e.js?ver=21.85" id="learning-center-js-js"></script> <link rel="https://api.w.org/" href="https://www.dynamicyield.com/wp-json/" /><link rel="alternate" type="application/json" href="https://www.dynamicyield.com/wp-json/wp/v2/posts/161018" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.dynamicyield.com/xmlrpc.php?rsd" /><link rel='shortlink' href='https://www.dynamicyield.com/?p=161018' /><link rel="alternate" type="application/json+oembed" href="https://www.dynamicyield.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.dynamicyield.com%2Fblog%2Fdynamic-yield-for-spas%2F" /><link rel="alternate" type="text/xml+oembed" href="https://www.dynamicyield.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.dynamicyield.com%2Fblog%2Fdynamic-yield-for-spas%2F&format=xml" /><meta name="generator" content="WPML ver:4.6.8 stt:1,4,3,28,2;" /> <script type="text/javascript">(function(url){
if(/(?:Chrome\/26\.0\.1410\.63 Safari\/537\.31|WordfenceTestMonBot)/.test(navigator.userAgent)){ return; }
var addEvent = function(evt, handler) {
if (window.addEventListener) {
document.addEventListener(evt, handler, false);
} else if (window.attachEvent) {
document.attachEvent('on' + evt, handler);
}
};
var removeEvent = function(evt, handler) {
if (window.removeEventListener) {
document.removeEventListener(evt, handler, false);
} else if (window.detachEvent) {
document.detachEvent('on' + evt, handler);
}
};
var evts = 'contextmenu dblclick drag dragend dragenter dragleave dragover dragstart drop keydown keypress keyup mousedown mousemove mouseout mouseover mouseup mousewheel scroll'.split(' ');
var logHuman = function() {
if (window.wfLogHumanRan) { return; }
window.wfLogHumanRan = true;
var wfscr = document.createElement('script');
wfscr.type = 'text/javascript';
wfscr.async = true;
wfscr.src = url + '&r=' + Math.random();
(document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(wfscr);
for (var i = 0; i < evts.length; i++) {
removeEvent(evts[i], logHuman);
}
};
for (var i = 0; i < evts.length; i++) {
addEvent(evts[i], logHuman);
}
})('//www.dynamicyield.com/?wordfence_lh=1&hid=3738B3D7B6921C9A8018CF658010287F');</script>
<script data-cfasync="false" data-pagespeed-no-defer>var dataLayer_content = {"visitorLoginState":"logged-out","visitorType":"visitor-logged-out","pagePostType":"post","pagePostType2":"single-post","pageCategory":["product"],"pagePostAuthor":"Gidi Vigo","pagePostDate":"July 27, 2021","pagePostDateYear":"2021","pagePostDateMonth":"07","pagePostDateDay":"27","pagePostDateDayName":"Tuesday","pagePostDateHour":"09","pagePostDateMinute":"00","pagePostDateIso":"2021-07-27T09:00:36-04:00","pagePostDateUnix":1627376436};
dataLayer.push( dataLayer_content );</script> <script type="text/javascript">console.warn && console.warn("[GTM4WP] Google Tag Manager container code placement set to OFF !!!");
console.warn && console.warn("[GTM4WP] Data layer codes are active but GTM container must be loaded using custom coding !!!");</script> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=3.0, user-scalable=1" /><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96"><link rel="icon" type="image/png" href="/favicon-180x180.png" sizes="180x180"><link rel="icon" type="image/png" href="/favicon-192x192.png" sizes="192x192"><link rel="icon" type="image/png" href="/favicon-194x194.png" sizes="194x194"><link rel="shortcut icon" href="/favicon.ico"> <script type="text/javascript" data-noptimize>function dy_bind_adobe_mkto_events(form, form_id, form_name) {
// Init the adobeDataLayer object
window.adobeDataLayer = window.adobeDataLayer || [];
var focus_reported = false;
var form_completed = false;
var form_started_reported = false;
// Monitor input interactions - first focus (form start)
form.getFormElem().find('input, select').on('focus', function() {
// Only if it hasn't been reported yet
if(! focus_reported) {
focus_reported = true;
form_started_reported = true;
adobeDataLayer.push({
"event": "form_start",
"trackAction": {
"formName": form_name,
"formID": form_id,
"zoomInfo": localStorage.ZoomInfoData !== undefined,
}
});
}
});
// Detect dropoff if the form hasn't been completed
window.addEventListener("beforeunload", function(event) {
if (form_completed) return;
var filledLabels = [];
var count = 0;
form.getFormElem().find('input, select').each(function() {
var value = this.value && this.value.trim();
if (value) {
var label = form.getFormElem().find("label[for='" + this.id + "']").text().trim();
if (label) {
filledLabels.push(label);
count++;
}
}
});
if (count > 0) {
adobeDataLayer.push({
"event": "form_dropoff",
"formInfo": {
"formName": form_name,
"formID": form_id,
"zoomInfo": localStorage.ZoomInfoData !== undefined,
"completedFields": {
"labels": filledLabels.join("|"),
"count": count.toString()
}
}
});
}
});
// Hook into successful submission
form.onSuccess(function(values, followUpUrl) {
if(form_started_reported) {
// Report form completed
form_completed = true;
// Send an Adobe Analytics DataLayer event
adobeDataLayer.push({
"event": "form_complete",
"formInfo": {
"formName": form_name,
"formID": form_id,
"zoomInfo": localStorage.ZoomInfoData !== undefined,
"successAction": {
"action": "redirect",
"redirectUrl": followUpUrl
}
}
});
}
});
}
function dy_bind_adobe_cta_event(cta, cta_type, cta_section) {
var cta_name = cta.text().trim(),
cta_url,
page_url = window.location.href;
// const domainName = window.location.origin;
if (cta.attr('href') !== undefined) {
// cta_url = domainName + cta.attr('href');
cta_url = cta.attr('href');
} else {
cta_url = page_url;
}
adobeDataLayer.push({
"event": "ctaClick",
"clickInfo": {
"ctaName": cta_name,
"ctaType": cta_type,
"destinationURL": cta_url,
"ctaLocation": page_url,
"ctaSection": cta_section
}
});
}</script> <link rel="shortcut icon" href="https://www.dynamicyield.com/wp-content/uploads/2018/11/favicon-194x194.png" /><link rel="amphtml" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/amp/"></head><body class="post-template-default single single-post postid-161018 single-format-standard wp-featherlight-captions et_fixed_nav windows et_right_sidebar chrome et_includes_sidebar elementor-default default_header"><div id="page-container"><header id="main-header" class="et_nav_text_color_dark"
style="background: #fff;"><div class="container-fluid clearfix"><div class="dy-header-logo"> <a href="https://www.dynamicyield.com/"
class="main-logo-container"><div id="logo_symbol"><svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" version="1.1" viewBox="0 0 266.8 164.9"><g id="XMLID_23_"><path fill="#ff5f00" d="M97.3 17.5h72.2v129.7H97.3z"/><path id="XMLID_35_" fill="#eb001b" d="M101.9 82.4c0-26.3 12.3-49.7 31.5-64.8-14-11-31.7-17.6-51-17.6C36.9-.1 0 36.8 0 82.4c0 45.5 36.9 82.5 82.5 82.5 19.2 0 36.9-6.6 51-17.6-19.3-15.2-31.6-38.6-31.6-64.9z"/><path d="M266.8 82.4c0 45.5-36.9 82.5-82.5 82.5-19.2 0-36.9-6.6-51-17.6 19.2-15.1 31.5-38.5 31.5-64.8s-12.3-49.7-31.5-64.8c14-11 31.7-17.6 51-17.6 45.6-.2 82.5 36.7 82.5 82.3zM259 133.5v-2.7h1.1v-.5h-2.7v.5h1.1v2.7h.5zm5.3 0v-3.2h-.8l-1 2.2-1-2.2h-.8v3.2h.6v-2.4l.9 2.1h.6l.9-2.1v2.4h.6z" fill="#f79e1b"/></g></svg></div> </a></div><div id="et-top-navigation" class="cd-morph-dropdown"><nav id="top-menu-nav" class="main-nav"><ul id="top-menu" class="nav"></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li></li><li class="has-dropdown product menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children" data-content="product" title=""> <a href="">Product</a></li><li class="has-dropdown solutions menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children" data-content="solutions" title=""> <a href="">Solutions</a></li><li class="has-dropdown why_dy menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children" data-content="why-dynamic-yield" title="Why DY"> <a href="">Why Dynamic Yield</a></li><li class="has-dropdown company menu-has-cta menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children" data-content="company" title=""> <a href="">Company</a></li><li class="has-dropdown learning_center menu-has-cta top-link-use-cases menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children" data-content="learning-center" title=""> <a href="">Learning Center</a></li><li class="contact top-link walker-last mobile-only menu-item menu-item-type-post_type menu-item-object-page" data-content="connect-with-us" title=""> <a href="https://www.dynamicyield.com/contact/"><span class="button-arrow">Connect with us</span></a></li></ul></nav><div class="morph-dropdown-wrapper"><div class="dropdown-list"><div class="dropdown-tooltip"></div><ul><li id="product" class="dropdown links"><a href="" class="label">Product</a><div class="content"><ul><li class="intro"><div class="exp_os-wrapper"><h2>Experience OS</h2><ul class="links-list"><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.dynamicyield.com/experience-os/"><span class="menu-banner-img-wrap"><img class="menu-banner-img-desktop" src="/wp-content/uploads/2024/10/expos-nav-updated.png" width="218" height="131" /><img class="menu-banner-img-mobile" src="/wp-content/uploads/2024/10/expos-nav-updated-mobile.png" width="114" height="98" /></span><span class="menu-cta-text-wrap"><span class="menu-cta-subtitle">Get an overview of Dynamic Yield’s product and see why we’re known as the Experience OS.</span> <span class="menu-cta-button">Learn more →</span></span></a></li></ul></div></li><li class="left"><div class="key_caps-wrapper"><h2>Core Capabilities</h2><ul class="links-list"><li class="key-caps-segment menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/segmentation/"><svg version="1.1" id="audience" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"><path id="audience-green" fill="#4FB294" d="M9.291,30H30V9.291C18.562737,9.291,9.291,18.562737,9.291,30z"/><path id="audience-black" d="M12.527,15.947C9.240353,12.385597,4.806085,10.093244,0,9.471V30h7.639 C7.632218,24.897682,9.35532,19.943764,12.527,15.947z"/><circle id="audience-circle" fill="#4FB294" cx="15" cy="4.967" r="4.967"/></svg>Segmentation<span>Identify, build, and analyze audiences</span></a></li><li class="key-caps-omnichannel menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/targeting/"><svg version="1.1" id="personalization" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 20.987 30" style="enable-background:new 0 0 20.987 30;" xml:space="preserve"><path id="personalization-black-2" d="M20.987,19.507c0,5.795401-4.698099,10.4935-10.4935,10.4935S0,25.302401,0,19.507H20.987z"/><path id="personalization-pink" fill="#EE3968" d="M18.143,10.245c0,4.224978-3.425022,7.649999-7.65,7.649999S2.842999,14.469978,2.842999,10.245 H18.143z"/><circle id="personalization-black-1" cx="10.494" cy="4.307" r="4.307"/></svg>Targeting<span>Serve each customer with unique offers</span></a></li><li class="key-caps-recs menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/recommendations/"><svg version="1.1" id="recs" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 30 30" style="enable-background:new 0 0 30 30;" xml:space="preserve"><path id="recs_4" d="M15.953,30H30V15.953H15.953V30z"/> <path id="recs_3" d="M0,15.953V30h14.047V15.953H0z"/><path id="recs_2" fill="#FFA354" d="M30,14.047V0H15.953v14.047H30z"/><path id="recs_1" d="M14.047,0H0v14.047h14.047V0z"/></svg>Recommendations<span>Algorithmically predict customers’ interests</span></a></li><li class="key-caps-email menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/journey-orchestration/"><svg version="1.1" id="trigger" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 26.017 30" style="enable-background:new 0 0 26.017 30;" xml:space="preserve"><path id="trigger-black" d="M14.017,12h12l-12,18V12z"/><path id="trigger-purple" fill="#5D39B9" d="M12,18H0L12,0V18z"/></svg>Journey Orchestration<span>Reach customers at critical moments</span></a></li><li class="key-caps-abtesting menu-item menu-item-type-custom menu-item-object-custom"><a href="/optimization/"><svg version="1.1" id="testing" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 28.713001 30" style="enable-background:new 0 0 28.713001 30;" xml:space="preserve"><path id="testing-blue" fill="#6BDADA" d="M15.831,0c7.114532,0,12.882001,5.767468,12.882001,12.882S22.945532,25.764,15.831,25.764l0,0V0z"/><path id="testing-black" d="M12.882,30C5.767468,30,0,24.232533,0,17.118S5.767468,4.236,12.882,4.236V30z"/></svg>Optimization<span>Experiment on any digital property</span></a></li><li class="key-caps-search menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/search/"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> <g clip-path="url(#clip0_4082_5186)" id="cap-search-svg-bg"> <path d="M11.6757 9.81054C8.73958 9.81054 6.35089 7.42177 6.35089 4.48562C6.35089 2.62899 7.30664 0.992133 8.75134 0.0388074C8.50309 0.0155936 8.25193 0.00238037 7.99762 0.00238037C3.58066 0.00238037 0 3.58304 0 8C0 12.417 3.58066 15.9976 7.99762 15.9976C12.4146 15.9976 15.9952 12.417 15.9952 8C15.9952 7.86848 15.9916 7.73782 15.9853 7.60785C15.0166 8.94122 13.4462 9.81054 11.6757 9.81054Z" fill="black"/> <path id="cap-search-svg-circle" d="M11.6757 0.161346C11.2226 0.161346 10.7857 0.231773 10.3749 0.361649C8.62429 0.915114 7.35156 2.55436 7.35156 4.48561C7.35156 6.87003 9.29141 8.80988 11.6757 8.80988C13.5373 8.80988 15.1277 7.62753 15.7358 5.97437C15.9066 5.51 16 5.00851 16 4.48561C16 2.10119 14.0602 0.161346 11.6757 0.161346Z" fill="#FFC61E"/> </g> <defs> <clipPath id="clip0_4082_5186"> <rect width="16" height="16" fill="white"/> </clipPath> </defs> </svg>Search<span>Help customers find what they want</span></a></li></ul></div></li><li class="right"><div class="scale-wrapper"><h2>Made for Scale</h2><ul class="links-list"><li class="key_caps-element menu-item menu-item-type-custom menu-item-object-custom"><a href="/element/">Element<span>A groundbreaking new dimension of hyper-personalization</span></a></li><li class="key_caps-adaptml menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/ai/">AI & Automation<span>Increase automation, lower operational costs, and drive more revenue with a holistic AI personalization system</span></a></li><li class="key_caps-apis menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.dynamicyield.com/experience-apis/">Experience APIs<span>Give developers the tools they need to build the best customer experiences</span></a></li><li class="key_caps-enterprise menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.dynamicyield.com/enterprise-grade-personalization/">Enterprise solutions<span>Scale with security, privacy, and compliance, made for the enterprise</span></a></li></ul></div></li></ul><a href="/shopping-muse/" target="" class="banner"><div class="menu-banner"><span class="menu-cta-text"><strong>Meet Shopping Muse: </strong> Conversational commerce meets cutting-edge personalization.</span> <span class="menu-cta-button">Learn more →</span></div></a></div></li><li id="solutions" class="dropdown links"><a href="" class="label">Solutions</a><div class="content"><ul><li class="left"><div class="industries-wrapper"><h2>Industries</h2><ul class="links-list"><li class="industry-ecomm menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/ecommerce/">eCommerce</a></li><li class="industry-finserv menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/financial-services/">Financial Services</a></li><li class="industry-qsr menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/restaurants/">Restaurants</a></li><li class="industry-grocery menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/grocery/">Grocery</a></li><li class="industry-b2b menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/b2b-ecommerce/">B2B eCommerce</a></li><li class="industry-travel menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/travel/">Travel</a></li><li class="industry-gaming menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/gaming/">iGaming</a></li><li class="industry-media menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/media/">Media</a></li></ul></div></li><li class="right"><div class="channels-wrapper"><h2>Channels</h2><ul class="links-list"><li class="channels-web menu-item menu-item-type-custom menu-item-object-custom"><a href="/web/">Web<span>Create customer-centric web experiences</span></a></li><li class="channels-email menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/channels/email/">Email<span>Personalize emails with a no-code builder</span></a></li><li class="channels-mobile-apps menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/mobile/">Apps<span>Optimize mobile app experiences</span></a></li><li class="channels-ads menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/advertising/">Ads<span>Improve customer acquisition results</span></a></li></ul></div></li></ul></div></li><li id="why-dynamic-yield" class="dropdown links"><a href="" class="label">Why Dynamic Yield</a><div class="content"><ul><li class="impact-wrapper"><h2>Proven impact and success services</h2><ul class="links-list"><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/clients/">Select customers</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="/case-studies/">Case studies</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="/customer-success/">Customer success services</a></li></ul></li><li class="scale-wrapper"><h2>Built for scale</h2><ul class="links-list"><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/enterprise-grade-personalization/">Enterprise-grade solutions</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="/adaptml/">AI Technology</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/gdpr-and-privacy/">GDPR and data privacy</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/security/">Security</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/compliance/">Compliance</a></li></ul></li><li class="network-wrapper"><h2>Robust partner network</h2><ul class="links-list"><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/partners/">Partner library</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/partner-program/">Partnership program</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="/partners/#technology-partners">Tech Partners and Integrations</a></li></ul></li><li class="resources-wrapper"><h2>Extensive product resources</h2><ul class="links-list"><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://support.dynamicyield.com/hc/en-us">Knowledge Base</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="http://academy.dynamicyield.com/">Academy & Certification</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://support.dynamicyield.com/hc/en-us/community/topics">Community</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://dy.dev/">API documentation</a></li></ul></li></ul><a href="https://www.dynamicyield.com/personalization-awards/" target="_self" class="banner"><div class="menu-banner"><div class="menu-cta--left"> <img src="/wp-content/uploads/2023/11/2023-award-badge.svg" width="60" height="60" /></div><div class="menu-cta--right"> <strong class="menu-cta-title">The Personalization Awards</strong> <span class="menu-cta-subtitle">Celebrating customers and partners setting the gold-standard for personalization</span> <span class="menu-cta-button">Learn more →</span></div></div></a></div></li><li id="company" class="dropdown button"><a href="" class="label">Company</a><div class="content"><ul class="links-list"><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.mastercard.com/us/en/for-the-world/about-us.html">About us</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="/blog/">Blog</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/labs/">DY Labs</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/careers/">Careers</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://events.dynamicyield.com/">Events</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.mastercard.com/us/en/news-and-trends/stories.html">Press</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/awards-and-recognitions/">Awards</a></li><li class=" menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/contact/">Contact us</a></li><li class=" menu-item menu-item-type-custom menu-item-object-custom"><a href="/request-demo/">Request a demo</a></li></ul></div></li><li id="learning-center" class="dropdown links"><a href="" class="label">Learning Center</a><div class="content"><ul><li class="top"><ul class="links-list"><li class="resources-xp hidden-mobile menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/learn/">Take your knowledge to exponential levels</a></li><li class="hidden-desktop menu-item menu-item-type-custom menu-item-object-custom"><a href="/learn/">XP<sup>2</sup> Hub<span>Take your knowledge to exponential levels</span></a></li><li class="resources-paths menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/learning-paths/">Learning Paths<span>Curated courses on key skill areas</span></a></li><li class="resources-webinars menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/talks/">Talks<span>Engaging discussions taking place in CX</span></a></li><li class="resources-articles menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/articles/">Articles<span>An expansive collection of in-depth playbooks</span></a></li><li class="resources-glossary menu-item menu-item-type-custom menu-item-object-custom"><a href="/glossary-terms/">Encyclopedia<span>A glossary of experience optimization terms</span></a></li><li class="resources-use-cases menu-item menu-item-type-post_type menu-item-object-page"><a href="https://www.dynamicyield.com/personalization-examples/">Inspiration Library<span>Personalization examples from real brands</span></a></li><li class="resources-maturity menu-item menu-item-type-custom menu-item-object-custom"><a href="https://www.dynamicyield.com/personalization-maturity/"><strong class="badge-new">Personalization Maturity</strong><span>How global businesses prioritize personalization</span></a></li><li class="resources-guides menu-item menu-item-type-custom menu-item-object-custom"><a href="/guides/">Guides & reports<span>Comprehensive topic-specific materials</span></a></li><li class="resources-benchmarks menu-item menu-item-type-custom menu-item-object-custom"><a href="https://marketing.dynamicyield.com/benchmarks/">Benchmarks<span>Industry performance metrics and insights</span></a></li></ul></li><li class="bottom"><a href="/rooted-personalization/" target="_self"><div class="menu-banner"><div class="menu-cta--left"> <img src="/wp-content/uploads/2023/03/rooted-icon.svg" width="60" height="60" /></div><div class="menu-cta--right"> <strong class="menu-cta-title">Rooted Personalization<span>new</span></strong> <span class="menu-cta-subtitle">Learn a scalable methodology for building an audience-based personalization program.</span> <span class="menu-cta-button">Find out more →</span></div></div></a></li></ul></div></li><li class="contact top-link walker-last mobile-only menu-item menu-item-type-post_type menu-item-object-page" data-content="connect-with-us" title=""> <a href="https://www.dynamicyield.com/contact/"><span class="button-arrow">Connect with us</span></a></li></ul><div class="bg-layer" aria-hidden="true"></div></div></div></li></ul></nav></div><div class="topnav-buttons"><div class="language-switcher header-language-switcher"><ul><li>en<ul><li><a class="active" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/">English</a></li><li><a href="https://www.dynamicyield.com/es/">Español</a></li><li><a href="https://www.dynamicyield.com/de/">Deutsch</a></li><li><a href="https://www.dynamicyield.com/fr/">Français</a></li><li><a href="https://www.dynamicyield.com/ja/">日本語</a></li></ul></li></li></ul></div> <a class="pulse-button v5 pulsed nav_btn" href="/request-demo/"> <span class="button-inner"> Talk to sales </span> </a> <a href="" class="nav-trigger"> Open Nav <span class="nav-trigger-box"><span class="nav-trigger-inner"></span></span> </a></div></div></header><div id="top-nav-backdrop"></div><div id="et-main-area"><div id="main-content"><div class="lc-container"><div id="content-area" class="clearfix"><header class="article-sticky-header"><div class="lc-header-container lc-flex"><div class="lc-header-logo"></div><div class="lc-header-title"> Dynamic Yield for SPAs – Seamless Personalization with Any Framework</div><div class="lc-header-right lc-flex"><ul class="lc-header-social lc-flex"><li class="et-social-icon"> <a href="#" title="Share on Facebook" class="icon" onclick="window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(document.URL) + '&t=' + encodeURIComponent(document.URL)); return false;"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 460.1990662 458.5138245"><path d="M460.1990662,230.0995331C460.1990662,103.0190277,357.1800232,0,230.0995331,0S0,103.0190277,0,230.0995331C0,338.011261,74.2903519,428.5578003,174.5126801,453.4230957V300.4146423H127.064209v-70.3151093h47.4484711v-30.2983704c0-78.3184433,35.4433594-114.619339,112.3326569-114.619339c14.5774536,0,39.730896,2.8583221,50.020874,5.7166443v63.7409363c-5.4308167-0.5716553-14.8633118-0.8574677-26.58255-0.8574677c-37.7300415,0-52.3075867,14.2916718-52.3075867,51.4501038v24.8674927h75.158783l-12.9122009,70.3151093h-62.246582v158.0991821C371.9082336,444.7527161,460.1990662,347.742981,460.1990662,230.0995331z"/></svg> </a></li><li class="et-social-icon"> <a href="#" title="Share on Linkedin" class="icon" onclick="window.open( 'https://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(document.location.href)); return false;"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"/></svg> </a></li><li class="et-social-icon"> <a href="#" title="Tweet" class="icon" onclick="window.open('https://twitter.com/intent/tweet?text=' + encodeURIComponent(document.title) + ':%20' + encodeURIComponent(document.URL)); return false;"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/></svg> </a></li></ul><div class="topnav-buttons"> <a href="#" data-toggle="modal" data-target="#lc-subscription" class="btn-desktop-only pulse-button v5 topnav-btn"> <span class="button-inner"> XP² Newsletter </span> </a> <a href="/newsletter/" class="pulse-button v5 topnav-btn btn-mobile-only"> <span class="button-inner"> XP² Newsletter </span> </a></div></div></div><div class="lc-progress-wrap"><div class="lc-scroll-progress"></div></div></header><article id="post-161018" class="et_pb_post post-161018 post type-post status-publish format-standard has-post-thumbnail hentry category-product tag-personalization-infrastructure tag-single-page-applications"><div class="article-content"><div class="article-breadcrumbs"> <a href="https://www.dynamicyield.com/blog/" title="Blog">Blog</a><ul class="post-categories"><li><a href="https://www.dynamicyield.com/blog/category/product/" rel="category tag">Product</a></li></ul></div><h1 class="article-title">Dynamic Yield for SPAs – Seamless Personalization with Any Framework</h1><h2 class="article-excerpt">Most personalization technologies vary in their SPA support, but Dynamic Yield's seamless solution allows for agile and performance-driven experience delivery.</h2><div class="article-authors lc-flex"><div class="article-author-box lc-col lc-flex"><div class="article-author-image lc-col"><div class="entry_author_image"><img src="https://www.dynamicyield.com/wp-content/authors/gidi-122.jpeg" alt="Gidi Vigo" width="76" height="76" /></div></div><div class="article-author-title lc-col"><div class="article-author-name"> <a href="https://www.dynamicyield.com/blog/author/gidi/" title="Posts by Gidi Vigo" rel="author">Gidi Vigo</a></div><div class="article-author-title-text"> VP of Product, Dynamic Yield</div></div></div></div><div class="entry-content article-entry-content"><p>First appearing around 2003 as a means of reducing site load times in the face of consumers who have grown to expect fast and uninterrupted experiences online, <a href="https://www.dynamicyield.com/article/ab-testing-with-single-page-applications/">Single page applications</a> have become so popular that many site owners are now either building their <a href="https://www.dynamicyield.com/lesson/client-side-testing-and-personalization/">client-side</a> or moving current applications to the framework. </p><h2>The current state of personalization with SPAs</h2><p>Most <a href="https://www.dynamicyield.com/ab-testing/">A/B testing software</a> and <a href="https://www.dynamicyield.com/personalization/">personalization platforms</a> today vary in their support of single page applications, with some going the route of APIs or tag managers, others providing SDKs per each individual framework, and a few who are simply incapable of implementing SPA-based personalization. </p><p>At Dynamic Yield, we believe marketers should be empowered to create and deliver experiences, with agility and speed. And for us, that meant providing a seamless integration with any SPA framework in the market, such as React, Vue.js, Angular, Backbone, among others. One that does not interfere with the development process and codebase, or require adjusting the implementation as new versions of the framework are released.</p><h2>Dynamic Yield for SPAs</h2><p>We developed a flexible solution that allows brands to tailor the website using Dynamic Yield’s full suite of personalization capabilities while prioritizing performance. </p><p>Now, let me tell you a little more about what is included in the implementation. </p><h3>Automatic tracking of UI changes</h3><p>Given SPAs load virtual page views as visitors engage with different areas of the site, Dynamic Yield continually monitors whether there have been any changes in context, such as a transition to a new URL or when a product ‘Quick View’ overlay pops up on a <a href="https://www.dynamicyield.com/glossary/product-listing-pages-plps/">listing page</a>. In these cases, Dynamic Yield will auto-fire an SPA event, after which we will re-evaluate the current context, enabling marketers to seamlessly target the appropriate audience for that specific view. </p><p>That means you can rest easy knowing changes will be applied or reapplied at the right moment on your SPA site, without developer intervention or the risk of firing an event in the wrong place. </p></p><p><center></p><div style="font-size: 12px; margin-top: -42px; line-height: 1.3em; margin-bottom: -20px; max-width: 500px;"><em>Know exactly when SPA interactions, like a product ‘Quick View,’ are happening</em></center><br /> <img fetchpriority="high" decoding="async" src="https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-Blog-Inline-1.png" alt="" width="1330" height="586" class="aligncenter size-full wp-image-161687" /></p><h3>Real-time page-type detection</h3><p>When personalizing on an SPA site, which does not rely on full page loads to update the content a visitor sees, it’s absolutely critical to understand when a user clicks from one page to another in order to trigger the intended experience. For example, if a user navigated from a <a href="https://www.dynamicyield.com/glossary/product-detail-page/">product page</a> to the cart, where the marketer intended to showcase free shipping threshold messaging, this typically requires coding a manual event to fire and render the experience – as it would for any other page transition. </p><p>Dynamic Yield’s <a href="https://support.dynamicyield.com/hc/en-us/articles/360022955254#implementing-page-context-0-2">codeless context implementation</a> offers marketers an easy way to set the definitions for each page type and its attributes right from within the admin console, allowing them to be exact in their detection and activation. This also guarantees that audiences, views, and impressions are collected and calculated in an automated fashion. </p></p><p><center></p><div style="font-size: 12px; margin-top: -42px; line-height: 1.3em; margin-bottom: -20px; max-width: 500px;"><em>Auto-detect page transitions, such as from PDP to cart for accurate personalization</em></center><br /> <img decoding="async" src="https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-Blog-Inline-2.png" alt="" width="1330" height="586" class="aligncenter size-full wp-image-161693" /></p><h3>Seamless elements optimization </h3><p>Historically, optimizing experiences with SPA frameworks meant pre-selecting and defining each element from a web page in the back end to be able to implement any changes in real time. Interfering with the source code in this way is not only time-consuming but also increases the likelihood of breaking the actual code. </p><p>With Dynamic Yield’s Shadow DOM, we mimic your environment and the actual structure, content, screens, elements, and even page stylings so you can safely personalize hero banners, <a href="https://www.dynamicyield.com/lesson/product-recommendations-guide/">product recommendations</a>, page layouts, and more, <strong>without development</strong>. And because she Shadow DOM is “invisible” to your SPA, this minimizes the number of element lookups, reducing flicker and boosting performance. </p></p><p><center></p><div style="font-size: 12px; margin-top: -42px; line-height: 1.3em; margin-bottom: -20px; max-width: 500px;"><em>Our Shadow DOM provides a safe environment for personalization</em></center><br /> <img decoding="async" src="https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-Blog-Inline-3.png" alt="" width="1330" height="586" class="aligncenter size-full wp-image-161699" /></p><h3>How it works (where are our developers at?)</h3><p>Dynamic Yield applies changes to elements on a traditional, static site when a page is activated. However, with single page applications, new elements are updated or added to alter the site experience as a visitor explores.</p><p>In order to accomplish this, we introduced three new technologies to the Dynamic Yield platform (marketers may want to have a developer close by to translate): </p><ul><li aria-level="1">MutationObserver</li><li aria-level="1">State Machine</li><li aria-level="1">Shadow DOM</li></ul><p>First, we use a Web API called a MutationObserver to monitor when page elements load, even when the page doesn’t fully reload itself. The MutationObserver provides hooks into DOM mutations, enabling Dynamic Yield to keep track of when a DOM node is inserted, destroyed, or modified so that we can apply (or reapply) changes at the right moment. In other words, we use MutationObserver to “see” when something has changed on your site.</p><p>Once an experiment or campaign activates and a visitor is bucketed into the experiment, the MutationObserver checks the DOM for as long as the page is active and applies (and reapplies) changes as appropriate. Once the page deactivates, Dynamic yield no longer attempts to change the elements on that page.</p><p>Furthermore, our script has a new state machine, with all of our elements existing as stateful smart objects. This allows us to keep track of what should be shown and when, while listening to your application via the MutationObserver.</p><p>And finally, we’ve added Dynamic Yield elements via the Shadow DOM, creating a safe environment for us to make changes in a way that doesn’t interfere with your application’s lifecycle.</p><p><em>Read our </em><a href="https://support.dynamicyield.com/hc/en-us/articles/360017698238-Dynamic-Yield-for-Single-Page-Applications-SPA-Early-Access#known-limitations-0-4"><em>Knowledge Base article</em></a><em> for more technical details on how Dynamic Yield works with SPAs as well as our solution’s high-level architecture. </em></p><h2>The future is dynamic</h2><p>One thing is clear, and that’s the fact that more and more websites, many of which used to be based on classic <a href="https://www.dynamicyield.com/lesson/server-side-testing-and-personalization/">server-side-rendering</a>, are now built or re-built as Single Page Applications (SPAs) using React and similar frameworks.</p><p>Dynamic Yield for SPAs guarantees that brands can experiment based on real-time changes, regardless of infrastructure, page, or use case. And we will continue to evolve as new techniques, frameworks, and approaches become available, prioritizing the needs of those who are experimenting with new and innovative technologies to put the customer experience first.</p></div></article><div style="clear: both;"></div></div></div><div class="article-content"><div class="article-separator"><svg width="54" height="26" viewBox="0 0 54 26" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M53.0088 25.6367C52.7884 21.9564 51.8025 18.3625 50.1141 15.0849C48.4256 11.8073 46.0718 8.9181 43.2031 6.60203L43.2031 25.6367L53.0088 25.6367Z" fill="black"/> <path d="M14.4395 3.59038C10.3237 5.69174 6.82743 8.83082 4.29638 12.6973C1.76533 16.5638 0.28711 21.0239 0.0078125 25.6367L14.4395 25.6367L14.4395 3.59038Z" fill="black"/> <path d="M17.6563 2.20809L17.6562 25.6367L39.9829 25.6367L39.9829 4.36701C39.9829 4.36701 30.7303 -2.31342 17.6563 2.20809Z" fill="black"/> </svg></div><div class="article-tags-block"> <strong>Categories:</strong><ul class="post-categories"><li><a href="https://www.dynamicyield.com/blog/category/product/" rel="category tag">Product</a></li></ul></div><div class="article-tags-block"><strong>Tags:</strong><a href="https://www.dynamicyield.com/blog/tag/personalization-infrastructure/" rel="tag">Personalization Infrastructure</a><a href="https://www.dynamicyield.com/blog/tag/single-page-applications/" rel="tag">Single Page Applications</a></div></div></div><section class="lc-subscription-section"><div class="lc-subscription-form-block lc-subscription-inner"><h4 class="lc-subscription-title">Sign up for the XP² newsletter</h4><div class="lc-subscription-text">Join thousands of readers from Target, Citi, Spotify, Hulu, Google, Sephora, and other innovative brands who read our bi-weekly XP² newsletter, delivering educational content, research, and insights straight to your inbox</div><form class="mktoForm" data-formId="3876" data-formInstance="sub-inline"></form><div class="lc-privacy-wrapper"><div class="lc-privacy"> You may unsubscribe at any time. Visit our <a href="/privacy-policy/">privacy policy</a> to learn more about how we process your data and your rights as a data subject.</div></div></div><div class="lc-subscription-ty-block lc-subscription-inner"><h4 class="lc-subscription-title text-center">Thanks for<br> signing up!</h4></div></section><div class="container"><div class="related-posts-wrapper"><div id="dc_crp_related" class="crp_related"><h3>YOU MIGHT ALSO LIKE</h3><ul><li><a href="https://www.dynamicyield.com/blog/seamless-personalization-for-spas/"><img src="https://www.dynamicyield.com/wp-content/uploads/2021/07/DY-SPA-795x320-1.png" alt="" class="crp_thumb"><div class="crp_title">Dynamic Yield Delivers Seamless Personalization for Single Page Applications</div><div class="crp_button button">READ MORE</div></a></li><li><a href="https://www.dynamicyield.com/blog/essential-recommendation-capabilities/"><img src="https://www.dynamicyield.com/wp-content/uploads/2021/02/essential-recs-blog.png" alt="" class="crp_thumb"><div class="crp_title">An overview of Dynamic Yield’s Essential Recommendation Capabilities</div><div class="crp_button button">READ MORE</div></a></li><li><a href="https://www.dynamicyield.com/blog/personalization-use-cases/"><img src="https://www.dynamicyield.com/wp-content/uploads/2019/11/DY-UseCaseBlog-Feature.png" alt="" class="crp_thumb"><div class="crp_title">Inspiration Library – A searchable database of personalization examples</div><div class="crp_button button">READ MORE</div></a></li></ul></div></div></div><div class="et_pb_section post_slider_row test_posts_carousel select-clients-carousel et_section_regular"
style="background-color:#f9f9f9;"><div class="et_pb_row"><div class="et_pb_column et_pb_column_4_4"><div class="et_pb_text et_pb_bg_layout_light et_pb_text_align_left"><div class="case-studies-carousel-title">Driving Big Results with Personalization</div><div class="posts_carousel"><ul id="posts_carousel"><li class="243971"><a href="https://www.dynamicyield.com/case-studies/valamar/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2026/02/mc-cm-valmar-excerpt-544x672-1.jpg" width="281" height="347" /></a><div class="grid_title">How Valamar converts travel intent into bookings with real-time context</div></li><li class="243414"><a href="https://www.dynamicyield.com/case-studies/saks-fifth-avenue/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2025/11/mc-cm-saks-5thave-excerpt-544x672_v2.jpg" width="281" height="347" /></a><div class="grid_title">What makes Saks’ personalization engine a game-changer for driving 10% more conversions?</div></li><li class="242646"><a href="https://www.dynamicyield.com/case-studies/bergzeit/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2025/09/mc-cm-bergzeit-excerpt-544x672-1.jpg" width="281" height="347" /></a><div class="grid_title">Bringing the in-store expert online: How Bergzeit reinvented gear discovery with conversational commerce</div></li><li class="237681"><a href="https://www.dynamicyield.com/case-studies/leroymerlin/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2025/01/library-thumbnail.png" width="281" height="347" /></a><div class="grid_title">32% of Total Purchases from AdaptML Recommendations</div></li><li class="230927"><a href="https://www.dynamicyield.com/case-studies/signet/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2024/10/signet-new-library-thumbnail.jpg" width="281" height="347" /></a><div class="grid_title">+88% Conversion Uplift with Mastercard Predictive Spend Insights</div></li><li class="224233"><a href="https://www.dynamicyield.com/case-studies/personalization-breeze/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2024/07/library-thumbnail.png" width="281" height="347" /></a><div class="grid_title">Making Personalization a Breeze for Leading Financial Institutions</div></li><li class="221699"><a href="https://www.dynamicyield.com/case-studies/tui/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2024/06/tui-library-thumbnail.png" width="281" height="347" /></a><div class="grid_title">+10.3% uplift in add-to-cart rate</div></li><li class="215474"><a href="https://www.dynamicyield.com/case-studies/sky/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2024/02/library-thumbnail-2.png" width="281" height="347" /></a><div class="grid_title">39% decrease in same-month cancellations</div></li><li class="215658"><a href="https://www.dynamicyield.com/case-studies/electrolux/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2024/02/library-thumbnail-1.png" width="281" height="347" /></a><div class="grid_title">16% contribution to D2C revenue from Dynamic Yield</div></li><li class="215340"><a href="https://www.dynamicyield.com/case-studies/on/"><img class="b-lazy" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://www.dynamicyield.com/wp-content/uploads/2024/02/library-thumbnail.png" width="281" height="347" /></a><div class="grid_title">16% of revenue from recommendations</div></li></ul></div><style>ul#posts_carousel:not(.slick-initialized) {
display: flex;
flex-direction: row;
overflow: visible;
width: 10000px;
}
.posts_carousel {
overflow-x: hidden;
}
#posts_carousel .slick-list {
max-width: 873px;
margin: auto;
left: 5px;
}
#posts_carousel li {
margin-right: 10px;
margin-bottom: 10px;
}
#posts_carousel li img{
box-shadow: 3px -1px 10px #C3C3C3;
}
#posts_carousel .slick-list:after {
content: '';
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 10px;
background: #f9f9f9;
}
#posts_carousel .slick-prev, #posts_carousel .slick-next {
width: 45px;
height: 45px;
}
#posts_carousel.slick-slider .slick-prev:before {
background: url('/wp-content/themes/Divi/images/arrow_left.svg')50% no-repeat;
opacity: 0.5;
width: 40px;
height: 40px;
}
#posts_carousel.slick-slider .slick-next:before {
background: url('/wp-content/themes/Divi/images/arrow_right.svg')50% no-repeat;
opacity: 0.5;
width: 40px;
height: 40px;
}
.post_slider_row {
overflow-x: hidden;
}
@media(max-width: 980px){
#posts_carousel {
max-width: 450px;
margin: auto;
}
#posts_carousel .slick-list {
width: 278px;
max-width: 95%;
margin: auto;
left: auto;
}
#posts_carousel li {
margin-right: 0;
}
#posts_carousel .slick-list:after {
display: none;
}
}
@media(max-width: 480px){
.posts_carousel{
display: inline;
}
#posts_carousel .slick-prev {
left: -25px;
z-index: 9;
}
#posts_carousel .slick-next {
right: -25px;
z-index: 9;
}
}
@media(max-width: 360px){
#posts_carousel.slick-slider .slick-next:before {
position: relative;
right: -10px;
}
#posts_carousel.slick-slider .slick-prev:before {
position:relative;
left: -5.5px;
}
}</style><script type="text/javascript">$=jQuery.noConflict();
$(".posts_carousel").css({visibility: "visible"});
$(window).load(function(){
$("#posts_carousel").slick({
centerMode: false,
waitForAnimate: false,
slidesToShow: 3,
arrows: true,
dots: false,
autoplaySpeed: 5,
draggable: true,
swipeToSlide: true,
responsive: [
{
breakpoint: 981,
settings: {
slidesToShow: 1
}
},
]
});
$(".slider-widget ul").css({opacity: "1"});
});
$("#posts_carousel").on("beforeChange", function(event, slick, currentSlide, nextSlide){
var imagesToLoad = $(".posts_carousel .b-lazy");
var slickCarouselBlazy = new Blazy();
slickCarouselBlazy.load(imagesToLoad);
});
let pageUrl = window.location.href;
let csCard = $(".posts_carousel a");
if(csCard) {
csCard.on("click", function(e) {
let ctaUrl = $(this).attr("href"),
ctaName = $(this).parent().find(".grid_title").text().trim();
adobeDataLayer.push({
"event": "tileClick",
"clickInfo": {
tileName: ctaName,
destinationURL: ctaUrl,
tileSection : "Posts Carousel",
tileLocation: pageUrl,
}
});
});
}</script> </div></div></div></div> <script type='text/javascript'>//DY.API('siteVar', {id: 128, value: 'Gidi Vigo'});
//DY.API('siteVar', {id: 129, value: 'Product'});</script> <footer id="main-footer" class=""><div class="footer-top"><div class="footer-container"><h4>Make hyper-personalization a reality</h4><p>Transform simple customer transactions into enduring relationships and unlock a new horizon of growth</p><div class="footer-btns-wrap"> <a href="https://www.dynamicyield.com/request-demo/" class="btn-teal">Contact Sales</a> <a href="https://www.dynamicyield.com/product-demo/" class="btn-transparent">Watch a product demo<svg xmlns="http://www.w3.org/2000/svg" width="15.625" height="15.625" viewBox="0 0 15.625 15.625"> <path id="Icon_ionic-ios-play-circle" data-name="Icon ionic-ios-play-circle" d="M10.688,3.375A7.313,7.313,0,1,0,18,10.688,7.311,7.311,0,0,0,10.688,3.375Zm2.946,7.45L8.81,13.743a.156.156,0,0,1-.236-.137V7.77a.156.156,0,0,1,.236-.137l4.823,2.918A.161.161,0,0,1,13.634,10.825Z" transform="translate(-2.875 -2.875)" fill="none" stroke="rgba(0,0,0,0.8)" stroke-width="1"/> </svg> </a></div><ul class="footer-certificates"><li class="retina_parent"> <a href="https://www.dynamicyield.com/compliance/"> <img src="/wp-content/uploads/2022/05/gdpr-icon.png" alt="gdpr icon" width="139" height="70"> </a></li><li class="retina_parent"> <a href="https://www.dynamicyield.com/compliance/"> <img src="/wp-content/uploads/2023/04/SOCII-Badge.png" alt="socii icon" width="70" height="70"> </a></li><li> <a href="https://www.dynamicyield.com/compliance/"> <img src="/wp-content/uploads/2022/05/ccpa-icon.svg" alt="ccpa icon" width="117" height="40"> </a></li><li class="retina_parent"> <a href="https://www.dynamicyield.com/compliance/"> <img src="/wp-content/uploads/2022/05/iso-27001.png" alt="iso icon" width="106" height="68"> </a></li></ul></div></div><div class="footer-container"><div id="footer-widgets"><div class="footer-widget"><div id="nav_menu-2" class="fwidget et_pb_widget widget_nav_menu"><h4 class="title">Key Capabilities</h4><div class="menu-core-capabilities-container"><ul id="menu-core-capabilities" class="menu"><li id="menu-item-230872" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-230872"><a href="https://www.dynamicyield.com/segmentation/">Segmentation</a></li><li id="menu-item-5913" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-5913"><a href="https://www.dynamicyield.com/targeting/">Targeting</a></li><li id="menu-item-198647" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-198647"><a href="https://www.dynamicyield.com/recommendations/">Recommendations</a></li><li id="menu-item-198648" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-198648"><a href="https://www.dynamicyield.com/journey-orchestration/">Journey Orchestration</a></li><li id="menu-item-230873" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-230873"><a href="https://www.dynamicyield.com/optimization/">Optimization</a></li></ul></div></div></div><div class="footer-widget"><div id="nav_menu-13" class="fwidget et_pb_widget widget_nav_menu"><h4 class="title">Industries</h4><div class="menu-industries-container"><ul id="menu-industries" class="menu"><li id="menu-item-51518" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-51518"><a href="/ecommerce/">eCommerce</a></li><li id="menu-item-51520" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-51520"><a href="/financial-services/">Financial Services</a></li><li id="menu-item-224041" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-224041"><a href="/restaurants/">Restaurants</a></li><li id="menu-item-224042" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-224042"><a href="/grocery/">Grocery</a></li><li id="menu-item-51519" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-51519"><a href="/b2b-ecommerce/">B2B eCommerce</a></li><li id="menu-item-13777" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13777"><a href="https://www.dynamicyield.com/travel/">Travel</a></li><li id="menu-item-19895" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19895"><a href="https://www.dynamicyield.com/gaming/">iGaming</a></li><li id="menu-item-13775" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13775"><a href="https://www.dynamicyield.com/media/">Media</a></li></ul></div></div></div><div class="footer-widget"><div id="nav_menu-11" class="fwidget et_pb_widget widget_nav_menu"><h4 class="title">Why Dynamic Yield</h4><div class="menu-why-dynamic-yield-container"><ul id="menu-why-dynamic-yield" class="menu"><li id="menu-item-51524" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-51524"><a href="/customer-success/">Industry-Leading Services</a></li><li id="menu-item-31658" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-31658"><a href="https://www.dynamicyield.com/clients/">Global Scale</a></li><li id="menu-item-13718" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-13718"><a href="https://www.dynamicyield.com/case-studies/">Real Impact</a></li><li id="menu-item-224043" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-224043"><a href="/ai/">Personalization AI</a></li><li id="menu-item-224044" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-224044"><a href="/partners/">Rich Partner Network</a></li><li id="menu-item-224045" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-224045"><a href="/enterprise-grade-personalization/">Enterprise-Grade Security</a></li></ul></div></div></div><div class="footer-widget"><div id="nav_menu-5" class="fwidget et_pb_widget widget_nav_menu"><h4 class="title">Company</h4><div class="menu-company-container"><ul id="menu-company" class="menu"><li id="menu-item-242875" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-242875"><a href="https://www.mastercard.com/us/en/for-the-world/about-us.html">About Us</a></li><li id="menu-item-19360" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19360"><a href="https://events.dynamicyield.com/">Events</a></li><li id="menu-item-242874" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-242874"><a href="https://www.mastercard.com/us/en/news-and-trends/stories.html">Press</a></li><li id="menu-item-130411" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-130411"><a href="https://www.dynamicyield.com/blog/">Blog</a></li><li id="menu-item-226" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-226"><a href="https://www.dynamicyield.com/contact/">Contact</a></li><li id="menu-item-198646" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-198646"><a href="https://www.dynamicyield.com/partner-program/">Become a Partner</a></li><li id="menu-item-11264" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-11264"><a href="/request-demo/">Request Demo</a></li></ul></div></div><div id="text-6" class="fwidget et_pb_widget widget_text"><div class="textwidget"><ul style="min-width: 150px; margin-top: -15px;"><li><a style="color: #fff; font-weight: 500;" href="/careers/">We’re hiring!</a></li></ul></div></div></div><div class="lc-footer-nav-block"><div class="lc-footer-nav-header"> <a href="https://www.dynamicyield.com/learn/" class="lc-footer-logo"></a> <span>Take your knowledge to exponential levels</span></div><div class="lc-footer-menu"><ul id="menu-lc-menu-footer" class="menu"><li id="menu-item-212992" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212992"><a href="https://www.dynamicyield.com/articles/">Articles</a></li><li id="menu-item-212993" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212993"><a href="https://www.dynamicyield.com/learning-paths/">Learning Paths</a></li><li id="menu-item-212994" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212994"><a href="https://www.dynamicyield.com/rooted-personalization/">Rooted Personalization</a></li><li id="menu-item-212995" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212995"><a href="https://www.dynamicyield.com/personalization-examples/">Personalization Examples</a></li><li id="menu-item-212996" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212996"><a href="https://www.dynamicyield.com/guides/">Guides</a></li><li id="menu-item-212997" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212997"><a href="https://www.dynamicyield.com/talks/">Talks</a></li><li id="menu-item-212999" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-212999"><a href="https://www.dynamicyield.com/glossary-terms/">Encyclopedia</a></li><li id="menu-item-212998" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-212998"><a href="https://marketing.dynamicyield.com/benchmarks/">Benchmarks</a></li></ul></div></div></div></div><div id="et-footer-nav"><div class="footer-container"><ul id="menu-footer-menu" class="bottom-nav"><li id="menu-item-19183" class="footer_menu_title menu-item menu-item-type-custom menu-item-object-custom menu-item-19183"><a>Recommended Guides:</a></li><li id="menu-item-211968" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-211968"><a href="https://www.dynamicyield.com/article/personalization-guide/">Personalization</a></li><li id="menu-item-138198" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-138198"><a href="https://www.dynamicyield.com/lesson/introduction-to-ab-testing/">A/B Testing</a></li><li id="menu-item-147897" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-147897"><a href="https://www.dynamicyield.com/lesson/cro-plan/">Conversion Rate Optimization</a></li><li id="menu-item-19184" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19184"><a href="/lesson/shopping-cart-abandonment-strategy/">Shopping Cart Abandonment</a></li><li id="menu-item-19185" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-19185"><a href="/lesson/product-recommendations-guide/">Product Recommendations</a></li><li id="menu-item-22805" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-22805"><a href="/lesson/promise-and-pitfalls-omnichannel-retailing/">Omnichannel Retailing</a></li><li id="menu-item-22885" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-22885"><a href="/lesson/the-economics-of-ecommerce-conversion-optimization/">eCommerce Conversion Rate Optimization</a></li><li id="menu-item-28240" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-28240"><a href="/article/50-most-important-dynamicyield-personalization-stats/">Personalization Statistics</a></li><li id="menu-item-33877" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-33877"><a href="https://www.dynamicyield.com/article/tj-maxx-spired-checkout-optimization/">Checkout Optimization</a></li><li id="menu-item-123711" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-123711"><a href="/article/ecommerce-personalization-must-haves/">eCommerce Personalization</a></li><li id="menu-item-144090" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-144090"><a href="https://www.dynamicyield.com/lesson/strategizing-omnichannel-personalization/">Omnichannel Personalization</a></li><li id="menu-item-148146" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-148146"><a href="https://marketing.dynamicyield.com/benchmarks/cart-abandonment-rate/">Shopping Cart Abandonment Rate</a></li></ul><div class="footer-mach-logo retina_parent"> <img src="/wp-content/uploads/2022/05/mach-cert-22-wh.png" alt="Mach logo" width="63" height="70"></div><div class="language-switcher footer-language-switcher"><ul><li>en<ul><li><a class="active" href="https://www.dynamicyield.com/blog/dynamic-yield-for-spas/">English</a></li><li><a href="https://www.dynamicyield.com/es/">Español</a></li><li><a href="https://www.dynamicyield.com/de/">Deutsch</a></li><li><a href="https://www.dynamicyield.com/fr/">Français</a></li><li><a href="https://www.dynamicyield.com/ja/">日本語</a></li></ul></li></li></ul></div></div></div><div id="footer-bottom"><div class="footer-container"><div class="footer_info_wrapper"><div id="footer-info"> <button id="ot-sdk-btn" class="ot-sdk-show-settings">Manage Cookies</button> <a href="/privacy-notice/" target="_blank" class="animlink">Privacy Notice</a> <a href="/tos/" target="_blank" class="animlink">Terms of use</a> <span>© 2026 Mastercard Dynamic Yield</span></div></div><div class="footer_social_icons"><style>.et-social-icons .et-social-icon img {
max-width: 16px;
transition: 0.2s all;
}
.et-social-icons .et-social-icon img:not(:hover) {
opacity: 0.5;
}</style><span itemscope itemtype="http://schema.org/Organization"><link itemprop="url" href="https://www.dynamicyield.com"><ul class="et-social-icons"><li class="et-social-icon"> <a itemprop="sameAs" href="https://www.linkedin.com/company/dynamic-yield" class="icon" target="_blank"> <img src="https://www.dynamicyield.com/wp-content/uploads/2025/09/Frame-5.png" alt="LinkedIn Logo" /> </a></li><li class="et-social-icon"> <a itemprop="sameAs" href="https://www.instagram.com/dynamicyield/" class="icon" target="_blank"> <img src="https://www.dynamicyield.com/wp-content/uploads/2025/09/Frame-4.png" alt="Instagram Logo" /> </a></li><li class="et-social-icon"> <a itemprop="sameAs" href="https://www.youtube.com/c/Dynamicyield" class="icon" target="_blank"> <img src="https://www.dynamicyield.com/wp-content/uploads/2025/09/Frame-3.png" alt="Youtube Logo" /> </a></li><li class="et-social-icon"> <a itemprop="sameAs" href="https://www.tiktok.com/@dynamic.yield" class="icon" target="_blank"> <img src="https://www.dynamicyield.com/wp-content/uploads/2025/09/Frame-2.png" alt="TikTok Logo" /> </a></li><li class="et-social-icon"> <a itemprop="sameAs" href="https://www.facebook.com/DynamicYield" class="icon" target="_blank"> <img src="https://www.dynamicyield.com/wp-content/uploads/2025/09/Frame-1.png" alt="Facebook Logo" /> </a></li><li class="et-social-icon"> <a itemprop="sameAs" href="https://twitter.com/DynamicYield" class="icon" target="_blank"> <img src="https://www.dynamicyield.com/wp-content/uploads/2025/09/Frame.png" alt="X Logo" /> </a></li></ul> </span></div></div></div></footer></div></div><div id="mobile_menu_overlay"></div> <script type="text/javascript">window.DY = window.DY || {};
DY.recommendationContext = { type: "POST", data: ['161018'], lng: "en_US" };</script> <script type='text/javascript' src='//cdn.dynamicyield.com/api/8765281/api_dynamic.js'></script> <script type='text/javascript' src='//cdn.dynamicyield.com/api/8765281/api_static.js'></script> <script type="text/javascript">var sbiajaxurl = "https://www.dynamicyield.com/wp-admin/admin-ajax.php";</script> <script type="text/javascript">!function(e,n){var r={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":2,"ampersandCleanup":true,"linehover":true,"rawcodeDbclick":false,"textOverflow":"break","linenumbers":true,"theme":"beyond","language":"generic","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""},"resources":["https:\/\/www.dynamicyield.com\/wp-content\/plugins\/enlighter\/cache\/enlighterjs.min.css?tvrakvcLArVio6C","https:\/\/www.dynamicyield.com\/wp-content\/plugins\/enlighter\/resources\/enlighterjs\/enlighterjs.min.js"]},o=document.getElementsByTagName("head")[0],t=n&&(n.error||n.log)||function(){};e.EnlighterJSINIT=function(){!function(e,n){var r=0,l=null;function c(o){l=o,++r==e.length&&(!0,n(l))}e.forEach(function(e){switch(e.match(/\.([a-z]+)(?:[#?].*)?$/)[1]){case"js":var n=document.createElement("script");n.onload=function(){c(null)},n.onerror=c,n.src=e,n.async=!0,o.appendChild(n);break;case"css":var r=document.createElement("link");r.onload=function(){c(null)},r.onerror=c,r.rel="stylesheet",r.type="text/css",r.href=e,r.media="all",o.appendChild(r);break;default:t("Error: invalid file extension",e)}})}(r.resources,function(e){e?t("Error: failed to dynamically load EnlighterJS resources!",e):"undefined"!=typeof EnlighterJS?EnlighterJS.init(r.selectors.block,r.selectors.inline,r.options):t("Error: EnlighterJS resources not loaded yet!")})},(document.querySelector(r.selectors.block)||document.querySelector(r.selectors.inline))&&e.EnlighterJSINIT()}(window,console);</script><script type="text/javascript" id="rfw-script-js-extra">var rfw = {"speed":""};</script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_a5ec58aa1f222bedaf60cdced3b8a004.js?ver=2026020901" id="rfw-script-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_c1b7fbe6b1a3b777fddfe187094deb97.js?ver=2026020901" id="rfw-script-fitvid-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-includes/js/comment-reply.min.js?ver=935c7f8ce03960b02800bc8ae3231df8" id="comment-reply-js" async="async" data-wp-strategy="async"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_ea3fad8947382ebf8709507a11a805db.js" id="divi-fitvids-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/themes/Divi/js/waypoints.min.js" id="waypoints-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_845779ea879c70773af95b2f6fc394d2.js" id="magnific-popup-js"></script> <script type="text/javascript" id="divi-custom-script-js-extra">var et_custom = {"ajaxurl":"https:\/\/www.dynamicyield.com\/wp-admin\/admin-ajax.php","images_uri":"https:\/\/www.dynamicyield.com\/wp-content\/themes\/Divi\/images","et_load_nonce":"ee490c83a0","subscription_failed":"Please, check the fields below to make sure you entered the correct information.","fill":"Fill","field":"field","invalid":"Invalid email","captcha":"Captcha"};</script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_43b4a88b2828bc5c023dc913689e8da5.js?ver=20.4" id="divi-custom-script-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/themes/Divi/custom/bootstrap/js/bootstrap.min.js" id="bootstrap-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/themes/Divi/custom/slick/slick.min.js" id="slick-js"></script> <script type="text/javascript" data-ot-ignore src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_12efd5a7d441d8b7f817fc6fc685dca9.js?ver=21.85" id="customscript-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_33fa37a5effe9361e40b8525e36e3eaf.js" id="typed-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_eb8981568f49ac148e96af3241eb95c7.js?ver=21.85" id="form_validation-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_be33bce741fd746dee1a6cf31c0b5bde.js" id="retina_js-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_9a50928b26148d1c35a95957e5ef2b9d.js?ver=21.85" id="mkto-scripts-js"></script> <script type="module" src="https://www.dynamicyield.com/wp-content/themes/Divi/js/cid-validation.js?ver=21.85" id="cid-validation"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.min.js" id="select2-js-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_6ee6e48031ef5dddfe05a9f11136201f.js" id="post-checklist-js-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_5113be2479418a077e699b1647e0adef.js" id="post-event-cards-js-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/plugins/wp-featherlight/js/wpFeatherlight.pkgd.min.js?ver=1.3.4" id="wp-featherlight-js"></script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_17babe2fc54117766e24bd50889c6577.js?ver=1772269298" id="article-script-js"></script> <script type="text/javascript" id="dc_conversion_api-js-extra">var ajax_obj = {"nonce":"910abf0a29","ajax_url":"https:\/\/www.dynamicyield.com\/wp-admin\/admin-ajax.php","ajax_action":"conversion_api_call"};</script> <script type="text/javascript" src="https://www.dynamicyield.com/wp-content/cache/autoptimize/js/autoptimize_single_34a6a3100a2ecbc7706af2d4c798f856.js?ver=935c7f8ce03960b02800bc8ae3231df8" id="dc_conversion_api-js"></script> <script type="text/javascript" data-noptimize>var dy_search_params = new URLSearchParams(window.location.search);
if(dy_search_params.has('utm_source')) {
localStorage.setItem('utm_source', dy_search_params.get('utm_source'));
}
if(dy_search_params.has('utm_medium')) {
localStorage.setItem('utm_medium', dy_search_params.get('utm_medium'));
}
if(dy_search_params.has('utm_content')) {
localStorage.setItem('utm_content', dy_search_params.get('utm_content'));
}
if(dy_search_params.has('utm_campaign')) {
localStorage.setItem('utm_campaign', dy_search_params.get('utm_campaign'));
}
if(dy_search_params.has('utm_term')) {
localStorage.setItem('utm_term', dy_search_params.get('utm_term'));
}
if(dy_search_params.has('mkt_tok')) {
localStorage.setItem('mkt_tok', dy_search_params.get('mkt_tok'));
}
// Also, fill in the data inside the Marketo form once its available
if(typeof window.MktoForms2 === 'object') {
MktoForms2.whenReady(function(_form) {
var form = _form.getFormElem();
console.log('MKTO FORM READY');
// Append the mkt_tok param if it exists in the URL
var ls_mkto_tok = localStorage.getItem('mkt_tok');
if(ls_mkto_tok) {
_form.addHiddenFields({
mkt_tok: ls_mkto_tok
});
_form.vals({ mkt_tok: ls_mkto_tok });
}
// Fill in the UTM data from localStorage
var dy_utms = {
'utm_source': 'txt_source__c',
'utm_medium': 'txt_medium__c',
'utm_content': 'txt_content__c',
'utm_campaign': 'txt_campaign_name__c',
'utm_term': 'txt_term__c',
'gclid': ['GCLID__c', 'GCLID_c__c']
};
for(var i = 0; i < Object.keys(dy_utms).length; i++) {
var ls_key = Object.keys(dy_utms)[i],
ls_value = localStorage.getItem(ls_key),
form_key = dy_utms[ls_key],
form_field;
if(ls_value) {
if(ls_key === 'gclid') {
ls_value = JSON.parse(ls_value).value;
}
if(typeof(form_key) === 'string') {
form_field = form[0].querySelector('input[type="hidden"][name="' + form_key + '"]');
if(form_field) {
form_field.value = ls_value;
}
} else {
for(var j = 0; j < form_key.length; j++) {
form_field = form[0].querySelector('input[type="hidden"][name="' + form_key[j] + '"]');
if(form_field) {
form_field.value = ls_value;
}
}
}
}
}
// IP Address
fetch('https://www.cloudflare.com/cdn-cgi/trace').then(function(result) {
result.text().then(function(values) {
values.split("\n").map(function(item) {
var pair = item.split('=');
if(['ip'].includes(pair[0])) {
form[0].querySelector('input[type="hidden"][name="IP__c"]').value = pair[1];
}
});
});
});
// GA ID and Referrer
var dy_utms_cookie = {};
document.cookie.split(';').forEach(function(el) {
var splitCookie = el.split('=');
var key = splitCookie[0].trim();
var value = splitCookie[1];
dy_utms_cookie[key] = value;
});
if(dy_utms_cookie["_ga"]) {
form[0].querySelector('input[type="hidden"][name="Visitor_ID__c"]').value = dy_utms_cookie["_ga"].substring(6);
}
if(dy_utms_cookie["personalize_referrer_string"]) {
form[0].querySelector('input[type="hidden"][name="Referral__c"]').value = dy_utms_cookie["personalize_referrer_string"].substring(6);
}
// ZoomInfo
if(localStorage.getItem('ZoomInfoData')) {
var zoominfo_data = JSON.parse(localStorage.getItem('ZoomInfoData'));
if(zoominfo_data) {
form[0].querySelector('input[type="hidden"][name="Alexa_Rank__c"]').value = zoominfo_data.alexaglobalrank;
form[0].querySelector('input[type="hidden"][name="Employees__c"]').value = zoominfo_data.employeesrange;
form[0].querySelector('input[type="hidden"][name="Company_Revenue_Range__c"]').value = zoominfo_data.estimatedannualrevenue;
}
}
// Also, dispatch a dataLayer event on success
_form.onSuccess(function(values, follow_up_url) {
window.dataLayer = window.dataLayer || [];
if([3739, 4802, 5094, 5110, 4946, 5076, 5116, 5171, 5172, 5173].includes(_form.getId())) {
window.dataLayer.push({
'event': 'demo_request_complete',
'eventCallback': function() {
if(follow_up_url) {
window.location.href = follow_up_url;
}
}
});
return false;
} else if([3876].includes(_form.getId())) {
window.dataLayer.push({
'event': 'newsletter_signup_complete',
'eventCallback': function() {
if(follow_up_url) {
window.location.href = follow_up_url;
}
}
});
return false;
}
});
});
}</script> <script>if(typeof(jQuery) !== 'undefined') {
$ = jQuery.noConflict();
}
function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
}
$(window).load(function(){
var videoID = getUrlParameter('video');
if(videoID !== undefined){
if($('#wistia-' + videoID + '-1').length){
var videoName = $('#wistia-' + videoID + '-1').parents('.tab-pane');
videoName = videoName[0].id
}
if($('a[href="#' + videoName +'"]').length){
$('a[href="#' + videoName +'"]').each(function(){
$(this).click();
});
}
addScript('https://fast.wistia.com/embed/medias/'+ videoID +'.jsonp');
addScript('https://fast.wistia.com/assets/external/E-v1.js');
$('body').append('<span class="wistia_embed wistia_async_'+videoID+' popover=true popoverContent=link dy-wistia-popup" style="display:inline"></span>');
window._wq = window._wq || [];
_wq.push({ id: videoID, onReady: function(video) {
var video = Wistia.api(videoID);
video.popover.show(); // open the popover
video.play(); // play the video
setTimeout(function(){video.unmute();}, 500);
}});
}
});</script> <style>#adBanner {
background-color: transparent;
height: 0;
width: 1px;
}</style><div id="wrapfabtest"><div id="adBanner"></div></div></body></html>
<!-- Dynamic page generated in 0.562 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2026-02-28 04:01:38 -->
<!-- super cache -->