{"id":10193,"date":"2024-10-24T22:07:23","date_gmt":"2024-10-24T22:07:23","guid":{"rendered":"https:\/\/ceowebltd.com\/blog\/?p=10193"},"modified":"2024-10-24T22:07:23","modified_gmt":"2024-10-24T22:07:23","slug":"how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager","status":"publish","type":"post","link":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/","title":{"rendered":"How to set up tracking for single-page applications (SPA) with Google Tag Manager"},"content":{"rendered":"<p>Setting up tracking for Single-Page Applications (SPAs) with Google Tag Manager (GTM) requires a different approach than traditional multi-page websites. SPAs load content dynamically without refreshing the page, which can complicate tracking user interactions and page views. Here\u2019s a comprehensive guide to effectively implement tracking for SPAs using GTM.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_73 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#Understanding_the_Challenges_of_SPAs\" title=\"Understanding the Challenges of SPAs\">Understanding the Challenges of SPAs<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#Steps_to_Set_Up_Tracking_for_SPAs\" title=\"Steps to Set Up Tracking for SPAs\">Steps to Set Up Tracking for SPAs<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#1_Initial_Setup_of_Google_Tag_Manager\" title=\"1. Initial Setup of Google Tag Manager\">1. Initial Setup of Google Tag Manager<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#2_Configure_Page_View_Tracking\" title=\"2. Configure Page View Tracking\">2. Configure Page View Tracking<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#Method_A_History_Change_Trigger\" title=\"Method A: History Change Trigger\">Method A: History Change Trigger<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#Method_B_Custom_JavaScript_Variable_for_Manual_Control\" title=\"Method B: Custom JavaScript Variable (for Manual Control)\">Method B: Custom JavaScript Variable (for Manual Control)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#3_Set_Up_Event_Tracking_for_User_Interactions\" title=\"3. Set Up Event Tracking for User Interactions\">3. Set Up Event Tracking for User Interactions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#4_Track_Virtual_Page_Views_Optional\" title=\"4. Track Virtual Page Views (Optional)\">4. Track Virtual Page Views (Optional)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#5_Testing_Your_Implementation\" title=\"5. Testing Your Implementation\">5. Testing Your Implementation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#6_Implement_Enhanced_E-commerce_Tracking_If_Applicable\" title=\"6. Implement Enhanced E-commerce Tracking (If Applicable)\">6. Implement Enhanced E-commerce Tracking (If Applicable)<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#Best_Practices_for_SPA_Tracking_with_GTM\" title=\"Best Practices for SPA Tracking with GTM\">Best Practices for SPA Tracking with GTM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#Conclusion\" title=\"Conclusion\">Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Understanding_the_Challenges_of_SPAs\"><\/span>Understanding the Challenges of SPAs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li><strong>Dynamic Content Loading<\/strong>: SPAs update the URL and content without a full page reload, making standard page view tracking insufficient.<\/li>\n<li><strong>Event Tracking<\/strong>: User interactions such as clicks, form submissions, and navigation often need to be tracked in real time.<\/li>\n<li><strong>State Management<\/strong>: As users navigate through the app, the state changes without traditional page transitions, requiring custom event handling.<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"Steps_to_Set_Up_Tracking_for_SPAs\"><\/span>Steps to Set Up Tracking for SPAs<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"1_Initial_Setup_of_Google_Tag_Manager\"><\/span>1. <strong>Initial Setup of Google Tag Manager<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Before you can track events in your SPA, ensure that you have GTM correctly set up:<\/p>\n<ul>\n<li><strong>Create a GTM Account<\/strong>: If you haven\u2019t already, create a GTM account and container.<\/li>\n<li><strong>Install GTM<\/strong>: Add the GTM container code to your SPA. This code should be placed in the <code>&lt;head&gt;<\/code> and <code>&lt;body&gt;<\/code> sections of your HTML.<\/li>\n<\/ul>\n<h4><span class=\"ez-toc-section\" id=\"2_Configure_Page_View_Tracking\"><\/span>2. <strong>Configure Page View Tracking<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Since SPAs don&#8217;t trigger traditional page views, you need to configure GTM to listen for URL changes. There are two common methods to handle this:<\/p>\n<h5><span class=\"ez-toc-section\" id=\"Method_A_History_Change_Trigger\"><\/span>Method A: History Change Trigger<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<ol>\n<li><strong>Create a New Trigger<\/strong>:\n<ul>\n<li>Go to <strong>Triggers<\/strong> in GTM and click on <strong>New<\/strong>.<\/li>\n<li>Name the trigger (e.g., \u201cHistory Change Trigger\u201d).<\/li>\n<li>Choose <strong>Trigger Type<\/strong>: <strong>History Change<\/strong>.<\/li>\n<li>This trigger fires whenever the browser\u2019s history changes, which happens in SPAs when users navigate.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Create a New Tag<\/strong>:\n<ul>\n<li>Go to <strong>Tags<\/strong> and click on <strong>New<\/strong>.<\/li>\n<li>Choose <strong>Google Analytics: GA4 Event<\/strong> (or <strong>Universal Analytics<\/strong> based on your setup).<\/li>\n<li>Set the <strong>Event Name<\/strong> to <code>page_view<\/code>.<\/li>\n<li>Configure the <strong>Tag Configuration<\/strong> with your Measurement ID or Tracking ID.<\/li>\n<li>Under <strong>Triggering<\/strong>, select the <strong>History Change Trigger<\/strong> you just created.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h5><span class=\"ez-toc-section\" id=\"Method_B_Custom_JavaScript_Variable_for_Manual_Control\"><\/span>Method B: Custom JavaScript Variable (for Manual Control)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>If you need more control over what constitutes a page view:<\/p>\n<ol>\n<li><strong>Create a Custom JavaScript Variable<\/strong>:\n<ul>\n<li>Go to <strong>Variables<\/strong> and click on <strong>New<\/strong>.<\/li>\n<li>Choose <strong>Variable Type<\/strong>: <strong>Custom JavaScript<\/strong>.<\/li>\n<li>Use the following code to capture the page URL:<\/li>\n<\/ul>\n<div class=\"contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary dark:bg-gray-950\">\n<div class=\"flex items-center text-token-text-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md h-9 bg-token-sidebar-surface-primary dark:bg-token-main-surface-secondary\">javascript<\/div>\n<div class=\"sticky top-9 md:top-[5.75rem]\">\n<div class=\"absolute bottom-0 right-2 flex h-9 items-center\">\n<div class=\"flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary\"><span class=\"\" data-state=\"closed\"><button class=\"flex gap-1 items-center py-1\">Copy code<\/button><\/span><\/div>\n<\/div>\n<\/div>\n<div class=\"overflow-y-auto p-4\" dir=\"ltr\"><code class=\"!whitespace-pre hljs language-javascript\"><span class=\"hljs-keyword\">function<\/span>() {<br \/>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-variable language_\">window<\/span>.<span class=\"hljs-property\">location<\/span>.<span class=\"hljs-property\">pathname<\/span> + <span class=\"hljs-variable language_\">window<\/span>.<span class=\"hljs-property\">location<\/span>.<span class=\"hljs-property\">search<\/span>;<br \/>\n}<br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<li><strong>Set Up Page View Tag<\/strong>:\n<ul>\n<li>Create a new tag for the page view.<\/li>\n<li>Use the above variable in the <strong>Page Location<\/strong> field of the tag.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"3_Set_Up_Event_Tracking_for_User_Interactions\"><\/span>3. <strong>Set Up Event Tracking for User Interactions<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>To capture specific user interactions such as button clicks, form submissions, or custom events:<\/p>\n<ol>\n<li><strong>Identify Interactions<\/strong>: Determine which interactions are essential for tracking (e.g., button clicks, navigation items).<\/li>\n<li><strong>Create Click Triggers<\/strong>:\n<ul>\n<li>Go to <strong>Triggers<\/strong> and create a new trigger.<\/li>\n<li>Choose <strong>Trigger Type<\/strong>: <strong>Click \u2013 All Elements<\/strong> or <strong>Click \u2013 Just Links<\/strong>, depending on your needs.<\/li>\n<li>Configure the trigger to fire on specific elements. You can use CSS selectors, or ID, or define conditions based on Click URL, Click Classes, etc.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Create Event Tags<\/strong>:\n<ul>\n<li>Go to <strong>Tags<\/strong> and create a new tag.<\/li>\n<li>Choose <strong>Google Analytics: GA4 Event<\/strong> or <strong>Universal Analytics<\/strong> for event tracking.<\/li>\n<li>Fill in the <strong>Event Name<\/strong> and parameters (like category, action, label) to define what event is being tracked.<\/li>\n<li>Link the tag to the click trigger you created.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"4_Track_Virtual_Page_Views_Optional\"><\/span>4. <strong>Track Virtual Page Views (Optional)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>If your SPA has significant navigation that you want to treat as distinct page views (even without a full page load), you can track virtual page views:<\/p>\n<ol>\n<li><strong>Create a Virtual Page View Tag<\/strong>:\n<ul>\n<li>Create a new tag for virtual page views.<\/li>\n<li>Choose <strong>Google Analytics: GA4 Event<\/strong> or <strong>Universal Analytics<\/strong>.<\/li>\n<li>Set the <strong>Event Name<\/strong> to <code>page_view<\/code> and configure the <strong>Page Path<\/strong> parameter to match the virtual path users are navigating to (e.g., <code>\/about<\/code>).<\/li>\n<\/ul>\n<\/li>\n<li><strong>Link to URL Change Event<\/strong>:\n<ul>\n<li>Use the <strong>History Change Trigger<\/strong> to fire this virtual page view tag.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"5_Testing_Your_Implementation\"><\/span>5. <strong>Testing Your Implementation<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><strong>Preview Mode<\/strong>: Use GTM\u2019s Preview Mode to test your tags and triggers. Make sure that your page views and events are firing as expected when navigating your SPA.<\/li>\n<li><strong>Debugging<\/strong>: Check the GTM Debug Console for any errors or misfires. Ensure that all tags fire under the correct conditions.<\/li>\n<li><strong>Verify in Google Analytics<\/strong>: After testing in GTM, check your Google Analytics dashboard to confirm that the events and page views are recorded correctly.<\/li>\n<\/ol>\n<h4><span class=\"ez-toc-section\" id=\"6_Implement_Enhanced_E-commerce_Tracking_If_Applicable\"><\/span>6. <strong>Implement Enhanced E-commerce Tracking (If Applicable)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>If your SPA is an e-commerce application, you can enhance tracking with e-commerce events. GTM allows you to capture interactions like product views, add-to-cart actions, and transactions using the <strong>Enhanced E-commerce<\/strong> setup.<\/p>\n<ol>\n<li><strong>Create E-commerce Tags<\/strong>: Similar to other event tags, create specific tags for each e-commerce event (e.g., <code>view_item<\/code>, <code>add_to_cart<\/code>).<\/li>\n<li><strong>Set Up Data Layer Variables<\/strong>: Ensure that your SPA is set up to push e-commerce data into the data layer when these events occur.<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"Best_Practices_for_SPA_Tracking_with_GTM\"><\/span>Best Practices for SPA Tracking with GTM<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li><strong>Use a Clear Naming Convention<\/strong>: Use descriptive names for tags and triggers to help manage and identify them easily.<\/li>\n<li><strong>Limit Tag Firing<\/strong>: Ensure that tags only fire when necessary to minimize data processing and maintain site performance.<\/li>\n<li><strong>Regularly Review Your Setup<\/strong>: Periodically review and update your GTM setup to adapt to any changes in the SPA or your tracking requirements.<\/li>\n<li><strong>Documentation<\/strong>: Keep detailed documentation of your GTM setup, including triggers and tags, to assist in future audits or updates.<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Setting up tracking for Single-Page Applications using Google Tag Manager is crucial for gaining insights into user behavior and optimizing marketing efforts. By implementing page view tracking, event tracking, and potentially virtual page views, you can effectively monitor user interactions in an SPA environment. Regular testing and adherence to best practices will ensure that your tracking setup remains effective and compliant with any relevant regulations. With this approach, you can leverage the full power of GTM to understand user engagement and enhance your SPA\u2019s performance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setting up tracking for Single-Page Applications (SPAs) with Google Tag Manager (GTM) requires a different approach than traditional multi-page websites. SPAs load content dynamically without&#8230;<\/p>\n","protected":false},"author":214,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-10193","post","type-post","status-publish","format-standard","hentry","category-digital-marketing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to set up tracking for single-page applications (SPA) with Google Tag Manager - CEOweb Ltd. Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to set up tracking for single-page applications (SPA) with Google Tag Manager - CEOweb Ltd. Blog\" \/>\n<meta property=\"og:description\" content=\"Setting up tracking for Single-Page Applications (SPAs) with Google Tag Manager (GTM) requires a different approach than traditional multi-page websites. SPAs load content dynamically without...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/\" \/>\n<meta property=\"og:site_name\" content=\"CEOweb Ltd. Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-24T22:07:23+00:00\" \/>\n<meta name=\"author\" content=\"Emmanuel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emmanuel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/\",\"url\":\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/\",\"name\":\"How to set up tracking for single-page applications (SPA) with Google Tag Manager - CEOweb Ltd. Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ceowebltd.com\/blog\/#website\"},\"datePublished\":\"2024-10-24T22:07:23+00:00\",\"dateModified\":\"2024-10-24T22:07:23+00:00\",\"author\":{\"@id\":\"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/4759c204c0b0f1d134ec16e8ec777a6f\"},\"breadcrumb\":{\"@id\":\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ceowebltd.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to set up tracking for single-page applications (SPA) with Google Tag Manager\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/#website\",\"url\":\"https:\/\/ceowebltd.com\/blog\/\",\"name\":\"CEOweb Ltd. Blog\",\"description\":\"Guest Posting - Digital Marketing &amp; Web Services\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ceowebltd.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/4759c204c0b0f1d134ec16e8ec777a6f\",\"name\":\"Emmanuel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9e883d40261b9b272de51992551b3eec4df631b7579a4fbec69c36a006dcbaf2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9e883d40261b9b272de51992551b3eec4df631b7579a4fbec69c36a006dcbaf2?s=96&d=mm&r=g\",\"caption\":\"Emmanuel\"},\"url\":\"https:\/\/ceowebltd.com\/blog\/author\/emmanuel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to set up tracking for single-page applications (SPA) with Google Tag Manager - CEOweb Ltd. Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/","og_locale":"en_US","og_type":"article","og_title":"How to set up tracking for single-page applications (SPA) with Google Tag Manager - CEOweb Ltd. Blog","og_description":"Setting up tracking for Single-Page Applications (SPAs) with Google Tag Manager (GTM) requires a different approach than traditional multi-page websites. SPAs load content dynamically without...","og_url":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/","og_site_name":"CEOweb Ltd. Blog","article_published_time":"2024-10-24T22:07:23+00:00","author":"Emmanuel","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Emmanuel"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/","url":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/","name":"How to set up tracking for single-page applications (SPA) with Google Tag Manager - CEOweb Ltd. Blog","isPartOf":{"@id":"https:\/\/ceowebltd.com\/blog\/#website"},"datePublished":"2024-10-24T22:07:23+00:00","dateModified":"2024-10-24T22:07:23+00:00","author":{"@id":"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/4759c204c0b0f1d134ec16e8ec777a6f"},"breadcrumb":{"@id":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ceowebltd.com\/blog\/how-to-set-up-tracking-for-single-page-applications-spa-with-google-tag-manager\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ceowebltd.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to set up tracking for single-page applications (SPA) with Google Tag Manager"}]},{"@type":"WebSite","@id":"https:\/\/ceowebltd.com\/blog\/#website","url":"https:\/\/ceowebltd.com\/blog\/","name":"CEOweb Ltd. Blog","description":"Guest Posting - Digital Marketing &amp; Web Services","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ceowebltd.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/4759c204c0b0f1d134ec16e8ec777a6f","name":"Emmanuel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9e883d40261b9b272de51992551b3eec4df631b7579a4fbec69c36a006dcbaf2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9e883d40261b9b272de51992551b3eec4df631b7579a4fbec69c36a006dcbaf2?s=96&d=mm&r=g","caption":"Emmanuel"},"url":"https:\/\/ceowebltd.com\/blog\/author\/emmanuel\/"}]}},"_links":{"self":[{"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/posts\/10193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/users\/214"}],"replies":[{"embeddable":true,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/comments?post=10193"}],"version-history":[{"count":1,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/posts\/10193\/revisions"}],"predecessor-version":[{"id":10194,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/posts\/10193\/revisions\/10194"}],"wp:attachment":[{"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/media?parent=10193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/categories?post=10193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/tags?post=10193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}