我已将所需的 JavaScript 添加到我的页面底部,以便我可以使用 Google Analytics。唯一的问题是,我确信它会将我所有的开发工作都算作成功。鉴于我每天可能会看到其中一些页面一百次,这真的会影响我的阅读。有没有办法从特定的 IP 地址将其关闭,或者这是否应该内置到我的构建过程中,以便仅在我构建部署时添加?
24 回答
我喜欢使用 javascript 的简单方法。它可以在任何地方工作。
<script type="text/javascript">
if (document.location.hostname.search("myproductiondomainname.com") !== -1) {
//google analytics code goes here
}
</script>
是的,您进入分析设置,编辑您的网站,然后 + 添加过滤器来定义一个排除您的 IP 地址的过滤器。
过去的数据不会在应用过滤器的情况下重新生成,因此您只会受益于它们向前发展。
现在是 2014 年,我仍然对所有现有的解决方案不满意......
- IP 过滤器需要静态 IP 地址。如果我在家或在咖啡店工作怎么办?
- 检查主机名可以消除来自开发环境的命中,但是如果我正在调试实时站点怎么办?
- 编辑服务器配置很烦人/高级,并且多个域很复杂。
- Opt-Out 扩展程序要么阻止所有网站上的点击,要么根本不阻止点击,具体取决于您询问的对象。
所以,我创建了自己的浏览器扩展... https://chrome.google.com/webstore/detail/lknhpplgahpbindnnocglcjonpahfikn
- 无论我走到哪里,它都跟着我
- 它适用于开发环境和实时/公共域
- 它只会影响我和我正在开发的网站
- 一键开启/关闭
- 很容易验证它确实没有向分析发送任何数据
它的工作原理是始终为您选择的域在您的机器上设置一个“开发者 cookie”。然后,您只需在脚本中检查此 cookie,然后再将任何数据发送到 Analytics。您可以在扩展程序的设置中为 cookie 自定义您自己的唯一名称和值。这可以很容易地被一组人使用,因此开发人员、内容创建者、校对人员以及您组织中的任何其他人都可以查看页面而不会夸大统计数据。
如何将代码放入页面的示例...
JavaScript
if (window.location.host==="mydomain.com" || window.location.host==="www.mydomain.com") {
if (document.cookie.indexOf("COOKIENAME=COOKIEVALUE") === -1) {
// Insert Analytics Code Here
}
}
PHP
if ($_SERVER['HTTP_HOST']==="mydomain.com" || $_SERVER['HTTP_HOST']==="www.mydomain.com") {
if (@$_COOKIE["COOKIENAME"] !== "COOKIEVALUE") {
// Insert Analytics Code Here
}
}
验证主机名称是否等于您的实时站点的域(“mydomain.com”)确保分析数据永远不会被任何访问者发送,同时从“localhost”或“beta.mydomain.com”等测试域查看. 在上面的示例中,“www.mydomain.com”和“mydomain.com”是我们希望记录访问的两个有效域。
除非找到具有匹配值的开发人员 cookie,否则实时站点会按预期将数据发送到分析。如果它看到您的设备上设置了唯一的 cookie,那么您的访问将不计入您在 Google Analytics 或您喜欢使用的任何其他分析工具中的总数。
随时分享我的解决方案并使用我的扩展程序来设置这些 cookie。
您可以使用此代码
<script>
var host = window.location.hostname;
if(host != "localhost")
{
// your google analytic code here
}
</script>
我们为开发和 QA 工作设置了第二个谷歌分析跟踪代码——当您想要测试您的分析集成时实际上会派上用场,还可以确保不会泄露到生产统计数据中。
解决方案是使用Google Tag Manager (GTM) 来处理您的 Google Analytics。这将允许您仅在您的生产域上触发 Google Analytics,而无需在您的站点代码中编写任何条件。这是如何做到的:
在 GTM 中,设置仅在页面主机名包含您的生产域时触发的触发器。
然后为 Universal Analytics 设置一个标签,并将其触发器设为您刚刚创建的触发器。
如果您在 NAT 之后或由于其他原因无法将您的 IP 提供给 Google Analytics,那么最简单的方法是将 google Analytics 域设置为 localhost (127.0.0.1),从现在开始,当您打开浏览器时,所有请求在不了解 Google Analytics 的情况下,Google Analytics 将被定向到您的工作站。
要禁用本地主机命中,只需创建一个过滤器以排除本地主机。转到管理 -> 属性 -> 查看设置以执行此操作。检查以下屏幕截图以获得一些帮助。
如果您使用非静态 IP 访问,要为自己禁用生产 URL 命中,您可以使用 Chrome 扩展程序(如Developer Cookie)跳过运行 Google Analytics(分析)代码(如果是您)。
我个人不这样做,因为我使用的广告拦截器已经在我的浏览器上阻止了 Google Analytics。
在您的 Google Analytics(分析)异步代码运行之前添加此行,以禁用对该网络媒体资源 ID 的跟踪:
window['ga-disable-UA-XXXXXX-Y'] = true;
UA-XXXXXX-Y
对应于您要禁用跟踪的网络媒体资源 ID。
来自:https ://developers.google.com/analytics/devguides/collection/gajs/
有一些 Chrome 扩展程序可以为您执行此操作,例如https://chrome.google.com/webstore/detail/fadgflmigmogfionelcpalhohefbnehm
如果您的 IP 地址不是静态的,则非常方便。
使用自定义指标过滤所有这些流量。
当你在你的应用程序中初始化 GA 时,设置一个自定义标志来跟踪开发人员:
// In your header, after the GA code is injected
if( <your_code_to_check_if_is_dev> ) {
ga('set', 'is_developer', 1 );
}
然后在您的 GA 帐户中添加过滤器以删除这些结果。
管理员 > 帐户 > 所有过滤器 > 添加过滤器 > 用户定义
我使用 Firefox 的 Ad Blocker,它可以专门阻止 Google 分析跟踪脚本。由于 firefox 是我的主要开发浏览器,因此它运行良好,直到我需要在其他浏览器中测试我的工作。
可能对您没有帮助,但我通过编写一个注入所需 JavaScript 的自定义 ASP.NET 服务器控件解决了这个问题。然后,我将实时 URL 添加到 web.config,然后仅当主机名与 web.config 中的实时 URL 匹配时才使控件可见。
如果您有一个反应应用程序并且您已经退出了该应用程序(这也适用于 CRA)。您可以在index.html
页面中使用以下代码片段。
<script type="text/javascript">
if("%NODE_ENV%"==="production"){
//your analytics code
}
作为一个额外的选择,我有一个包含许多不同站点和开发人员的开发服务器。这意味着我对 3 个主要选项不是特别满意
- 主机文件 - 许多开发人员存在问题并且容易出现人为错误
- 每个站点上的 if/else 开发块等
- GA网站上的配置——一些客户有自己的GA账户;必须在每个可能被遗忘/忽视的网站上完成
我没有在此处的其他答案中实施各种选项,而是通过以下方式解决了这个问题。在全局 httpd.conf(而不是特定于站点的)中,我使用了 apache 模块mod_substitute来模拟另一个答案中主机文件修复的效果,但对于每个开发站点和每个开发人员都是自动的。
启用模块
CentOS:打开/etc/conf/httpd.conf
并添加以下行
LoadModule substitute_module modules/mod_substitute.so
Ubuntu/Debian:运行以下命令
sudo a2enmod substitute
启用模块后,将以下行添加到 httpd 全局配置文件
中央操作系统:/etc/conf/httpd.conf
Ubuntu/Debian:/etc/apache2/httpd.conf
# Break Google Analytics
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|.google-analytics.com|.127.0.0.1|n"
然后重启apache
中央操作系统:service httpd restart
Ubuntu/Debian:/etc/init.d/apache2 restart
这样做是在 apache 为页面提供服务时将所有匹配 .google-analytics.com 的文本替换为 .127.0.0.1,以便您的页面使用类似于以下示例的分析代码呈现
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '']);
_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') + '.127.0.0.1/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
就像人们提到的那样,您可以在本地托管 google-analytics.com 域,也可以设置一个函数来查看您是否在开发网络中工作。
请记住,如果http://www.google-analytics.com/ga.js未加载并且您使用 onclick javascript 函数来帮助跟踪页面元素的点击。
IE: onclick="javascript:pageTracker._trackPageview('/made/up/folder/reference');
您将遇到 JavaScript 错误,这些错误将阻止 jQuery 或其他强大的 JavaScript 函数运行。
我知道这篇文章已经很老了,但没有一个解决方案能满足我的需求。我不仅想从 GA(和 FB)中删除开发工作,而且我还想让公司内的一些人不计入 GA 和 FB。因此,我想要一种相对简单的方法,让这些人在没有插件的情况下将自己排除在分析之外,或者排除域 ip(就像使用笔记本电脑的人一样)。
我创建了一个网页,用户可以访问并单击链接以选择退出 GA 和 FB 跟踪。它为网站放置一个 cookie。然后我检查那个 cookie 以确定我们是否应该向 GA 和 FB 发送数据。
我最初将其设置在一个名为Dahlia 的网站上,该网站是希腊东正教婚礼和洗礼用品的精品制造商。
这是代码:
我将以下代码放在所有网页的标题中:
<script>
//put in your google analytics tracking id below:
var gaProperty = 'UA-XXXXXXXX-X';
// Disable tracking if the opt-out cookie exists.
var disableStr = 'ga-disable-' + gaProperty;
if (document.cookie.indexOf(disableStr + '=true') > -1) {
window[disableStr] = true;
window['ga-disable-UA-7870337-1'] = true; //This disables the tracking on Weebly too.
} else {
//put in your facebook tracking id below:
fbq('init', 'YYYYYYYYYYYYYYY');
fbq('track', 'PageView');
}
</script>
请务必在提供的空白处添加您的 GA 和 FB 跟踪 ID。这最初是为 Weebly(购物 CMS)网站编写的。因此,如果您不在 Weebly 上,您可以删除提及 weebly 的行。
然后我创建了一个名为“do-not-track”的新网页,标题中包含以下代码:
<script>
//put in your own google analytics tracking id below:
var gaProperty = 'UA-XXXXXXXX-X';
var disableStr = 'ga-disable-' + gaProperty;
// Opt-out function
function gaOptout() {
document.cookie = disableStr + '=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/';
window[disableStr] = true;
gaOptoutCheck();
}
// Check Opt-out function
function gaOptoutCheck() {
var name = "ga-disable-"+gaProperty+"=";
var ca = document.cookie.split(';');
var found = "false";
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) == 0) found = "true";
}
if (found == "true") alert("Cookie is properly installed");
else alert("COOKIE NOT FOUND");
}
</script>
以及正文中的以下代码:
<a href="javascript:gaOptout()">Click here to opt-out of Google and Facebook Analytics</a>
<br><br>
Please visit this page on every computer, laptop, phone, tablet, etc. that you use;
and for all browser you use on each of those devices.
<br><br>
If you ever remove cookies from browser, you will need to repeat this process for that browser.
<br><br><br>
<a href="javascript:gaOptoutCheck()">
Click to check if cookie is set</a>
<br><br>
希望这对某人有帮助!
获取请求主机变量。
因此,像这样(Ruby-esque 伪代码)围绕分析 javascript 包装一个 if 语句:
<body>
<shtuff>dfsfsdf</shtuff>
if not (request.host == 'localhost')
#analytics code here
elsif (request.host == the server's ip/domain)
#analytics code here
else
#do nothing
end
</body>
我为我的本地开发设置了一个 PHP 变量,它为我提供了一个终端,用于在我处理东西时提供数据/反馈等。
我使用 XAMPP,因此它有一个 tmp 的 env 变量,如下所示:
$isLocal = (getenv("tmp") == '\xampp\tmp') ? true : false;
这在我的生产服务器上不存在,因为没有使用 xampp
if($isLocal){
// do something, eg. load my terminal
}
...具体到这个问题:
<?php if(!$isLocal){ ?>
<!-- Insert Google Analytics Script Here -->
<?php } // end google analytics local check ?>
今天,当我在与我自己不同的计算机上时,我注意到 μBlock Origin for Chrome 默认阻止了 Google AdSense。经过一番谷歌搜索,我找到了这篇文章。它还指出,默认情况下,μBlock Origin Firefox、Firefox 的 μ Adblock 和 Windows 的 Ad Muncher 会阻止 AdSense。列出的大多数其他选项可配置为阻止 AdSense。
这似乎可行并且很有用,因为我的 IP 通常是动态的,因此只要我登录 Chrome,Chrome 扩展程序就可以跟随我。
我正在使用此代码禁用google analytics
in rails 6
。production
admin
登录时,我将is_developer
cookie 设置为google analytics
禁用1 year
。
如果admin
注销,我不会删除is_developer
cookie。因此,注销google analytics
后将被禁用。admin
测试后可以全部评论console.log
。
<% if Rails.env.production? %>
<% ga_tracking_id = 'G-36......Y6' %>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=<%= ga_tracking_id %>"></script>
<% if user_signed_in? && current_user.admin? %>
<script>
if(document.cookie.indexOf('is_developer') > -1) {
console.log('gtag:- is_developer cookie already set');
} else {
document.cookie = `is_developer=1; expires=${new Date(new Date().getTime()+1000*60*60*24*365).toGMTString()}; path=/`;
console.log('gtag:- is_developer cookie set for 1 year');
}
</script>
<% end %>
<script>
if(document.cookie.indexOf('is_developer') > -1) {
console.log('gtag:- disabled for developer');
} else {
console.log('gtag:- enabled');
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '<%= ga_tracking_id %>');
}
</script>
<% end %>
如果您有任何建议,请在下方评论。
localhost
不幸的是,使用App + Web Properties类型的设置时,似乎无法从报告中排除:
仅显示 Web 属性的过滤器。过滤器不能应用于应用 + 网络媒体资源。
对于 nextjs Web 应用程序,尤其是那些正在使用static generation
或SSR
这将起作用的应用程序:
在你的 document.tsx
export default class MyDocument extends Document {
render() {
return (
<Html lang="en">
. . . . .
<body>
<Main />
<NextScript />
{process.env.NODE_ENV === 'production' ? injectAnalytics() : ''}
</body>
</Html>
);
}
}
whereinjectAnalytics
是一个返回 GA 代码的函数,例如:
function injectAnalytics(): React.ReactFragment {
return <>
{/* Global Site Tag (gtag.js) - Google Analytics */}
<script
async
src={`https://www.googletagmanager.com/gtag/js?id=${GA_TRACKING_ID}`}
/>
<script
dangerouslySetInnerHTML={{
__html: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
window.gtag = gtag;
gtag('js', new Date());
gtag('config', '${GA_TRACKING_ID}', {
page_path: window.location.pathname,
});
`,
}}
/>
</>
}