如何使用 Google Tag Manager 和 Google Analytics 設置表單跟踪分析
已發表: 2022-04-12轉化率是衡量營銷效率的最簡單同時也是最重要的衡量標準之一。 它顯示有多少用戶完成了目標操作:購買、註冊電子郵件、請求電話等。為了記錄和分析電子商務銷售,我們有 Google Analytics,它相對容易配置。 然而,需要更多的努力來跟踪網站上提交的表單。
這是因為表單碰巧屬於不同的類型,並且使用不同的技術將數據發送到服務器。 數據發送成功後,會更新一些表單字段。 其他顯示一個彈出窗口。 第三種類型將用戶重定向到感謝頁面。 表單跟踪的方法取決於所使用的技術。
在本文中,我們將告訴您如何以不同的方式收集表單數據並將其傳輸到 Google Analytics。
目錄
- 方法 1. 單獨的感謝頁面
- 方法 2. 在 Google Tag Manager 中提交表單觸發器
- 步驟 1. 激活表單變量
- 步驟 2. 調整觸發器
- Step 3. 檢查觸發器是否有效
- 步驟 4. 創建標籤
- 第 5 步。在 Google Analytics(分析)中設置您的目標
- 方法 3. Google Tag Manager 中的元素可用性觸發器
- 方法 4. 跟踪使用 AJAX 的表單
- 第 1 步。創建標籤以檢查表單的工作方式
- 步驟 2. 創建數據層變量
- 步驟 3. 創建觸發器
- 方法 5. DataLayer 事件作為觸發器
- 用戶填寫表單的時間
方法 1. 單獨的感謝頁面
如果用戶在完成表單後被重定向到具有不同 URL 的單獨頁面,則跟踪對該 URL 的訪問是跟踪表單提交的最簡單方法。 在 Google Analytics 中創建一個類型為“Landing Page”的目標就足夠了。
假設您要跟踪網絡研討會的註冊情況。 註冊成功後的感謝頁面如下所示:https://www.site.com/registration/thankyou
在管理面板的View Settings中的 Targets 下,點擊Target,然後點擊Custom 。 指定目標名稱,選擇目標類型,輸入感謝頁面地址:

需要考慮的重要事項:感謝頁面的 URL 應該是唯一的——也就是說,網站上應該只有一個頁面具有這樣的地址,並且用戶應該無法在不填寫表格的情況下訪問該頁面。 否則,Google Analytics(分析)可能會記錄有關您實現目標的不准確數據。


最佳 OWOX BI 營銷案例
下載方法 2. 在 Google Tag Manager 中提交表單觸發器
如果您的程序員通過提交按鈕正確配置了表單的數據傳輸,那麼對於表單跟踪提交,您可以使用內置的 Google 跟踪代碼管理器觸發器。 從網上的評論來看,這種情況很少遇到,但值得一試。
使用此方法,當用戶填寫並發送表單時,觸發器會向 dataLayer 數組發送 gtm.formSubmit 事件。
注意:在進入設置之前,請確保在 Google 跟踪代碼管理器中為網站上的所有頁面啟用了頁面瀏覽標記。
步驟 1. 激活表單變量
為此,在 GTM 中打開變量菜單,單擊配置,然後選擇表單部分中的所有變量:

步驟 2. 調整觸發器
您需要一個表單 ID 或表單類屬性來創建觸發器。 您可以通過右鍵單擊表單並單擊 Firefox 中的瀏覽項目或 Chrome 中的查看代碼來在 HTML 代碼中查看它們:

在我們的示例中,表單 id 是 send-request-form,我們將在配置觸發器時使用它。
轉到Triggers菜單,單擊New ,打開Trigger Settings ,然後選擇Submit Form :

在打開的窗口中,您會看到兩個複選框:
等待標籤- 如果啟用此選項,則在與其關聯的所有標籤都被激活或您指定的時間到期之前,不會發送表單。
檢查驗證- 最好啟用此選項。 否則,即使用戶沒有填寫必填字段,觸發器也會觸發。
激活錯誤檢查後,會出現其他設置。 如果您啟用觸發器,請指定包含您的表單的頁面的 URL。 如果您激活觸發器,請指定我們上面提到的表單 ID:

為觸發器想一個方便且易於理解的名稱,例如提交請求,然後保存。
Step 3. 檢查觸發器是否有效
在容器中發布更改之前,請使用 Google 跟踪代碼管理器中的預覽模式。 打開包含表單的頁面,填寫並點擊發送。 在調試控制台中,應該會出現一個 gtm.formSubmit 事件。

如果此事件未出現,則此跟踪方法將不適合您。 在這種情況下,請嘗試本文中描述的其他方法之一。
如果事件確實出現了,還需要再進行一次測試,以檢查觸發器是否正常工作。 打開一個表格,將一些必填字段留空,然後提交表格。 如果 gtm.formSubmit 事件再次出現在調試控制台中,則內置觸發器無法正常工作,無法幫助您。 如果事件沒有轉移,那就太好了! 轉到下一步。
步驟 4. 創建標籤
現在您需要創建一個標籤,該標籤將向 Google Analytics 發送表單已發送的信息。 為此,請轉到標籤菜單,單擊新建,打開標籤配置,然後選擇Google Analytics - Universal Analytics。
為清楚起見,您可以將標籤命名為與觸發器相同的名稱。 接下來,填寫以下字段:
- 標記類型 - 選擇 {{Google Analytics Settings}}
- 曲目類型 - 選擇“事件”
- 類別——為了方便起見,與標籤和触發器相同
- 行動 - 發送
- 標籤 - 例如,{{Form ID}})
- 非交互——留下“假”
如果要激活標籤,請選擇您在步驟 3 中創建的觸發器,然後單擊Save :

準備好了! 在使用 Google Tag Manager 預覽模式或使用 Google Analytics 中的實時事件報告提交表單時,您可以檢查生成的標籤是如何工作的。
第 5 步。在 Google Analytics(分析)中設置您的目標
發布包含更改的容器後,您需要在 Google Analytics(分析)中設置目標以將提交表單視為轉化。 為此,請在 Google Analytics(分析)視圖設置中添加您自己的新目標。 就像您在 Google 跟踪代碼管理器中配置代碼一樣,選擇事件類型並填寫類別、操作和快捷方式字段:

保存目標。 完畢。 您已設置表單跟踪,而無需更改您網站上的任何代碼!
方法 3. Google Tag Manager 中的元素可用性觸發器
如果在發送表單後網站上彈出一個窗口並顯示感謝或有關成功提交的消息,您可以嘗試另一個內置的 GTM 觸發器。 它在屏幕上出現特定項目時觸發(在我們的例子中是一個彈出窗口),並將 gtm.elementVisibility 事件分派給 dataLayer。
要配置此觸發器,您必須知道被監控項的 CSS 選擇器。 要查找此選擇器,請右鍵單擊窗口並選擇查看代碼。 您正在尋找以下行:

要復制 CSS 選擇器,請右鍵單擊該行並選擇複製 - 複製選擇器:

在我們的示例中,選擇器如下所示:#webinar_marketing_automation > div。
然後通過選擇Element Visibility類型創建一個新觸發器:

填寫以下字段:
- 觸發器名稱 - 例如,“獲取網絡研討會記錄”
- 選擇方法——CSS選擇器
- 元素選擇器 - 插入您從彈出窗口的 HTML 代碼中復制的值。
- 觸發規則 – 如果頁面上有一個表單,請保留“每頁一次”選項。 如果有多個表單並彈出一條消息,您可以選擇“每個元素一次”。

- 然後選中“註冊 DOM 更改”框。
- 觸發激活條件——通過選擇“一些可見性事件”,您可以指定彈出消息或文本出現的頁面。
- 保存觸發器。

創建元素可用性觸發器後,您必須調整方法 2 中詳細描述的相同設置:
- 向 GTM 添加一個新標籤,它將表單提交數據發送到 Google Analytics 並將創建的觸發器附加到它。
- 提交表單時預覽標籤的工作方式。
- 在 Google Analytics 中,設置事件目標以跟踪轉化。
方法 4. 跟踪使用 AJAX 的表單
如果您網站上的表單使用 AJAX 技術,則數據會在後台從瀏覽器傳輸到服務器,並且頁面不會重新加載。 要配置 AJAX 表單提交的跟踪,您可以使用 Lunametrics 中的此腳本:
<script id="gtm-jq-ajax-listen" type="text/javascript"> (function() { 'use strict' var $; var n = 0; init(); function init(n) { // Ensure jQuery is available before anything if (typeof jQuery !== 'undefined') { // Define our $ shortcut locally $ = jQuery; bindToAjax(); // Check for up to 10 seconds } else if (n < 20) { n++; setTimeout(init, 500); } } function bindToAjax() { $(document).bind('ajaxComplete', function(evt, jqXhr, opts) { // Create a fake element for magically simple URL parsing var fullUrl = document.createElement('a'); fullUrl.href = opts.url; // IE9+ strips the leading slash from a.pathname because who wants to get home on time on Friday anyways var pathname = fullUrl.pathname[0] === '/' ? fullUrl.pathname : '/' + fullUrl.pathname; // Manually remove the leading question mark, if there is one var queryString = fullUrl.search[0] === '?' ? fullUrl.search.slice(1) : fullUrl.search; // Turn params and headers into objects for easier reference var queryParameters = objMap(queryString, '&', '=', true); var headers = objMap(jqXhr.getAllResponseHeaders(), '\n', ':'); // Blindly push to the dataLayer because this fires within GTM dataLayer.push({ 'event': 'ajaxComplete', 'attributes': { // Return empty strings to prevent accidental inheritance of old data 'type': opts.type || '', 'url': fullUrl.href || '', 'queryParameters': queryParameters, 'pathname': pathname || '', 'hostname': fullUrl.hostname || '', 'protocol': fullUrl.protocol || '', 'fragment': fullUrl.hash || '', 'statusCode': jqXhr.status || '', 'statusText': jqXhr.statusText || '', 'headers': headers, 'timestamp': evt.timeStamp || '', 'contentType': opts.contentType || '', // Defer to jQuery's handling of the response 'response': (jqXhr.responseJSON || jqXhr.responseXML || jqXhr.responseText || '') } }); }); } function objMap(data, delim, spl, decode) { var obj = {}; // If one of our parameters is missing, return an empty object if (!data || !delim || !spl) { return {}; } var arr = data.split(delim); var i; if (arr) { for (i = 0; i < arr.length; i++) { // If the decode flag is present, URL decode the set var item = decode ? decodeURIComponent(arr[i]) : arr[i]; var pair = item.split(spl); var key = trim_(pair[0]); var value = trim_(pair[1]); if (key && value) { obj[key] = value; } } } return obj; } // Basic .trim() polyfill function trim_(str) { if (str) { return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } } })(); /* * v0.1.0 * Created by the Google Analytics consultants at http://lunametrics15.staging.wpengine.com * Written by @notdanwilkerson * Documentation: http://lunametrics15.staging.wpengine.com/blog/2015/08/27/ajax-event-listener-google-tag-manager/ * Licensed under the Creative Commons 4.0 Attribution Public License */ </script>
<script id="gtm-jq-ajax-listen" type="text/javascript"> (function() { 'use strict' var $; var n = 0; init(); function init(n) { // Ensure jQuery is available before anything if (typeof jQuery !== 'undefined') { // Define our $ shortcut locally $ = jQuery; bindToAjax(); // Check for up to 10 seconds } else if (n < 20) { n++; setTimeout(init, 500); } } function bindToAjax() { $(document).bind('ajaxComplete', function(evt, jqXhr, opts) { // Create a fake element for magically simple URL parsing var fullUrl = document.createElement('a'); fullUrl.href = opts.url; // IE9+ strips the leading slash from a.pathname because who wants to get home on time on Friday anyways var pathname = fullUrl.pathname[0] === '/' ? fullUrl.pathname : '/' + fullUrl.pathname; // Manually remove the leading question mark, if there is one var queryString = fullUrl.search[0] === '?' ? fullUrl.search.slice(1) : fullUrl.search; // Turn params and headers into objects for easier reference var queryParameters = objMap(queryString, '&', '=', true); var headers = objMap(jqXhr.getAllResponseHeaders(), '\n', ':'); // Blindly push to the dataLayer because this fires within GTM dataLayer.push({ 'event': 'ajaxComplete', 'attributes': { // Return empty strings to prevent accidental inheritance of old data 'type': opts.type || '', 'url': fullUrl.href || '', 'queryParameters': queryParameters, 'pathname': pathname || '', 'hostname': fullUrl.hostname || '', 'protocol': fullUrl.protocol || '', 'fragment': fullUrl.hash || '', 'statusCode': jqXhr.status || '', 'statusText': jqXhr.statusText || '', 'headers': headers, 'timestamp': evt.timeStamp || '', 'contentType': opts.contentType || '', // Defer to jQuery's handling of the response 'response': (jqXhr.responseJSON || jqXhr.responseXML || jqXhr.responseText || '') } }); }); } function objMap(data, delim, spl, decode) { var obj = {}; // If one of our parameters is missing, return an empty object if (!data || !delim || !spl) { return {}; } var arr = data.split(delim); var i; if (arr) { for (i = 0; i < arr.length; i++) { // If the decode flag is present, URL decode the set var item = decode ? decodeURIComponent(arr[i]) : arr[i]; var pair = item.split(spl); var key = trim_(pair[0]); var value = trim_(pair[1]); if (key && value) { obj[key] = value; } } } return obj; } // Basic .trim() polyfill function trim_(str) { if (str) { return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } } })(); /* * v0.1.0 * Created by the Google Analytics consultants at http://lunametrics15.staging.wpengine.com * Written by @notdanwilkerson * Documentation: http://lunametrics15.staging.wpengine.com/blog/2015/08/27/ajax-event-listener-google-tag-manager/ * Licensed under the Creative Commons 4.0 Attribution Public License */ </script>
此代碼檢查您的表單是否真的使用 AJAX,然後在 Google 跟踪代碼管理器中創建變量和触發器。

第 1 步。創建標籤以檢查表單的工作方式
在 Google Tag Manager 中,打開Tags ,點擊New ,點擊Tag Configuration ,然後選擇Custom HTML 。 複製上面的代碼並將其粘貼到文本框中。 將所有頁面指定為觸發器:

然後開啟GTM預覽,打開表單頁面,填寫表單,提交。

如果在調試控制台中出現 ajaxComplete 事件(如上面的屏幕截圖所示),那麼您的表單使用 AJAX,並且這種跟踪方法適合您。 在這種情況下,請進一步閱讀。
步驟 2. 創建數據層變量
如果您在預覽控制台中單擊 ajaxComplete 事件,然後打開 Data Layer 選項卡,您將看到在提交表單後將哪些信息傳遞到數據層數組。
我們對此代碼中的響應行感興趣; 它包含說明表單已成功提交的文本:

此行可用於在 Google 跟踪代碼管理器中創建變量和触發器。 在 GTM 中打開變量部分,單擊創建,然後在變量配置屏幕上,選擇數據層變量。 在 Data Layer Variable Name 字段中,寫入 attributes.response(可以將兩個變量命名為相同的東西)並保存設置。

為什麼輸入attributes.response而不是response ? 因為 attributes 是一個包含響應鍵及其值的對象。 通過這樣做,我們將 GTM 指向我們感興趣的數據的確切路徑。
創建變量後,需要對其進行檢查。 為此,請在預覽模式下提交表單。 單擊 ajaxComplete 事件並在 Google 跟踪代碼管理器中打開變量選項卡。 如果您看到 attributes.response 變量和有關成功發送表單的文本,則表示您已正確配置所有內容。
步驟 3. 創建觸發器
在觸發器配置部分中,單擊創建,然後單擊觸發器配置並選擇用戶事件類型。 在事件名稱字段中指定 ajaxComplete。 然後作為激活觸發器的條件,選擇一些自定義事件並註冊一個條件: attributes.response變量包含{輸入您的自定義文本關於成功發送表單}。

之後,剩下的就是:
- 向 GTM 添加新的事件跟踪代碼,將表單提交信息發送到 Google Analytics 並將創建的觸發器附加到它。
- 在提交表單時使用預覽模式檢查標籤的工作方式。
- 設置事件目標以跟踪 Google Analytics 中的轉化。
我們在上面的方法 2. 在 Google 跟踪代碼管理器中發送表單觸發器部分詳細描述了這些設置。
方法 5. DataLayer 事件作為觸發器
在我們看來,使用 dataLayer .push 方法跟踪表單是最可靠和通用的解決方案。 唯一的缺點是,如果您不了解代碼,則需要開發人員的幫助。
為開發人員準備技術規範
成功提交表單後,在dataLayer中列出您要傳輸的設置。 要求您的開發人員將此代碼添加到您要監視的表單的所有頁面:
數據層.push({
'事件':'表格',
“變量”:“值”
})
在哪裡:
- 事件是事件的名稱。 您可以將其替換為您方便的任何活動。
- 變量是您要與事件一起傳輸的所有變量的集合。
在您的程序員為所有表單配置 dataLayer.push 方法後,您可以檢查它是如何工作的。 為此,請在 Google 跟踪代碼管理器中包含預覽並在您的網站上填寫表格。 在調試控制台中,應該有一個新事件(在我們的示例中,它稱為 OWOX)。 單擊事件並轉到 dataLayer 選項卡時,您將看到傳輸到數據數組的所有參數:

在上面截圖中的事件示例中(從博客下載 PDF 文件),我們考慮如何使用 GTM 配置跟踪。
首先,創建所有必需的用戶變量:eventCategory、eventAction、eventLabel 等。然後在 User-Defined Variables 部分選擇變量類型並在大括號中輸入變量名稱:{{eventCategory}}:

接下來,創建自定義事件類型的觸發器。 在設置中,指定事件名稱並將觸發器設置為在所有自定義事件上觸發:

然後創建一個將事件轉發到 Google Analytics 的標籤。 將標籤類型設置為 Google Analytics – Universal Analytics,並將跟踪類型設置為事件。
此外,填寫以下字段:
- 類別 – {{eventCategory}}
- 動作 - {{eventAction}}
- 標籤 - {{eventLabel}}
接下來,選擇一個變量 {{Google Analytics settings}} 和您在上一步中創建的觸發器:

全部都準備好了。 剩下的就是檢查標籤是否在 GTM 預覽模式和實時谷歌分析報告中工作。
用戶填寫表單的時間
現在您可以了解有多少用戶已成功完成表單,這將有助於了解未完成表單的用戶遇到了哪些問題。
您的開發人員需要將表單分析所需的所有參數的名稱和值添加到 dataLayer。 這將幫助您跟踪:
- 從頁面打開到字段激活的時間
- 從場激活到場停用的時間
- 從第一個字段激活到第一次提交表單的時間
- 從激活第一個字段到成功提交表單的時間
- 從第一個字段激活到表單提交失敗的時間
- 是時候從服務器獲得關於成功提交表單的響應了
- 是時候從服務器獲取有關未成功提交表單的響應了
- 從表單激活到用戶離開表單(未成功提交)的時間
一旦您在 Google Analytics 中設置了這些數據的收集,您就可以將該數據導入 Google BigQuery——例如,使用 OWOX BI。 然後,您可以使用免費的 OWOX BI BigQuery 報告插件在 Google 表格中構建任何表單分析報告。
這些報告將幫助您發現和解決表單可用性方面的問題,從而提高您的轉化率。
以下是此類報告的一些示例以及他們可以回答的問題:
1. 用戶在與哪些表單域交互時最常遇到錯誤?

2. 用戶填寫表單需要多長時間?

3. 用戶填寫表單的時間是多少,取決於什麼?

PS 如果您需要幫助設置表單分析和為您的業務創建自定義指標系統,請發送電子郵件至[email protected] 或填寫 OWOX 網站上的聯繫表。