English version: If the page has id=”ga”, google analytics with gtag will not receive sessions.
首先,August 不想下個「做了這件事以後,GA 就收不到流量,知道原因後朋友們都跪了」之類的標題殺人法,所以先在標題跟第一段先說結論:
如果頁面的 HTML,有出現 id="ga"
,而埋 GA code 的方式又是 gtag 的話,那 GA 就會收不到這頁的瀏覽量。
以下是從發現問題到找到問題,最後解決問題的過程。
因為目前還沒在網路上找到因為頁面有 id="ga"
就收不到流量的文章,所以寫了這篇,希望大大們可以避免,或是也發生一樣問題的頁面可以解決這問題。
發現問題
收不到流量這是前幾天慘痛的經驗。在寫完以下兩篇後:
原本是要比較一下中文、英文流量有沒有差異的,可是一天過去了,兩天過去了,這兩篇在 Google Analytics 的流量一直是 0。
奇怪的是,在看 Hotjar 時,有看到有人進到中文那篇在觀看。FB 的分享也有朋友點讚,怎麼樣都會有人進來晃晃吧?但 GA 確實一直沒收到數據。
而且點進其他篇,其他篇一樣可以收到流量,就這兩篇不行。
然後就打開 GA Debugger,開始一系列的找 bug 過程。
找到問題
一開始是懷疑因為裝了禁止 GA 追蹤的擴充功能「Google Analytics (分析) 不透露資訊外掛程式」所以沒收到流量,移掉後,即時報表還是沒看到瀏覽量進來。
接著想到,發文前一天,想來試一下 AB/ test,埋 GA tracking code 時,有加了 Google Optimize 的 config,就去 Optimize 結束 A/B test,但一樣,GA page view 一樣沒送出。
然後又想,難道是自訂維度的 code 寫錯了?那 自訂維度的使用 那篇不就要重寫?好險,即便刪掉自訂維度的事件,一樣是沒收到流量。
接著又試著刪掉 GA 事件追蹤、service-worker.js、Mixpanel,都沒解決 GA 收不到瀏覽量的問題。
最後,只好採取土法煉鋼的方式,把頁面下載成靜態的 HTML 檔,一行一行刪,看刪到哪一行可以讓 GA 正常運作。
一般找前端的 bug,第一個先找的是 JavaScript,因為 JS 最可能把 AJAX 擋下。
先把頁面上引用的 JS、直接寫的 <script>
都刪掉,如果發現流量進來了後,再來找是哪個檔案造成的。
結果:刪完後還是收不到流量。
CSS 會影響嗎?疑惑之下還是刪了,引用的跟頁面上的 <style>
都刪。
結果:一樣沒收到流量。
好吧,只好看其他 HML 的部分,先刪 <head>
裡的,沒作用。
再刪掉整個 body
,嗯?GA 收到流量了!
那可以肯定的是,是前端頁面的問題,而不是 GA 設定或是 Server 的問題。
HTML 一行一行刪下去,在刪掉這一行:
<h3> <span class="ez-toc-section" id="ga" tabindex="-1">ga</span> </h3>
GA 就能收到流量,終於找到問題了,這一行問題會跟 GA 有關的就是 id="ga"
。
不過 August 也疑惑,為什麼會寫出 id="ga"
這行?感覺這個 id 就會是 Google Analytics 的保留字。
看了頁面才發現,為了讓頁面增加內部連結,也為了讓大家閱讀方便,August 有裝「Easy Table of Contents」這個外掛,id 是由這個外掛自動生成的,他會去判斷標題裡的英文,自動把英文變成這個標題的 id,結果那兩篇都有個標題就叫「GA」。
解決問題
一開始是先俢改標題的文字,原本標題是「GA」,就改成「GA code」,讓外掛生成的 id 變成 ga-code。
這在英文那篇沒問題,但在中文那邊有個問題,就是 Easy Table of Contents 只會抓標題裡的英文當 id,而中文那篇有一個標題是「會埋 GA 事件的好處」,外掛就只抓了 ga 出來,不得已下只好把標題改成「會埋 GA Event 的好處」。
再說一次 GA 流量是 0 的原因
這很重要,這是真人真事非改編悲劇換來的經驗,所以最後再說明一次:
如果頁面的 HTML,有出現
id="ga"
,而埋 Google Analytics 的方式又是 gtag 的話,那 GA 就會收不到這頁的瀏覽量。
想來很少人會回報之前 Easy Table of Content 出的問題及後續處理結果…
只要標題不是純英文,當時都會發生一樣的問題,於是就有外掛使用者回報了,當然後來也解了這個問題。
現在 Easy Table of Content 能正確處理非英文標題,ID 值會是完整標題。舉例來說,如果內容標題為「Facebook 原有的貼文分享方式」,則其內容目錄錨點 ID 值為「#facebook-原有的貼文分享方式」。