首页 文章

使用Javascript或jQuery插入Google Adwords转换跟踪

提问于
浏览
52

我对javascript很新,其中可能存在我的问题 . 我正在尝试跟踪我们网站上的小部件中发生的AdWords转化 . 用户填写表单,并且窗口小部件的结果将在相同的div中发布,而不会刷新页面 . 我遇到的问题是,当我尝试在Google的代码中将appendChild(或附加在jQuery中)两个脚本元素(如下所示)时,页面被重定向到一个空白的Google页面(或者至少通过FireBug看起来像这样) . 我能够为表单的结果提供回调方法,而这正是我尝试插入AdWords跟踪代码的地方 . 作为参考,这是Google提供的代码:

<script type="text/javascript">
/* <![CDATA[ */
var google_conversion_id = 993834405;
var google_conversion_language = "en";
var google_conversion_format = "3";
var google_conversion_color = "ffffff";
var google_conversion_label = "bSpUCOP9iAIQpevy2QM";
/* ]]> */
</script>
<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js">
</script>
<noscript>
<div style="display:inline;">
<img height="1" width="1" style="border-style:none;" alt="" src="http://www.googleadservices.com/pagead/conversion/993834405/?label=bSpUCOP9iAIQpevy2QM&amp;guid=ON&amp;script=0"/>
</div>
</noscript>

很标准的东西 . 所以,我想要做的是使用回调方法(提供)将其插入结果页面 . 坦率地说,无论我何时尝试使用js或jQuery(无论是在原始页面加载还是在回调中)插入此代码,我都会重定向,因此可能回调位无关紧要,但这就是为什么我不只是将其粘贴到页面的代码 .

我已经尝试了很多不同的方法来做到这一点,但这就是我现在拥有的东西(请原谅这种邋 . . 现在只是试图破解我的方式!):

function matchResultsCallback(data){

    var scriptTag = document.createElement('script');
    scriptTag.type = "text/javascript";
    scriptTag.text = scriptTag.text + "/* <![CDATA[ */\n";
    scriptTag.text = scriptTag.text + "var google_conversion_id \= 993834405\;\n";  
    scriptTag.text = scriptTag.text + "var google_conversion_language \= \"en\"\;\n";   
    scriptTag.text = scriptTag.text + "var google_conversion_format \= \"3\"\;\n";
    scriptTag.text = scriptTag.text + "var google_conversion_color \= \"ffffff\"\;\n";
    scriptTag.text = scriptTag.text + "var google_conversion_label \= \"bSpUCOP9iAIQpevy2QM\"\;\n";
    scriptTag.text = scriptTag.text + "/* ]]> */\n";
    $('body').append(scriptTag);

    $('body').append("<script type\=\"text\/javascript\" src\=\"http://www.googleadservices.com/pagead/conversion.js\" />");
    //I have also tried this bit above using the same method as 'scriptTag' with no luck, this is just the most recent iteration.

    var scriptTag2 = document.createElement('noscript');
    var imgTag = document.createElement('img');
    imgTag.height = 1;
    imgTag.width = 1;
    imgTag.border = 0;
    imgTag.src = "http://www.googleadservices.com/pagead/conversion/993834405/?label=bSpUCOP9iAIQpevy2QM&amp;guid=ON&amp;script=0";

    $('body').append(scriptTag2);
    $('noscript').append(imgTag);
}

真正奇怪的是,当我只插入一个脚本标签(无论哪一个)时,它不会重定向 . 它只在我尝试插入它们时重定向 .

我还尝试将第一个脚本标记放入原始页面代码中(因为它不在任何地方进行任何调用,它只是设置变量)并且只插入conversions.js文件并且它仍然执行重定向 .

如果它是相关的我正在使用Firefox 3.6.13,并尝试了包含jQuery 1.3和1.5的代码(在实现我们使用v1.3之后) .

我知道我错过了什么!有什么建议?

12 回答

  • 5

    如果您使用getScript方法在设置所需变量后轮询转换跟踪脚本?

    这是我通常做的,一旦我从我的AJAX调用中收到 success response .

    var google_conversion_id = <Your ID Here>;
    var google_conversion_language = "en";
    var google_conversion_format = "3";
    var google_conversion_color = "ffffff";
    var google_conversion_label = "<Your Label here>";
    var google_conversion_value = 0;
    if (100) {
        google_conversion_value = <Your value here if any>;
    }
    $jQ.getScript( "http://www.googleadservices.com/pagead/conversion.js" );
    

    这对我来说很好 . 如果你想要一个更详细的例子:

    $.ajax({
        async:      true,
        type:       "POST",
        dataType:   "json",
        url:        <Your URL>,
        data:       _data,
        success:    function( json ) {
    
                // Do something
                // ...
    
                // Track conversion
                var google_conversion_id = <Your ID Here>;
                var google_conversion_language = "en";
                var google_conversion_format = "3";
                var google_conversion_color = "ffffff";
                var google_conversion_label = "<Your Label here>";
                var google_conversion_value = 0;
                if (100) {
                    google_conversion_value = <Your value here if any>;
                }
                $.getScript( "http://www.googleadservices.com/pagead/conversion.js" );
    
            } // success
    });
    

    如果您使用其他库,如Mootools或Prototype,我相信他们有类似的内置方法 . 这种AFAIK是最干净的方法之一 .

  • 0

    现在可以方便地使用 http://www.googleadservices.com/pagead/conversion_async.js 上的异步标记来公开 window.google_trackConversion 函数 .

    此功能可以随时使用 . 例如,在提交表单之后,就像你的情况一样 .

    请参阅https://developers.google.com/adwords-remarketing-tag/asynchronous/


    更新2018年

    情况发生了变化,现在gtag.js似乎有更多选择:https://developers.google.com/adwords-remarketing-tag/

  • 52

    这个简单的代码对我有用($ .getScript版本没有) .

    var image = new Image(1,1);
    image.src = 'http://www.googleadservices.com/pagead/conversion/' + id + '/?label=' + label + ' &guid=ON&script=0';
    
  • 1

    //这为jQuery负责 . 代码可以很容易地适应其他JavaScript库:

    function googleTrackingPixel() {
                // set google variables as globals
                window.google_conversion_id = 1117861175
                window.google_conversion_language = "en"
                window.google_conversion_format = "3"
                window.google_conversion_color = "ffffff"
                window.google_conversion_label = "Ll49CJnRpgUQ9-at5QM"
                window.google_conversion_value = 0
    
                var oldDocWrite = document.write // save old doc write
    
                document.write = function(node){ // change doc write to be friendlier, temporary
                    $("body").append(node)
                }
    
                $.getScript("http://www.googleadservices.com/pagead/conversion.js", function() {
    
                    setTimeout(function() { // let the above script run, then replace doc.write
                        document.write = oldDocWrite
                    }, 100)
    
                })
            }
    

    //你可以在你的脚本中调用它,就像这样:

    $("button").click( function() {
       googleTrackingPixel()
    })
    
  • 1

    在您的Adwords帐户中 - 如果您将转化跟踪事件更改为“点击”而不是“页面加载”,它将为您提供创建功能的代码 . 它会创建一个这样的代码段:

    <!-- Google Code for Developer Contact Form Conversion Page
    In your html page, add the snippet and call
    goog_report_conversion when someone clicks on the
    chosen link or button. -->
    <script type="text/javascript">
      /* <![CDATA[ */
      goog_snippet_vars = function() {
        var w = window;
        w.google_conversion_id = <Your ID Here>;
        w.google_conversion_label = "<Your value here if any>";
        w.google_remarketing_only = false;
      }
      // DO NOT CHANGE THE CODE BELOW.
      goog_report_conversion = function(url) {
        goog_snippet_vars();
        window.google_conversion_format = "3";
        window.google_is_call = true;
        var opt = new Object();
        opt.onload_callback = function() {
        if (typeof(url) != 'undefined') {
          window.location = url;
        }
      }
      var conv_handler = window['google_trackConversion'];
      if (typeof(conv_handler) == 'function') {
      conv_handler(opt);
      }
    }
    /* ]]> */
    </script>
    <script type="text/javascript"
      src="//www.googleadservices.com/pagead/conversion_async.js">
    </script>
    

    然后在你的代码中你只需要调用:

    goog_report_conversion();
    

    或者对于链接或图像点击:

    <a href="" onclick="goog_report_conversion();">click here</a>
    
  • 0

    尝试了一切后,Funka提供的链接(http://articles.adamwrobel.com/2010/12/23/trigger-adwords-conversion-on-javascript-event)对我有用 . 就像他说覆盖document.write一样可怕,但似乎这是你必须要做的,除非你可以在页面加载之前加载脚本 .

  • 39

    由于脚本使用 document.write 所以需要重写它

    document.write = function(node){ // exactly what document.write should of been doing..
      $("body").append(node);
    }
        window.google_tag_params = {
            prodid: pageId,
            pagetype: pageTypes[pageType] || "",
            value: "234324342"
        };
        window.google_conversion_id = 2324849237;
        window.google_conversion_label = "u38234j32423j432kj4";
        window.google_custom_params = window.google_tag_params;
        window.google_remarketing_only = true;
    
        $.getScript("http://www.googleadservices.com/pagead/conversion.js")
    .done(function() {
          // script is loaded.
        });
    

    https://gist.github.com/c7a316972128250d278c

  • 0

    如您所见,Google转换代码只会调用重绘 . 我必须确保在重绘页面的一部分时调用它 . (由于目前我无法修复的一些糟糕的网站设计 . )所以我写了一个函数来调用onClick事件 .

    基本上,你所要做的就是调用doConversion();

    以下是我们最终得到的结果:

    // gothelp from from http://www.ewanheming.com/2012/01/web-analytics/website-tracking/adwords-page-event-conversion-tracking
    
        var Goal = function(id, label, value, url) {
        this.id = id;
        this.label = label;
        this.value = value;
        this.url = url;
        };
    
    function trackAdWordsConversion(goal, callback) {
    // Create an image
    var img = document.createElement("img");
    
    // An optional callback function to run follow up processed after the conversion has been tracked
    if(callback && typeof callback === "function") {
        img.onload = callback;
    }
    // Construct the tracking beacon using the goal parameters
    var trackingUrl = "http://www.googleadservices.com/pagead/conversion/"+goal.id;
    trackingUrl += "/?random="+new Date().getMilliseconds();
    trackingUrl += "&value="+goal.value;
    trackingUrl += "&label="+goal.label;
    trackingUrl += "&guid=ON&script=0&url="+encodeURI(goal.url);
    img.src = trackingUrl;
    
    // Add the image to the page 
    document.body.appendChild(img);
    
    // Don't display the image 
    img.style = "display: none;";
        }
    function linkClick(link, goal) {
    try {
        // A function to redirect the user after the conversion event has been sent
        var linkClickCallback = function() {
            window.location = link.href;
        };
    
        // Track the conversion
        trackAdWordsConversion(goal, linkClickCallback);
    
        // Don't keep the user waiting too long in case there are problems
        setTimeout(linkClickCallback, 1000);
    
        // Stop the default link click
        return false;
    } catch(err) {
        // Ensure the user is still redirected if there's an unexpected error in the code
        return true;
    }
    }
    function doConversion() {
    var g = new Goal(YOUR CODE,YOUR_COOKIE,0.0,location.href);
    return linkClick(this,g);
    }
    
  • 1

    我尝试了所有方法手动包含conversion.js,它都加载了脚本,但没有进一步执行我们在脚本中所需的内容,这是一个简单的解决方案 .

    只需将转换代码放在单独的HTML中,然后将其加载到iframe中即可 .

    我发现代码在http://www.benjaminkim.com/这样做似乎运作良好 .

    function ppcconversion() {
    var iframe = document.createElement('iframe');
    iframe.style.width = '0px';
    iframe.style.height = '0px';
    document.body.appendChild(iframe);
    iframe.src = '/track.html'; // put URL to tracking code here.
    };
    

    然后只需在你想要记录的JS中调用ppcconversion()它 .

  • 1

    我所做的就是返回代码(或者在我们的例子中,一个图像)以及回调中的“success”消息 .

    当提交联系表格或填写并提交注册表格时,我们使用jQuery发布到php脚本,然后向div输出“thank-you”消息:

    “$ first_name,感谢您提供更多信息 . 代表将尽快与您联系 . ”

    ...接下来是Google提供的1x1 gif .

    这是jQuery:

    $.post('script.php',{'first_name':first_name,'last_name':last_name,'email':email,'phone1':phone1,'password':password,},function(data){
    var result=data.split("|");
    if(result[0] ==='success'){
    $('#return').html(result[1] + $result[2]);
    

    和PHP ...

    echo 'success|'.$first_name.', Thanks for requesting more information.
    A representative will contact you shortly.|<img height="1" width="1" alt="" src="http://www.googleadservices.com/pagead/conversion/xxxxxxxx/imp.gif?value=0&amp;label=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;script=0"/>';
    

    如果没有被谷歌选中,你可能需要输入“ document.location.reload();

  • 14

    For anyone still looking for a good solution to this, Google supports AJAX Conversions natively now through their Google Analytics API.

    您可以通过在Google Analytics中进行事件API调用来完成此操作 . 您要做的是设置Google Analytics事件,将其与目标联系起来,然后将该目标作为转化导入AdWords . 这是一个漫长的过程,但它是一个干净的解决方案 .

    Check out This Page for a tutorial

  • 4

    这对我有用:

    window.google_trackConversion({
        google_conversion_id: 000000000, 
        conversion_label : "xxxxxxxxxxxx",
        google_remarketing_only: false,
        onload_callback : function(){
            //do something :)
        }
    });
    

相关问题