Перенаправление JavaScript с помощью Google Analytics - PullRequest
36 голосов
/ 01 января 2012

Мне нужна помощь, чтобы выяснить, как успешно перенаправить, включая код Google Analytics.

Код для этого файла перенаправления:

<head>
<script type="text/javascript">
function delayedRedirect(){
    window.location = "https://market.android.com/developer?pub=Fractal%20Systems"
}
</script>
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1234567-8']); <!--I have my real ID there-->
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
</head>
<body onLoad="setTimeout('delayedRedirect()', 3000)">
<h2>ADW.BuuF.Theme is no more! You will be redirected to new and better apps in 3 seconds.</h2>
</body>
</html>

Это работает как перенаправление, только если я не включаю свой код Google Analytics. Я попытался переместить код без изменений.

ВОПРОС Как я могу добавить перенаправление любого вида и при этом иметь возможность отслеживать с помощью Google Analytics?

Я пробовал перенаправления PHP безуспешно, и я уверен, что перенаправления htaccess не помогут, хотя я открыт для предложений.

Причина, по которой я использую перенаправление JavaScript, заключается в том, что я могу продолжать отслеживать с помощью Google Analytics, а также показать небольшое сообщение или создать пользовательскую страницу с задержкой.

Спасибо за любую помощь. Не обязательно JS, пожалуйста, любые предложения приветствуются, если вы знаете решение.

Ответы [ 9 ]

42 голосов
/ 01 января 2012

Примечание: _gaq.push позволяет помещать функции в очередь.Следующий код должен перенаправить через 250 миллисекунд (чтобы выделить время для пикселя отслеживания) после _trackPageview:

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1234567-8']);
_gaq.push(['_trackPageview']);
_gaq.push(function() {
    setTimeout(function() {
        window.location = "https://market.android.com/developer?pub=Fractal%20Systems";
    }, 250);
});

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
20 голосов
/ 29 июля 2014

Если вы используете новый код GA, вы можете просто заменить эту строку ga('send', 'pageview'); на этот код:

ga('send', 'pageview', {
  'hitCallback': function() {
      window.location = "http://www.your-site.com";
  }
});

Пример полностью:

  (function(i,s,o,g,r,a,m){
    i['GoogleAnalyticsObject']=r;
    i[r]=i[r]||function() {
        (i[r].q=i[r].q||[]).push(arguments)
    },i[r].l=1*new Date();
    a=s.createElement(o),
    m=s.getElementsByTagName(o)[0];
    a.async=1;
    a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-xxxxxxx-2', 'auto');

ga('send', 'pageview', {
  'hitCallback': function() {
      window.location = "http://www.your-site.com";
  }
});
14 голосов
/ 01 января 2012

Я бы предложил изменить ваш код Google Analytics, чтобы он был синхронным, а не асинхронным, изменив его следующим образом:

<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1234567-8']);
  _gaq.push(['_trackPageview']);
</script>
<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>

Это должно гарантировать, что он будет работать до того, как ваш код перенаправления вступит в силу, и он должен быть отключенпути вашего сценария перенаправления, поэтому нет помех.Как вы понимаете, вы играете в угадайку, сколько времени займет загрузка сценария GA, и что он загрузится и выполнит свою работу менее чем за 3 секунды.Обычно это может иметь место, но нет никакой причины загружать его асинхронно, как вы и должны играть в эту игру.Загрузите его синхронно, и он выполнит свою работу до того, как сработает ваш редирект javascript.

Может быть даже возможно просто поставить перенаправление сразу после кода GA, как это, и минимизировать время отображения страницы-заполнителя:

<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1234567-8']);
  _gaq.push(['_trackPageview']);
</script>
<script type="text/javascript" src="http://www.google-analytics.com/ga.js"></script>
<script type="text/javascript">
  window.location = "https://market.android.com/developer?pub=Fractal%20Systems";
</script>
9 голосов
/ 08 октября 2012

Код , предоставленный Mike , действительно работает. Однако я обнаружил, что удаление таймера также работает полностью. Затем запрос __utm.gif прерывается, но вся информация была отправлена. Окно просто перенаправляет и не ждет ответа (это просто 200 статус). Я проверил это, и, кажется, работает хорошо.

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-1234567-8']);
_gaq.push(['_trackPageview']);
_gaq.push(function() {
  window.location = "https://market.android.com/developer?pub=Fractal%20Systems";
});


(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
6 голосов
/ 01 января 2012

Использование meta refresh работает как шарм! Legacy FTW! Спасибо, @ Balexandre

<html>
<head>
<meta http-equiv="refresh" content="5; url=https://market.android.com/developer?pub=Fractal%20Systems">
<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-1234567-8']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>
</head>
<body>
<h2>ADW.BuuF.Theme is no more! You will be redirected to new and better apps in 5 seconds.</h2>
</body>
</html>

RECAP: теперь я могу перенаправлять при отслеживании этих перенаправлений с помощью Google Analytics!

Meta Refresh (взято из википедии )

Примеры

Место внутри, чтобы обновить страницу через 5 секунд:

<meta http-equiv="refresh" content="5">

Перенаправление на http://example.com/ через 5 секунд:

<meta http-equiv="refresh" content="5; url=http://example.com/">

Перенаправление на http://example.com/ немедленно:

<meta http-equiv="refresh" content="0; url=http://example.com/">
2 голосов
/ 25 июня 2014

Здесь есть хороший ответ: https://www.domsammut.com/code/setting-up-hitcallback-using-google-universal-analytics

Короче говоря, вы сделали бы это, используя событие, и использовали бы функцию hitCallback.

2 голосов
/ 10 марта 2012

Мета-обновление обычно не рекомендуется из-за проблем с юзабилити (особенно с короткой или без задержки), но как запасной вариант для клиентов без javascript, я думаю, что это совершенно справедливо в этом случае.

Если вы объедините синхронный вызов ga.js с мета-обновлением, вы получите лучшее из обоих миров: почти мгновенное отслеживаемое перенаправление, если JS включен; отложенное, но все еще эффективное перенаправление, если нет (и жесткая ссылка в теле на случай, если все остальное не работает).

<html>
<head>
    <!--For JS disabled: decent delay, both for usability and to allow plenty of time for JS to work if enabled -->
    <meta http-equiv="refresh" content="5;https://market.android.com/developer?pub=Fractal%20Systems"/>
    <script>
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-1234567-8']);
        _gaq.push(['_trackPageview']);
    </script>
    <!--Synchronous call to ensure tracking fires before JS redirect-->
    <script type="text/javascript" src="//www.google-analytics.com/ga.js"></script>
    <script>
        /* if JS is enabled this will normally fire well before the meta refresh delay ends: an almost instantaneous redirect */
        window.location="https://market.android.com/developer?pub=Fractal%20Systems";
    </script>
</head>
<body>
    <!-- Include a hard link in case both js and the meta refresh fail -->
    <p>Redirecting you to <a href="https://market.android.com/developer?pub=Fractal%20Systems">https://market.android.com/developer?pub=Fractal%20Systems</a></p>
</body></html>
0 голосов
/ 27 февраля 2016

Этот подход не требует задержки. Сначала выполните код Google Analytics синхронно, а затем перенаправьте.

<html>
<head>
<script src="//www.google-analytics.com/analytics.js"></script>
  <script>
    var tracker = ga.create('UA-xxxxxxxx-x', 'auto');
    tracker.send('pageview');
    window.location='http://your-url.com';
  </script>
</head>
<body>
</body>
</html>
0 голосов
/ 27 марта 2012

Я думаю, что, возможно, просто используйте метод jquery ready, чтобы он не запускал таймер до полной загрузки страницы ...

<script type="text/javascript" charset="utf-8">
$(document).ready(function() {       
    setTimeout(function() {
        //alert("redirecting!");
        window.location = '<?= $url ?>';
    }, 3000);
});
</script>
...