2012-01-01 34 views
35

Tôi cần trợ giúp tìm cách chuyển hướng thành công trong khi bao gồm mã Analytics.Chuyển hướng Javascript bằng Google Analytics

Mã cho rằng tập tin chuyển hướng :

<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> 

Công trình này dưới dạng chuyển hướng chỉ khi tôi không bao gồm mã Analytics của mình. Tôi đã thử di chuyển mã xung quanh mà không thay đổi.

CÂU HỎI Tôi làm cách nào để thêm chuyển hướng, bất kỳ loại nào và vẫn có thể theo dõi bằng Google Analytics?

Tôi đã thử chuyển hướng PHP không thành công và chắc chắn chuyển hướng htaccess khá chắc chắn sẽ không trợ giúp mặc dù tôi đang mở để đề xuất.

Lý do tôi đang sử dụng chuyển hướng JavaScript là vì vậy tôi có thể tiếp tục theo dõi bằng Google Analytics và cũng hiển thị một thông báo nhỏ hoặc làm cho trang tùy chỉnh bị chậm trễ.

Cảm ơn bạn đã được trợ giúp. Không phải là JS, xin vui lòng, bất kỳ đầu vào được chào đón nếu bạn biết một giải pháp.

+1

bạn đã thử sử dụng [làm mới meta] (http://en.wikipedia.org/wiki/Meta_refresh)? – balexandre

Trả lời

6

Sử dụng meta refresh hoạt động như một sự quyến rũ! FTW cũ! Cảm ơn, @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: Tôi hiện có thể chuyển hướng trong khi theo dõi các chuyển hướng đó bằng Google Analytics!

Meta Refresh (Trích từ wikipedia)

Ví dụ

Nơi bên trong để làm mới trang sau 5 giây:

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

Chuyển tới http://example.com/ sau 5 giây:

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

Chuyển hướng đến.210 ngay lập tức:

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

bất kỳ ý tưởng nào về cách chuyển hướng nhanh (chứ không phải 5s)? –

+0

@DS_web_developer Giải pháp này làm việc cho tôi, bạn có thể thử và chỉ đơn giản là thay đổi giá trị 'content = 5' thành cái gì khác, nhưng đó không phải là mạnh nhất ... bạn nên sử dụng http://stackoverflow.com/a/ 8692588/805031 – TryTryAgain

14

tôi muốn đề nghị thay đổi mã Google Analytics của bạn sẽ được đồng bộ thay vì asychronous bằng cách thay đổi nó như thế này:

<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> 

này nên đảm bảo rằng nó chạy trước khi đá đang chuyển hướng của bạn trong và nó nên nằm ngoài cách tập lệnh chuyển hướng của bạn để không có sự can thiệp. Như bạn có nó bây giờ, bạn đang chơi một trò chơi đoán cho bao lâu kịch bản GA sẽ mất để tải và nó sẽ tải và làm công việc của nó trong ít hơn 3 giây. Điều đó thường có thể xảy ra, nhưng không có lý do gì để tải nó không đồng bộ như bạn và phải chơi trò chơi đó. Tải nó đồng bộ và nó sẽ làm công việc của nó trước khi chuyển hướng javascript của bạn cháy.

Nó thậm chí có thể có thể chỉ cần đặt chuyển hướng trực tiếp sau khi mã GA như thế này và hạn chế tối đa thời gian mà trang giữ chỗ của bạn được hiển thị:

<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> 
+0

Cảm ơn, điều đó hoạt động với tất cả các phương thức chuyển hướng mà tôi đã thử. Tốt để biết. – TryTryAgain

42

Lưu ý: _gaq.push cho phép đẩy các chức năng vào hàng đợi. Các mã sau đây nên chuyển hướng sau 250 mili giây (để có thời gian cho pixel theo dõi) sau khi phương pháp _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); 
})(); 
+2

Câu trả lời hoàn hảo. Bạn có thể thêm liên kết văn bản đơn giản vào url chuyển hướng trong văn bản nội dung để người dùng không có javascript có thể truy cập url chuyển hướng. Ngoài ra, tài liệu tham khảo google với phần về chức năng đẩy có thể được tìm thấy tại đây: https://developers.google.com/analytics/devguides/collection/gajs/# PushingFunctions – kontur

+0

Tôi không tin bạn cần thời gian chờ - yêu cầu cho hình ảnh phải luôn đi trước khi chuyển hướng - không sao nếu khách hàng không nhận được bất kỳ dữ liệu nào trở lại –

+0

@Simon_Weaver Đồng ý rằng điều quan trọng là khách hàng không bao giờ nhận được bất kỳ dữ liệu nào, nhưng nó xuất hiện (ít nhất với Chrome và Firefox) rằng trình duyệt sẽ không thực hiện yêu cầu pixel theo dõi nếu cửa sổ thay đổi quá nhanh sau khi yêu cầu được bắt đầu. Google thậm chí còn có một lưu ý về việc sử dụng một sự chậm trễ, nhưng mã của họ được ẩn, trộn phân tích kiểu đồng bộ và không đồng bộ. – mike

2

refresh Meta thường nản chí vì lo ngại khả năng sử dụng (đặc biệt là với một đoạn ngắn, hoặc không chậm trễ), nhưng như một dự phòng cho khách hàng không có javascript Tôi nghĩ rằng nó hoàn toàn hợp lệ trong trường hợp này.

Nếu bạn kết hợp cuộc gọi ga.js đồng bộ với làm mới meta, bạn sẽ tận dụng tối đa cả hai thế giới: chuyển hướng gần như ngay lập tức, được theo dõi nếu JS được bật; một chuyển hướng bị trì hoãn nhưng vẫn hiệu quả nếu không (và một liên kết cứng trong cơ thể chỉ trong trường hợp tất cả đều thất bại).

<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> 
-1

Tôi nghĩ rằng có lẽ chỉ cần sử dụng phương pháp jquery sẵn sàng vì vậy nó sẽ không bắt đầu hẹn giờ cho đến khi trang web được tải đầy đủ ...

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

Sử dụng jQuery trong trường hợp này là rất nhiều chi phí, và hầu hết tất cả, không cần thiết. –

9

Các code provided bởi Mike tác phẩm thực sự. Tuy nhiên, tôi thấy rằng việc loại bỏ bộ hẹn giờ hoàn toàn hoạt động. Yêu cầu __utm.gif sau đó bị hủy bỏ, nhưng tất cả thông tin đã được gửi. Cửa sổ chỉ chuyển hướng và không chờ trả lời (chỉ đơn giản là trạng thái 200). Tôi đã thử nghiệm điều này và nó có vẻ là làm việc độc đáo.

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); 
})(); 
+0

Giải pháp này hoạt động tốt đẹp ... nhưng nếu người dùng đã tắt JavaScript, GA sẽ không chỉ không hoạt động, nhưng trang cũng sẽ không chuyển hướng? Nó sẽ là tốt nhất để có chuyển hướng 'meta' sau tập lệnh này, chỉ trong trường hợp? – user1997781

20

Nếu bạn đang sử dụng mã GA mới, bạn chỉ đơn giản là có thể thay thế dòng này ga('send', 'pageview'); với mã này:

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

Ví dụ đầy đủ:

(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"; 
    } 
}); 
+0

tự động nên được trích dẫn – Tosh

+0

@Tosh Bạn nói đúng. Xong, cảm ơn. – Jarrod

0

Cách tiếp cận này không đòi hỏi một sự chậm trễ. Trước tiên, thực thi mã phân tích google đồng bộ và sau đó chuyển hướng.

<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> 
Các vấn đề liên quan