GTM问题并在跨域设置中解雇Facebook Pixel

时间:2017-03-17 22:02:05

标签: javascript facebook cookies google-tag-manager

我正在尝试在适当的活动期间使用Facebook Pixel跟踪Facebook广告结果 (页面浏览量,潜在客户生成,订单表单视图,购买)。我可以毫无问题地使用GTM为GA做所有这些,但在Facebook上我只取得了部分成功。

主要问题是我有一个跨域设置,如下所示:

  1. domain1.com/offer - 着陆页(FB页面视图Pixel应该触发)
  2. domain1.com/ordergate - 在显示订单表单页面之前请求发送电子邮件(FB页面视图Pixel应该触发)
  3. crm.com/formsubmission - 实际表单提交给我的crm (FB Lead Pixel应该触发)
  4. crm.com/orderform - 订购单(FB订单表单视图像素应该触发)
  5. domain1.com/thankyou - 感谢页面(FB订单像素应该触发)
  6. 所以我在GTM上触发FB像素的触发器是"引用者"包含" facebook"。 但是,由于多步骤流程,推荐人在订单或销售完成时会丢失。

    从那时起我就知道我需要做以下事情:

    1. 用户从Facebook登陆,以适当短的到期时间写入cookie,将此信息存储在domaiin1.com上。
    2. 当用户点击链接并重定向到crm.com时,请检查用户是否有cookie,如果有,请在重定向URL中添加?reffacebook = true之类的内容。
    3. 在crm.com上,如果网址有?reffacebook = true,请写一个你在(1)上写的同一个cookie,同时有一个相同的到期时间。
    4. 更新

      因此,当设置Facebook Cookie时,我在页面视图中使用以下脚本找出了第2步:

      
      
      function updateLinks(parameter, value)
      {
      
         var links = document.getElementsByTagName('a');
         var includeDomains = self.location.host;
         
         for (var i=0;i<links.length;i++)
         {
             if(links[i].href != "#" && links[i].href != "/" && links[i].href != "" && links[i].href != window.location) //Ignore links with empty src attribute, linking to site root, or anchor tags (#)
             {
                 var updateLink = true;           
                 
                 if(links[i].href.toLowerCase().indexOf(includeDomains.toLowerCase()) != -1) //Domain of current link is included i the includeDomains array.  Update Required...
                 {
                   updateLink = false;
                 }           
             
                 if(!updateLink)
                 {
                     //Do nothing - link is internal
                 }
                 else
                 {
                     var queryStringComplete = "";
                     var paramCount = 0;
                 
                     var linkParts = links[i].href.split("?");
                     
                     if(linkParts.length > 1) // Has Query String Params
                     {
                         queryStringComplete = "?";
                     
                         var fullQString = linkParts[1];
                         var paramArray = fullQString.split("&");    
                         var found = false;
                         
                         for (j=0;j<paramArray.length;j++)
                         {
                             
                             var currentParameter = paramArray[j].split("=");
                             
                             if(paramCount > 0)
                                 queryStringComplete = queryStringComplete + "&";
                             
                             if(currentParameter[0] == parameter) //Parameter exists in url, refresh value
                              {
                                  queryStringComplete = queryStringComplete + parameter + "=" + value;
                                  found = true;
                              }
                              else
                              {
                                  queryStringComplete = queryStringComplete + paramArray[j]; //Not related parameter - re-include in url
                              }
                             
                              paramCount++;
                         }
                         
                         if(!found) //Add new param to end of query string
                             queryStringComplete = queryStringComplete + "&" + parameter + "=" + value;
                     }
                     else
                     {
                         queryStringComplete = "?" + parameter + "=" + value;
                     }
                         
                     links[i].href = links[i].href.split("?")[0] + queryStringComplete;        
                 }
             }
             else
             {
                 //Do nothing
             }
         }
      }
      &#13;
      &#13;
      &#13;

      因此,使用此代码,我现在可以正确地将人们推荐给跨域的Facebook推介...

      ...但我仍然遇到表单提交问题。

      因此,当联系人进入第4步时,它是表单提交的重定向。它不带任何cookie或查询字符串,因此没有FB像素(订单表单视图或订单)被触发。

      我不确定如何处理这件事。我的第一个想法是将一个隐藏的字段传递给表单提交(比如reffacebook = true)。然后以某种形式在URL中以查询字符串的形式公开它,以便GTM可以检测到它。

      这似乎有些复杂,因为我必须编辑所有表单才能拥有此变量,编辑我的CRM以便知道接收它,然后编辑表单登录页面以在URL中公开该变量。

1 个答案:

答案 0 :(得分:0)

嘿,我希望我明白这是怎么回事。在这里,您想跟踪跨域之间的流量,对吗?我不喜欢任何编码或类似的东西来实现这样的跟踪。因为我对任何编码一窍不通(我很抱歉我什至没有尝试学习。我意识到我自己知道 Java 脚本在高级营销中有很多好处)。好的 这是我的观点。如果我们想跟踪域之间的流量并在以后重新定位它们,难道 Facebook 本身不会通过在两个域中使用相同的像素来完成吗?这就是我过去在做 Facebook 广告时在多个域的情况下所相信的。这里重要的是,从域 A 到域 B 的受众应该是相同的(在您的情况下,看起来是的,受众是相同的,因为我认为这样做没有问题)。但不确定 Facebook 是否会通过在两个域中放置相同的 FB Pixel 来成功跟踪域之间的流量。

谢谢。