{"id":10513,"date":"2024-11-11T22:58:40","date_gmt":"2024-11-11T22:58:40","guid":{"rendered":"https:\/\/ceowebltd.com\/blog\/?p=10513"},"modified":"2024-11-11T22:58:40","modified_gmt":"2024-11-11T22:58:40","slug":"how-to-track-dynamic-content-with-google-tag-manager-2","status":"publish","type":"post","link":"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/","title":{"rendered":"How to track dynamic content with Google Tag Manager"},"content":{"rendered":"<p>Tracking dynamic content with <strong>Google Tag Manager (GTM)<\/strong> involves capturing changes on a website or app that occur without a full page reload, often driven by JavaScript, AJAX calls, or other dynamic elements. This is essential when you need to track interactions with content that is loaded or updated dynamically, such as user-specific data, form submissions, product additions to the cart, or content that changes without triggering a full page load (e.g., infinite scroll, AJAX content loading, etc.).<\/p>\n<p>Here\u2019s how you can track dynamic content using Google Tag Manager:<\/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-track-dynamic-content-with-google-tag-manager-2\/#1_Identify_the_Dynamic_Content_on_Your_Site\" title=\"1. Identify the Dynamic Content on Your Site\">1. Identify the Dynamic Content on Your Site<\/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-track-dynamic-content-with-google-tag-manager-2\/#2_Use_Data_Layer_Variables_for_Dynamic_Content\" title=\"2. Use Data Layer Variables for Dynamic Content\">2. Use Data Layer Variables for Dynamic Content<\/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-track-dynamic-content-with-google-tag-manager-2\/#How_to_Push_Dynamic_Data_to_the_Data_Layer\" title=\"How to Push Dynamic Data to the Data Layer:\">How to Push Dynamic Data to the Data Layer:<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#3_Set_Up_Triggers_in_Google_Tag_Manager\" title=\"3. Set Up Triggers in Google Tag Manager\">3. Set Up Triggers in Google Tag Manager<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#Example_of_Event-based_Trigger_for_Dynamic_Content\" title=\"Example of Event-based Trigger for Dynamic Content:\">Example of Event-based Trigger for Dynamic Content:<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#4_Configure_Tags_for_Dynamic_Content_Tracking\" title=\"4. Configure Tags for Dynamic Content Tracking\">4. Configure Tags for Dynamic Content Tracking<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#Example_Tracking_Dynamic_Product_Views_with_Google_Analytics\" title=\"Example: Tracking Dynamic Product Views with Google Analytics\">Example: Tracking Dynamic Product Views with Google Analytics<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#5_Track_AJAX_Content_Loads\" title=\"5. Track AJAX Content Loads\">5. Track AJAX Content Loads<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#6_Track_Form_Changes\" title=\"6. Track Form Changes\">6. Track Form Changes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#7_Testing_and_Debugging\" title=\"7. Testing and Debugging\">7. Testing and Debugging<\/a><\/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-track-dynamic-content-with-google-tag-manager-2\/#8_Publish_Your_Changes\" title=\"8. Publish Your Changes\">8. Publish Your Changes<\/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-track-dynamic-content-with-google-tag-manager-2\/#Conclusion\" title=\"Conclusion\">Conclusion<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"1_Identify_the_Dynamic_Content_on_Your_Site\"><\/span>1. <strong>Identify the Dynamic Content on Your Site<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The first step is to identify the dynamic content you want to track. This content could be anything that changes after the initial page load, such as:<\/p>\n<ul>\n<li>New products added to the shopping cart.<\/li>\n<li>Content revealed after user actions (like clicking a button to load more items).<\/li>\n<li>Data loaded from AJAX requests (such as search results, filtering, or pagination).<\/li>\n<li>Form fields that dynamically change based on user inputs.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"2_Use_Data_Layer_Variables_for_Dynamic_Content\"><\/span>2. <strong>Use Data Layer Variables for Dynamic Content<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Google Tag Manager relies on the <strong>Data Layer<\/strong> to pass information about events or changes in the page. Dynamic content can be tracked by pushing updates into the Data Layer.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"How_to_Push_Dynamic_Data_to_the_Data_Layer\"><\/span>How to Push Dynamic Data to the Data Layer:<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><strong>Modify the Website\u2019s JavaScript<\/strong>: To capture dynamic content, you\u2019ll need to modify the website\u2019s JavaScript or use built-in GTM triggers to push dynamic data into the Data Layer when specific actions or content changes happen. This is often done when content is dynamically loaded or updated on the page.\n<p>Example JavaScript code for pushing data to the Data Layer:<\/p>\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 select-none\">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 select-none 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-variable language_\">window<\/span>.<span class=\"hljs-property\">dataLayer<\/span> = <span class=\"hljs-variable language_\">window<\/span>.<span class=\"hljs-property\">dataLayer<\/span> || [];<br \/>\n<span class=\"hljs-variable language_\">window<\/span>.<span class=\"hljs-property\">dataLayer<\/span>.<span class=\"hljs-title function_\">push<\/span>({<br \/>\n  <span class=\"hljs-attr\">event<\/span>: <span class=\"hljs-string\">'dynamicContentLoaded'<\/span>,<br \/>\n  <span class=\"hljs-attr\">contentType<\/span>: <span class=\"hljs-string\">'product'<\/span>,<br \/>\n  <span class=\"hljs-attr\">contentId<\/span>: <span class=\"hljs-string\">'1234'<\/span>, <span class=\"hljs-comment\">\/\/ Unique identifier for the content<\/span><br \/>\n  <span class=\"hljs-attr\">contentName<\/span>: <span class=\"hljs-string\">'Product ABC'<\/span><br \/>\n});<br \/>\n<\/code><\/div>\n<\/div>\n<p>In this example:<\/p>\n<ul>\n<li><code>event<\/code>: The event name that can be used as a trigger.<\/li>\n<li><code>contentType<\/code>, <code>contentId<\/code>, and <code>contentName<\/code>: Dynamic data that gets pushed into the Data Layer when content changes.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Verify Data Layer Pushes<\/strong>: Open the browser&#8217;s <strong>Developer Tools<\/strong> (press <code>F12<\/code> in Chrome or <code>Cmd+Option+I<\/code> in Mac) and navigate to the <strong>Console<\/strong> tab. Check the <code>window.dataLayer<\/code> to confirm that the dynamic data is pushed correctly:\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 select-none\">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 select-none 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-variable language_\">console<\/span>.<span class=\"hljs-title function_\">log<\/span>(<span class=\"hljs-variable language_\">window<\/span>.<span class=\"hljs-property\">dataLayer<\/span>);<br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"3_Set_Up_Triggers_in_Google_Tag_Manager\"><\/span>3. <strong>Set Up Triggers in Google Tag Manager<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>To track the dynamic content, you will need to set up <strong>triggers<\/strong> in Google Tag Manager that will activate tags based on the event or changes pushed to the Data Layer.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Example_of_Event-based_Trigger_for_Dynamic_Content\"><\/span>Example of Event-based Trigger for Dynamic Content:<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><strong>Create a Trigger for the Dynamic Content<\/strong>:\n<ul>\n<li>Go to <strong>Triggers<\/strong> in GTM and click <strong>New<\/strong>.<\/li>\n<li>Choose <strong>Custom Event<\/strong> as the trigger type.<\/li>\n<li>Set the <strong>Event Name<\/strong> to match the event name used in the Data Layer push (<code>dynamicContentLoaded<\/code> in this case).<\/li>\n<\/ul>\n<\/li>\n<li><strong>Configure Trigger Settings<\/strong>:\n<ul>\n<li>You can use additional filters to ensure the trigger only fires when specific dynamic content is loaded. For instance, if you&#8217;re tracking a product, you can add conditions like <code>contentType<\/code> equals <code>'product'<\/code> or <code>contentId<\/code> matches a specific value.<\/li>\n<\/ul>\n<p>Example:<\/p>\n<ul>\n<li>Trigger Type: <strong>Custom Event<\/strong><\/li>\n<li>Event Name: <code>dynamicContentLoaded<\/code><\/li>\n<li>Fire On: All Custom Events (or only those with specific conditions like <code>contentType = 'product'<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"4_Configure_Tags_for_Dynamic_Content_Tracking\"><\/span>4. <strong>Configure Tags for Dynamic Content Tracking<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once you have your trigger set up, the next step is to create tags that will fire when dynamic content is loaded.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Example_Tracking_Dynamic_Product_Views_with_Google_Analytics\"><\/span>Example: Tracking Dynamic Product Views with Google Analytics<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li><strong>Create a Tag for Google Analytics (GA4)<\/strong>:\n<ul>\n<li>Go to <strong>Tags<\/strong> in GTM and click <strong>New<\/strong>.<\/li>\n<li>Choose <strong>Google Analytics: GA4 Event<\/strong> (for GA4 tracking) or <strong>Universal Analytics<\/strong> (for UA tracking).<\/li>\n<li>For GA4, configure the event to track, e.g., <strong>view_item<\/strong> for product views.\n<ul>\n<li>Event Name: <code>view_item<\/code><\/li>\n<li>Event Parameters:\n<ul>\n<li><code>content_type: product<\/code><\/li>\n<li><code>content_id: {{contentId}}<\/code><\/li>\n<li><code>content_name: {{contentName}}<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>For the <strong>Universal Analytics<\/strong> tag, you would use the <strong>Track Type: Event<\/strong> and configure it as:<\/p>\n<ul>\n<li>Category: <code>Content<\/code><\/li>\n<li>Action: <code>Dynamic Content Loaded<\/code><\/li>\n<li>Label: <code>{{contentName}}<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Link the Trigger to the Tag<\/strong>:\n<ul>\n<li>In the tag setup, link the trigger you created earlier (e.g., <strong>dynamicContentLoaded<\/strong> trigger).<\/li>\n<li>Ensure the tag fires when the specified event occurs in the Data Layer.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Test Your Tag<\/strong>:\n<ul>\n<li>Use <strong>GTM Preview Mode<\/strong> to test whether the tag fires when the dynamic content is updated.<\/li>\n<li>Ensure the correct event and parameters are passed to Google Analytics (or other tools you&#8217;re using).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"5_Track_AJAX_Content_Loads\"><\/span>5. <strong>Track AJAX Content Loads<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>AJAX is commonly used for loading content dynamically without refreshing the page. To track AJAX content loads:<\/p>\n<ol>\n<li><strong>Identify AJAX Events<\/strong>: If your site uses AJAX to load content (e.g., new search results or product recommendations), identify the specific event when the content is updated. This could involve listening to JavaScript events like <code>ajaxComplete<\/code>, <code>load<\/code>, or custom events triggered by your site&#8217;s scripts.<\/li>\n<li><strong>Push AJAX Data into the Data Layer<\/strong>: As with other dynamic content, use the JavaScript code to push data to the Data Layer whenever new AJAX content is loaded:\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 select-none\">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 select-none 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-variable language_\">document<\/span>).<span class=\"hljs-title function_\">ajaxComplete<\/span>(<span class=\"hljs-keyword\">function<\/span>(<span class=\"hljs-params\">event, xhr, settings<\/span>) {<br \/>\n  <span class=\"hljs-variable language_\">window<\/span>.<span class=\"hljs-property\">dataLayer<\/span>.<span class=\"hljs-title function_\">push<\/span>({<br \/>\n    <span class=\"hljs-attr\">event<\/span>: <span class=\"hljs-string\">'dynamicAJAXContentLoaded'<\/span>,<br \/>\n    <span class=\"hljs-attr\">ajaxData<\/span>: xhr.<span class=\"hljs-property\">responseText<\/span><br \/>\n  });<br \/>\n});<br \/>\n<\/code><\/div>\n<\/div>\n<\/li>\n<li><strong>Create Triggers for AJAX<\/strong>: Set up custom event triggers in GTM to listen for <code>dynamicAJAXContentLoaded<\/code> events or any other event you\u2019ve pushed to the Data Layer.<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"6_Track_Form_Changes\"><\/span>6. <strong>Track Form Changes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Form fields that change dynamically can also be tracked with GTM. For example, if users select options that dynamically change the available choices or pricing on a form:<\/p>\n<ol>\n<li><strong>Track Dynamic Form Changes<\/strong>: Use a <strong>Form Submission<\/strong> or <strong>Element Visibility<\/strong> trigger to detect when certain form fields change.\n<ul>\n<li>You may need to set up custom JavaScript to listen for form field changes, especially if they happen without a page reload.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Create Variables for Form Data<\/strong>: You can capture form field values dynamically by creating <strong>Auto-Event Variables<\/strong> or <strong>Custom JavaScript Variables<\/strong> in GTM. This will allow you to track user inputs and changes to the form as the user interacts with the page.<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"7_Testing_and_Debugging\"><\/span>7. <strong>Testing and Debugging<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Before going live, always test your setup thoroughly:<\/p>\n<ul>\n<li><strong>Use GTM\u2019s Preview Mode<\/strong>: This allows you to see whether tags are firing when dynamic content is loaded or updated.<\/li>\n<li><strong>Use the Developer Console<\/strong>: Check the Data Layer for the dynamic content data and ensure it&#8217;s being passed correctly.<\/li>\n<li><strong>Google Analytics Debugging<\/strong>: Use Google Analytics Debugger (for Universal Analytics) or the <strong>GA4 DebugView<\/strong> to verify that events are being sent correctly.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"8_Publish_Your_Changes\"><\/span>8. <strong>Publish Your Changes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Once everything is set up and tested:<\/p>\n<ul>\n<li><strong>Publish<\/strong> your container in GTM to push the changes live.<\/li>\n<li>Regularly monitor the dynamic content tracking in your analytics tool to ensure data accuracy.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusion<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tracking dynamic content with <strong>Google Tag Manager<\/strong> is a powerful way to measure user interactions and behaviors that happen without full page reloads. By utilizing the Data Layer, triggers, and tags, you can effectively track events such as AJAX loads, dynamic form changes, or content added to a shopping cart. Proper testing and debugging are essential to ensure that the tags fire as expected, and once everything is set up correctly, it provides valuable insights into user engagement with dynamic content.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tracking dynamic content with Google Tag Manager (GTM) involves capturing changes on a website or app that occur without a full page reload, often driven&#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-10513","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 track dynamic content 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-track-dynamic-content-with-google-tag-manager-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to track dynamic content with Google Tag Manager - CEOweb Ltd. Blog\" \/>\n<meta property=\"og:description\" content=\"Tracking dynamic content with Google Tag Manager (GTM) involves capturing changes on a website or app that occur without a full page reload, often driven...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/\" \/>\n<meta property=\"og:site_name\" content=\"CEOweb Ltd. Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-11T22:58:40+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\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/\",\"url\":\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/\",\"name\":\"How to track dynamic content with Google Tag Manager - CEOweb Ltd. Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ceowebltd.com\/blog\/#website\"},\"datePublished\":\"2024-11-11T22:58:40+00:00\",\"dateModified\":\"2024-11-11T22:58:40+00:00\",\"author\":{\"@id\":\"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/4759c204c0b0f1d134ec16e8ec777a6f\"},\"breadcrumb\":{\"@id\":\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ceowebltd.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to track dynamic content 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 track dynamic content 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-track-dynamic-content-with-google-tag-manager-2\/","og_locale":"en_US","og_type":"article","og_title":"How to track dynamic content with Google Tag Manager - CEOweb Ltd. Blog","og_description":"Tracking dynamic content with Google Tag Manager (GTM) involves capturing changes on a website or app that occur without a full page reload, often driven...","og_url":"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/","og_site_name":"CEOweb Ltd. Blog","article_published_time":"2024-11-11T22:58:40+00:00","author":"Emmanuel","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Emmanuel","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/","url":"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/","name":"How to track dynamic content with Google Tag Manager - CEOweb Ltd. Blog","isPartOf":{"@id":"https:\/\/ceowebltd.com\/blog\/#website"},"datePublished":"2024-11-11T22:58:40+00:00","dateModified":"2024-11-11T22:58:40+00:00","author":{"@id":"https:\/\/ceowebltd.com\/blog\/#\/schema\/person\/4759c204c0b0f1d134ec16e8ec777a6f"},"breadcrumb":{"@id":"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ceowebltd.com\/blog\/how-to-track-dynamic-content-with-google-tag-manager-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ceowebltd.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to track dynamic content 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\/10513","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=10513"}],"version-history":[{"count":1,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/posts\/10513\/revisions"}],"predecessor-version":[{"id":10514,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/posts\/10513\/revisions\/10514"}],"wp:attachment":[{"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/media?parent=10513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/categories?post=10513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ceowebltd.com\/blog\/wp-json\/wp\/v2\/tags?post=10513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}