如何將「DOM 元素」變數抓取的值,由「字串」轉變成「數字」?

在之前的「DOM 元素」變數文章中,我們深入探討了「DOM 元素」變數的應用,尤其是在面對網站資料層或 Cookie 缺乏可用資訊的情境下。我們詳細介紹了如何利用「DOM 元素」變數來提取網頁中的關鍵信息,例如訂單編號和訂單金額。

(若尚未閱讀過該篇文章,我們建議你先行翻閱,以便對接下來的內容有更深入的理解和順暢的閱讀體驗。)

要注意的是「DOM 元素」變數所抓取的數據,是以「字串(string)」的格式儲存,當我們將這些字串放入 GA4 的「purchase」事件的 value 參數時,如果不事先轉換,GA4 電子商務報表或是事件報表中的「purchase」會顯示總收益維度為 0。

這是因為 GA4 中的 value 參數只能接受「數字(number)」格式,若直接用「DOM 元素」變數中的「字串」格式,GA4 將無法識別。

欲了解更多 purchase 事件參數,請參閱官方文件

因此,我們下一步是將「DOM 元素」變數中的「字串(String)」值轉換為「數字(number)」



將「DOM 元素」變數的值轉成「數字(number)」

(接下來的內容將會延續上一篇文章「GTM 變數介紹:DOM 元素」的設定,就不再詳列變數的設定方式)

我們需要編寫一段 JavaScript,將「DOM 元素」變數的「字串」格式轉為「數字」格式,這可以透過 GTM 的「自訂 JavaScript」變數完成。

設定「自訂 JavaScript」變數

GTM 左側面版選擇「變數」> 下方「使用者定義的變數區塊」 > 右上角「新增」 > 選擇變數類型「自訂 JavaScript」

將以下的 JavaScript 代碼複製並貼上。這段代碼的功能是將「DOM 元素」變數「DomV – Order_total_price」中的數據處理成純數字格式。它會移除金錢符號,只保留數字、小數點和負號,然後將處理後的字串轉換成數字。

在代碼中標記為粗體紅字的部分是你的「DOM 元素」變數名稱,請根據實際情況進行替換。

function() {
  // 檢查變數是否存在
  if (typeof {{DomV - Order_total_price}} !== 'undefined' && {{DomV - Order_total_price}} !== null) {
    // 使用正則表達式保留數字、小數點和負號
    var cleanedValue = String({{DomV - Order_total_price}}).replace(/[^0-9.-]/g, '');

    // 將清理後的值轉換為數字
    var numberValue = parseFloat(cleanedValue);

    // 檢查是否成功轉換,如果成功,返回數字值;否則,返回 null
    return isNaN(numberValue) ? null : numberValue;
  } else {
    // 如果變數不存在,返回 null
    return null;
  }
}

設定好「自訂 JavaScript」變數後,其介面將顯示如下圖所示。給這個變數命名為「CJS – Remove Dollar Sign and Convert to Number」,以便於識別。

(在命名變數時,沒有特定的規則,主要是確保名稱清晰易懂。)

如果對這段 JavaScript 代碼不太熟悉,沒有關係,直接複製貼上就可以。

重要的是,在將任何從網路上找到的代碼應用到網站之前,建議讓公司技術團隊先進行審核。這樣可以確保代碼不會對網站功能造成不良影響。這一建議同樣適用於我們目前提供的代碼範例。

檢查變數是否正確運作

設定完畢之後,在 GTM 預覽模式下,完成一次購買並進入訂單確認頁面,以確認「自訂 JavaScript」變數「CJS – Remove Dollar sign and convert to number」是否成功將「DOM 元素」變數的「字串」轉換為「數字」格式。

到目前為止我們做了什麼?

讓我們回顧一下到目前為止的步驟。

  1. 為了獲取訂單完成頁面的訂單價值,我們使用了「DOM 元素」變數來抓取網頁上的數據,並將其用於 GA4 的「purchase」事件的「value」參數。(有關事件參數的詳細規範,請參考官方文件
  2. 由於「DOM 元素」變數抓取的數據以「字串」格式儲存,而 GA4 的 value 參數需要「數字」格式,我們因此將一段 JavaScript 代碼放入「自訂 JavaScript」變數中,以將這些數據從字串轉換為數字。
  3. 在 GTM 的預覽模式下,我們檢查了「自訂 JavaScript」變數是否成功地在訂單完成頁面上將「DOM 元素」變數從字串轉換為數字。

確認無誤後,我們便可將此變數應用於「purchase」事件的「value」參數。


將變數放入「purchase」事件參數中

GTM 左側面板選擇「代碼」 > 右上角「新增」> 代碼類型選擇「Google Analytis(分析)」 > 「Google Analytis(分析) :GA4 事件」>

在 GA4 事件設定畫面,請按照以下指示填寫欄位(參見下圖):

「事件名稱」欄位中輸入「purchase」。請注意,這是 GA4 的一個預設事件,所以大小寫必須完全一致。

「事件參數」欄位中選擇「value」,並將其值設定為我們剛建立的「自訂 JavaScript」變數「CJS – Remove Dollar Sign and Convert to Number」

記得,如果你的 purchase 事件包含 value 參數,你也需要設定相對應的 currency 參數,否則 GA4 將無法正確計算收益。

設定完後,使用 GTM 的預覽模式和 GA4 Debug View 來檢查。這樣可以確認代碼是否正常運作並正確傳送參數,同時確保 GA4 也收到了正確的數值。

在 GA4 Debug View 裡,你可以看到 purchase 事件的 value 參數顯示為 55,正如我們所預期的那樣,沒有金錢符號。

當一切都確定沒問題後,別忘了回到 GTM,提交你的設定,這樣才會開始追蹤使用者在網站上的購買事件。


直接用「自訂 JavaScript」變數

在前面的步驟中,我們首先設定了「DOM 元素」變數,然後使用「自訂 JavaScript」變數來將該變數的值轉換成數字,去除了數字、小數點和負號的文字部分,使其變成純數字。

實際上,我們可以直接使用「自訂 JavaScript」變數完成這個操作。

為什麼這樣說呢?讓我們繼續往下看。

設定「自訂 JavaScript」變數

一樣來到「自訂 JavaScript」變數設定頁面,將下列代碼放入。
紅字的部分請放入自己的 CSS 選擇器

function(){
// 假設透過 CSS 選擇器選取 <bdi> 這個元素
var element = document.querySelector('li.woocommerce-order-overview__total.total > strong > span > bdi');

// 檢查元素是否存在
if (element !== null) {
  // 取得元素內的文字內容
  var textContent = element.textContent || element.innerText;

  // 使用正則表達式保留數字、小數點和負號
  var cleanedValue = textContent.replace(/[^0-9.-]/g, '');

  // 將清理後的值轉換為數字
  var numberValue = parseFloat(cleanedValue);

 // 檢查是否成功轉換,如果成功,返回數字值;否則,返回 null
    return isNaN(numberValue) ? null : numberValue;
  } else {
    // 如果變數不存在,返回 null
    return null;
  }
}

完成之後的「自訂 JavaScript」變數設定畫面會顯示如下圖:

從上圖的代碼可以看出,從第 2 行到第 8 行所執行的工作實際上就是「DOM 元素」變數的功能,GTM 提供了一個簡化的操作界面,讓我們能夠達到相同的效果。而第 9 行及其後的代碼則負責去除數字、小數點和負號以外的文字,並將結果由「字串」轉換成「數字」。

是不是很有趣?

你可以按照以上步驟完成所有三個變數的設置。接著,使用 GTM 的預覽模式進行確認,兩種設定方式都會得到相同的結果,如下所示:


總結一下

到目前為止,我們已經解釋了如何將「DOM 元素」變數抓取到的值,從「字串(number)」轉換為「數字(number)」。這個是許多人使用「DOM 元素」變數抓取訂單價值時可能遇到的問題,因為未注意到數據類型,導致 GA4 無法正確接收數據。

此外,我們也提到其實可以直接使用「自訂 JavaScript」變數來完成這項轉換,而不需要額外設定「DOM 元素」變數。處理這部分的方法取決於網站架構和管理的便利性。一般來說,對於行銷人員而言,單純設定「DOM 元素」變數通常比撰寫一段 JavaScript 代碼容易多了,因此都會是設定「DOM 元素」變數優先,再搭配「自訂 JavaScript」變數。

未來,若在 GA4 購買事件中發現總收益沒有數值,請檢查傳送的事件參數是「字串」還是「數字」。

同時,請確保在購買事件中正確設置了「value」「currency」這兩個相關聯的參數。這兩個參數必須一起使用,不可分開。這些都是需要檢查的事項,以確保數據的完整性和正確性。


延伸閱讀

如果你很喜歡這篇文章並且覺得內容有幫助,又剛有些多餘時間,歡迎看看其它文章,繼續探索(這坑?這地獄?這片樂土?)

同時,如果對於內容有疑問或是建議,也歡迎你留言告訴我們:)