2014-11-05 32 views
3

谷歌新的增強型電子商務追蹤具有一些非常棒的功能,包括展示數據和基於展示次數的點擊率。這很好,但默認example given by Google是爲頁面加載中的每個產品設置addImpression。問題是,如果一個網站有大量的分類頁面(例如一頁上有100個產品),那麼許多這些產品可能實際上並沒有被查看過,因此「印象」確實沒有發生,數據也不準確。使用滾動事件正確實施GA增強型電子商務addImpression

addImpression方法也可以通過事件發送,所以我的解決方法是將函數綁定到滾動事件,並使用jQuery Viewport plugin來查看某個項目是否真的在視圖中。如果項目在視圖中,它抓取我添加到每個產品的數據屬性標籤中的信息,它爲該對象創建一個印象,併爲其分配一個類'impressionSent',以便產品不會再次發送(阻止在單頁加載時產生雙倍的印象)。在每個函數的末尾,使用.promise()。done(),新的展示數據將與事件一起發送。

簡單的腳本是:

$j(window).bind("scroll", function() { 
      $j('li.item:in-viewport').not('.impressionSent').each(function(){ 
      $j(this).addClass('impressionSent');   
       ga('ec:addImpression', { 
        'id': $j(this).attr('data-sku'), 
        'name': $j(this).attr('data-name'), 
        'category': $j(this).attr('data-category'), 
        'brand': $j(this).attr('data-brand'), 
        'list': 'Category', 
        'position': $j(this).attr('data-position')      
       });   
      }).promise().done(function() { 
       ga('send', 'event', 'scroll', 'impression', {'nonInteraction': true});  
      }); 
     }); 

在開發這種方法效果很好,除了一個問題:這些被解僱的事件數。在控制檯和使用Google Analytics調試器時,瀏覽網站時出現以下錯誤:
Exceeded rate limit for sending hits. Aborting hit.

根據Google,每次會話最多可發送500個事件。

所以我的問題是: (1)是否有一個js/jquery方法可用來限制每個會話發送的事件數量少於執行setInterval函數並檢查是否有新信息要發送?就像在變量中存儲特定數量並在達到特定大小或退出頁面時將其發送出去一樣? (2)對於分析專家:這是否可以解決我的問題,或者是「最多500個事件」,包括包含的addImpression方法的數量。即如果我在單個頁面上有500個產品並在單個事件中發送500個addImpression,那麼是否會超過最大值?

+1

還有另一個限制,您可以從20次交互式匹配開始,每次2次匹配時進行補充 - 快速滾動列表可能意味着您的活動正在發送到快速處理。 – 2014-11-05 15:45:29

+0

@EikePierstorff - 這也是一個問題。有沒有關於谷歌接受多少點擊次數的文檔? – James 2014-11-06 00:52:59

回答

0

是的,你發現一個印象,你可以將其添加到隊列,並調用發送事件的功能,而「反跳」每次它,例如使用:

https://lodash.com/docs#debounce

,會做你想要什麼「創建一個去抖動函數,該函數會延遲調用func,直到自上次調用去抖函數後等待幾毫秒後。

關於debounce功能,您從展示隊列中取出所有內容,並將其發送給GA。 這會降低你的事件的使用情況,您可以發送所有排隊的印象中1項活動,如:

impressionQueue = []; 

function filterDuplicates(impressions) { 
    // TODO: return impressions array without duplicates 
} 

var sendImpressions = _.debounce(function() { 
    filterDuplicates(impressionsQueue).forEach(function(impression) { 
    ga('ec:addImpression', impression); 
    }); 
    impressionQueue.length = 0; 
    ga('send', 'pageview'); 
}, 2000); // debounce for 2 seconds 

// call this for every product that enters the viewport 
function trackProductImpression(impression) { 
    impressionQueue.push(impression); 
    sendImpressions(); 
} 

較高的去抖動延遲,更少的事件,你會送(還有更多的機會有些印象如果用戶關閉標籤/在發送印象之前快速導航,則會丟失)

相關問題