Вставка отслеживания конверсий Google Adwords с помощью Javascript или jQuery - PullRequest
52 голосов
/ 23 февраля 2011

Я довольно новичок в javascript, и в этом, вероятно, кроется моя проблема.Я пытаюсь отслеживать конверсии AdWords, которые происходят внутри виджета на нашем сайте.Пользователь заполняет форму, и результат из виджета публикуется в том же разделе без обновления страницы.У меня возникает проблема, когда я пытаюсь добавить Child (или добавить в jQuery) оба элемента скрипта в коде Google (показано ниже), страница 302 перенаправляется на пустую страницу 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 ]

52 голосов
/ 23 сентября 2014

В настоящее время удобно использовать асинхронный тег на 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/

39 голосов
/ 10 мая 2011

Если вы используете jQuery на своих страницах, почему бы вам не использовать тот же метод getScript для опроса скрипта отслеживания конверсий после установки необходимых переменных?

Это то, что я обычно делаю, как только я получаю успешный ответ от моих вызовов AJAX.

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 - один из самых чистых подходов.

14 голосов
/ 25 апреля 2012

этот простой код работал для меня (версия $ .getScript не работала).

var image = new Image(1,1);
image.src = 'http://www.googleadservices.com/pagead/conversion/' + id + '/?label=' + label + ' &guid=ON&script=0';
5 голосов
/ 01 февраля 2013

// Это позаботится об этом для 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()
})
4 голосов
/ 29 апреля 2015

В вашей учетной записи 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>
1 голос
/ 13 декабря 2013

Я перепробовал все способы, чтобы вручную включить файл 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.
};

, затем просто вызовите ppcconversion (), где бы вы ни хотели записать в JS.

1 голос
/ 07 июня 2013

Как вы уже видели, тег конверсии 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 голос
/ 17 декабря 2012

Поскольку в сценарии используется 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

1 голос
/ 18 ноября 2012

После всех попыток ссылка, которую предоставила Funka (http://articles.adamwrobel.com/2010/12/23/trigger-adwords-conversion-on-javascript-event), сработала для меня. Как будто он сказал, что перезаписывать document.write страшно, но, похоже, это то, что вам нужно сделать, если вы не можете загрузитьскрипт перед загрузкой страницы.

0 голосов
/ 22 декабря 2016

Это работает для меня:

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