可以将Google Analytics代码放在外部JS文件中吗?

32
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

try 
{
    var pageTracker = _gat._getTracker("UA-XXXXXXX-1");
    pageTracker._trackPageview();
}
catch(err) {}

能否从外部JS文件调用此脚本?我想做这样的事情:

<script type="text/javascript" src="googleanalytics.js" ></script>

我想在我的HTML页面中放置其中一个代码。
我上面的代码将会被放置在googleanalytics.js文件中。
Google的说明是将代码放置在每个页面中。 问题在于这样做会使更改跟踪代码变得更加困难。(我们为DEV和PROD页面使用不同的跟踪代码)。
我已经尝试过了,但似乎没有起作用。
这样做有问题吗?还是有其他原因导致的问题?

重要提示 请注意,我们正在使用IE6和8浏览器(是的,我知道,不用告诉我)

9个回答

17

是的,这是可能的。如果不起作用,那么就有其他问题了。

只是一个想法,Google Analytics通常会滞后一天报告,所以当您进行更改时,需要一些时间才能知道它是否起作用。我喜欢做的是访问很少得到流量的页面,以确保我正确设置了跟踪。

另外,您可以尝试在<script标签中将链接设置为绝对链接。它可能只是在错误的位置查找分析代码。


是的,我知道GA比当地时间晚了一天,问题是虽然我已经应用了代码并且在过去的4天里整天在DEV网站上冲浪,修复bug等等,但它仍然没有注册任何点击量。希望这是注册出了问题或者其他原因。我们将尝试重新申请新的跟踪代码,看看接下来会发生什么。感谢再次确认! - Nikko
当你说它没有从你的DEV网站注册点击时,你的DEV网站URL是否类似于:http://mycomputer/?如果是这样,对我来说,Google会过滤掉来自未完全限定的域名的点击。至少在我的测试中是这样的。尝试使用以下方式访问DEV网站:http://mycomputer.mycompany.com/,看看是否开始注册点击。 - slolife
开发站点托管在其他地方,拥有自己的域名和一切,并且不是在我正在使用的本地机器上托管。问题在于,文件托管的开发服务器以前已经与另一个站点一起使用过 Google Analytics,尽管该站点没有使用我在此处提到的外部 JS 脚本。 - Nikko
您可以查看“实时”访问者。 - Gabriel

5
我有一个简单的方法来实现这个... 由于分析 js 是异步的,所以不会出现任何问题...
在任何 JS 文件中包含以下代码 (请注意:我使用的是 Google Analytics 提供的新分析代码)

var imported = document.createElement('script');
imported.src = 'https://www.googletagmanager.com/gtag/js?id=UA-12xxxxxxx-1';
document.head.appendChild(imported);


window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'UA-12xxxxxxx-1');


4

你可以不使用服务器端语言在每个页面底部输出代码吗?创建一个名为output_ga()的函数并调用它。这样,您可以在一个地方更改它。


1
我工作的公司希望我不要使用任何服务器端脚本,所以这是不可能的。但如果由我决定的话,这正是我想要做的。 - Nikko

3

2
如果您将脚本分为两个脚本,就像Google Analytics将传统脚本分为两个脚本标签一样,这将起作用。

1

动态上传Google Analytics:

function loadGoogleAnalytics(){
    var ga = document.createElement('script'); 
    ga.type = 'text/javascript'; 
    ga.async = true;
    ga.src = 'https://www.googletagmanager.com/gtag/js?id=UA-XXXXXX-XX';

    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
}

loadGoogleAnalytics(); //Create the script  

window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());

gtag('config', 'UA-XXXXXX-XX');

不要忘记将XXXXXX-XX替换为您的账户ID。

0

@Nikko

可能的原因之一是因为GA帐户是使用旧版分析工具创建的。因此,您必须使用传统的分析代码ga.js(_gaq.push)。我在使用新的analytics.js与传统的GA帐户时发现了不兼容性问题。点击量不会出现,所以我被迫使用传统的ga.js。

此外,您可以设置回调函数来确保点击量已成功发送,如下所示:

//traditional way
_gaq.push(['_set', 'hitCallback', function() {
  console.log("%c ga.js finished sending pageview data to analytics %s ", "color:black; background: pink", pageviewUrl);
}]);

//new analytics way
ga('send', 'pageview', {
            'page': pageviewUrl,
            'hitCallback': function() {
                console.log("%c analytics.js done sending data. pageview url = %s ", "color: black, background: pink", pageviewUrl);
            }
        });

其中pageviewUrl = 网站的URL

希望能对您有所帮助!


0
将 Google 代码封装成函数并在每个页面上执行 ;)

-1

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = 'https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXX-X';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXX-X');


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接