Переадресация Javascript с помощью Google Analytics
Мне нужна помощь в том, как успешно перенаправить, включая код 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, пожалуйста, любой вход приветствуется, если вы знаете о решении.
Ответы
Ответ 1
Использование meta refresh работало как шарм! Наследие 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 (взято из wikipedia)
Примеры
Поместите внутрь, чтобы обновить страницу через 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
Примечание: _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);
})();
Ответ 3
Если вы используете новый код 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";
}
});
Ответ 4
Я бы предложил изменить ваш код 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>
Это должно гарантировать, что он будет работать до того, как ваш код перенаправления начнет работать, и он должен быть в стороне от вашего перенаправления script, чтобы не было никаких помех. Поскольку у вас есть это сейчас, вы играете в игру гадания, как долго GA script будет загружаться и что она загрузится и сделает это за менее 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>
Ответ 5
предоставленный 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
Обновление Meta обычно не рекомендуется из-за проблем с удобством использования (особенно с короткой или без задержки), но в качестве резервной для клиентов без 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>
Ответ 7
Здесь есть хороший ответ:
https://www.domsammut.com/code/setting-up-hitcallback-using-google-universal-analytics
Короче говоря, вы сделали бы это с помощью события, и вы используете функцию hitCallback.
Ответ 8
Этот подход не требует задержки. Сначала выполните код 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>
Ответ 9
Я думаю, может быть, просто использовать метод jquery ready, чтобы он не запускал таймер до полной загрузки страницы...
<script type="text/javascript" charset="utf-8">
$(document).ready(function() {
setTimeout(function() {
//alert("redirecting!");
window.location = '<?= $url ?>';
}, 3000);
});
</script>