如果你給博客啟用了統計程式碼,那麼在本地測試的時候,統計程式碼也會運行,帶來大量 localhost 的無效訪問記錄,影響數據準確性。同時,我還有一個測試用的域名,我在訪問這個域名的時候,也不想觸發統計程式碼。
那麼,如何讓統計程式碼只在我的生產域名 blog.yfi.moe 上運行呢?
前置知識#
本文的方法只對使用這類方法添加的追蹤程式碼有效。如果使用的是主題提供的方法,可能需要自行修改主題文件,不在本文討論範圍之內。
修改#
先貼成品吧:
這樣的 js 程式碼被注入之後,只會在目前域名為 `blog.yfi.moe
<script>
var host = window.location.host;
if (host == "blog.yfi.mo") {
// google analytics 1
(function () {
var ggtag = document.createElement('script');
ggtag.async = true;
ggtag.src = 'https://www.googletagmanager.com/gtag/js?id=G-*******'; // 修改這裡的 G- 代碼
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ggtag, s);
})();
//google analytics 2
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-********'); // 修改這裡的 G- 代碼
// umami
(function() {
var analytics = document.createElement('script');
analytics.async = true;
analytics.src = 'https://change-to-your.domain/script.js'; // 修改為自己的域名
analytics.setAttribute('data-website-id', 'e0****a7-****-****-****-88e5****5132'); // 改為你的追蹤 id
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(analytics, s);
})();
}
</script>
簡單的說,就是要在執行程式碼之前做一個判斷,如果當前網頁的域名是 blog.yfi.moe
則運行統計程式碼的 script,否則不運行。
問了下 ChatGPT,如何獲取當前的域名,答曰使用 window.location.host
方法,再問,如何將 <script async src="https://www.googletagmanager.com/gtag/js?id=G-*******"></script>
這類 script 轉為純 js 的樣式,答曰:
(function () {
var ggtag = document.createElement('script');
ggtag.async = true;
ggtag.src = 'https://www.googletagmanager.com/gtag/js?id=G-*******';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ggtag, s);
})();
有點怪,應該不是最優方案,但是試下來可以用,雖然不知道 async 到底有沒有起到作用,就這樣吧。
Google 給的程式碼有兩段,第二段本身就是 js,直接用就行
umami 的程式碼也是同理。