Javascript Google analytics代码和带有php头位置的重定向

Javascript Google analytics代码和带有php头位置的重定向,javascript,php,google-analytics,http-headers,Javascript,Php,Google Analytics,Http Headers,谷歌分析代码会在头位置重定向之前执行吗?如果没有,还有别的方法吗 例如: <html> <body> <script> (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.getEle

谷歌分析代码会在头位置重定向之前执行吗?如果没有,还有别的方法吗

例如:

<html>
<body>
<script>
  (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-0000000-0', 'domain.com');
  ga('send', 'pageview');

</script>
</body>
</html>
<?php
header('Location: http://domain.com');
?>

(函数(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]| |函数(){
(i[r].q=i[r].q | |[]).push(参数)},i[r].l=1*新日期();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(窗口,文档,“脚本”,“www.google-analytics.com/analytics.js”,“ga”);
ga('create','UA-0000000-0','domain.com');
ga(‘发送’、‘页面浏览’);

试试看-不使用PHP,并且(对不起)不使用任何重定向原因码(如“301”等)

在我的情况下,它工作得很好:

(函数(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]| |函数(){
(i[r].q=i[r].q | |[]).push(参数)},i[r].l=1*新日期();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(窗口,文档,“脚本”,“www.google-analytics.com/analytics.js”,“ga”);
ga('create','UA-0000000-0','domain.com');
ga(‘发送’、‘页面浏览’);
window.location=http://www.domain.com/redirect-example';

想想你在这里想做什么:

谷歌分析代码由浏览器执行。PHP是在服务器上生成HTTP响应的预处理器

因此,执行顺序是:

  • 请求传入(在Apache、NGINX上,无论什么)
  • PHP获取请求并执行必要的操作
  • PHP生成的输出(通常是HTML)被发送回客户端
  • 客户端的浏览器呈现响应
  • 响应中的任何JavaScript代码都在客户端浏览器中运行
  • PHP将在步骤2中生成HTTP重定向。它告诉客户端的浏览器转到其他地方,然后从第1步开始。但您基本上期望步骤5在两者之间的某个位置执行

    很明显,这是行不通的

    要么你找到一种从服务器端触发谷歌分析的方法(这可能会破坏跟踪的目的),要么你只需要摆脱重定向(并用JavaScript位置更改替换)或者跳过跟踪调用


    如果您只需要一个下载计数器,那么您可以让PHP在发出重定向之前记录点击。那就行了。

    重定向的可能副本必须与php头301重定向一起使用。如果您在已经有HTML输出后可以发送php头,我会感到惊讶。这也是我的想法,不幸的是,这确实提供了一个可能的解决方案,但是您没有解释为什么问题中的代码不起作用,以及您的解决方案以不同方式解决了什么问题。关于您的实际代码:这是基于运气。浏览器可能能够及时发送跟踪呼叫,也可能无法。如果跟踪代码以某种方式允许向其附加事件,那将是最好的解决方案。否则,至少短时间的超时将增加跟踪调用实际通过的机会。
    <?PHP
    ob_start();
    
    echo "<script>
      (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-0000000-0', 'domain.com');
      ga('send', 'pageview');
    </script>";
    
    header("Location: http://www.domain.com/");        
    ob_flush();