本篇目錄(7 節)
上一篇講了六路資料接起來會看到什麼。這一篇講的是接之前的那道工:為什麼原始數字不能直接拿來用。
先講結論:多數人以為資料的敵人是「髒」,其實真正的敵人是「對不齊」。髒的資料看得出來,對不齊的資料每一筆都對,合起來卻是錯的。
我遇到的問題分三種,一種比一種難發現。
第一種:同一篇文章,機器認得出三個不同的它
我這個網站換過站台,網址格式改過;有些連結帶標題,有些不帶;有些連結後面還掛著跳到某個小標的錨點。
對讀者來說這些全部是同一頁。對機器來說,那是三筆不同的紀錄。
EX:
原本文章網址是
domain.com?p=987
後來改為
domain.com/p/987
這種時候就必須要做資料清洗與合併,不然~~~
後果很直接:這篇文章的成績被切成三份。
單獨看每一份都不起眼,於是它在任何排行榜上都排不進去——不是因為它表現差,是因為它被拆開了。
這種髒是最容易發現的一種,因為只要有人手動去查一篇自己熟悉的文章,就會發現數字對不上。麻煩的是它會一直長出新的變體:每一次改網址、每一次搬家、每一次有人用不同方式連進來,就多一種寫法。
這裡有一個看起來很聰明、其實會出事的做法:用關鍵字去模糊比對網址。想找編號 6171 那篇,就去撈網址裡含有 6171 的列。問題是 61710 也含有 6171,還有 6171 後面接別的數字的頁。撈出來的數字會莫名其妙比實際大,而且完全不會報錯。
所以處理方式不是「清一次」,是在中間加一層翻譯:不管進來的是哪一種寫法,都先精確解析出那篇文章的編號,再開始算。
這一層要是沒有,後面所有數字都在對不同的東西加總。
第二種:比率不能相加,所以我不把比率存起來
這一種開始反直覺了。
假設我想知道兩天平均的點擊率。
直覺做法是把第一天的點擊率和第二天的點擊率加起來除以二。這個算法在兩天的曝光量差不多時勉強可用,但只要一天曝光一萬次、另一天曝光十次,答案就會嚴重偏掉——那十次曝光的日子,在平均裡被當成和一萬次一樣重要。
正確做法是回到原始的分子和分母:兩天的點擊數加起來,除以兩天的曝光數加起來。
所以我在資料層只留兩種東西:分子(點擊、收益、次數)和分母(曝光、人數)。所有比率都不存,要看的時候現算。
這條規則寫下來的理由很現實:只要那個比率被存進某張表,遲早會有人(包括我自己,包括 AI)把兩列比率拿去平均,而且算出來的數字看起來很合理,沒有任何地方會報錯。錯誤不會跳出來,它會安靜地躺在報表裡。
同樣的道理延伸出另一條:不同切面的數字不能疊。
這一條我是真的踩過。Google Search Console 的資料拉回來之後,同一天會同時有「全部國家的總計」這一列,和台灣、香港、美國這些單一國家的列。它們並存在同一張表裡。如果不先篩掉其中一種就直接加總,那天的曝光會變成兩倍——而報表不會有任何異常,只是看起來「這個月成長得特別好」。
同一天按國家分是一份完整的量,同一天按裝置分也是一份完整的量,兩者一樣不能相加。
第三種:五個來源都很乾淨,但時間刻度全都不一樣
這是最難的一種,也是我花最多時間的地方。
我手上的資料來源,時間刻度全都不一樣,而且不是我能決定的:
- Google Search Console:關鍵字這一層最細只到週,而且只保留十六個月,超過就永遠拿不回來。
- Bing Webmaster Tools:查詢這一層只有週,連國家都不分。
- GA4:我存的是月。
- Cloudflare 免費方案的流量紀錄:每日,但只保留七天。抓取程式哪天沒跑成功,那幾天就是永久的洞。
- AdSense:每日,但「逐篇文章」那個維度只留大約二十天,掉出窗口就再也查不到某一篇當時賺了多少。
這幾行加起來的意思是:這些資料沒有一個共同的時間單位。
除了刻度不一樣,每一家還各有自己的缺角。Google Search Console 的關鍵字表裡根本沒有「哪一頁」這個欄位,所以「某篇文章這個月有多少曝光」不能從關鍵字表硬湊出來,得走另一組資料。Bing 的逐頁資料是一頁一頁去問的,中間哪一頁失敗它不會吭聲,資料看起來完整、其實少了幾頁。至於「被 AI 引用」這件事,目前沒有任何一家提供正式的介面,能拿到的都要人工從後台匯出。
於是有些問題在結構上就問不出來。
第一個問不出來的是「這一篇三年來的真實軌跡」。它跨過網址改版,又撞上 Search Console 十六個月的保留上限——網址可以靠翻譯層合併,但更早的那段資料根本不存在,任何工具都變不出來。
第二個是「這禮拜發生了什麼」。週資料最快也要等一週結算完才看得到;真正即時的只有爬蟲那一路,而它回答的是機器來過,不是人怎麼想。
第三個是「這個月的變化是真的變化,還是每年這時候都這樣」。要回答它得跟去年同月比,而那需要至少兩年的同源資料,我手上只有 Search Console 這一路真的滿足。
所以清洗的本質是判斷,不是計算
如果清洗只是「把髒的洗掉」,那它是純技術工作,寫好程式就結束了。
但第三種問題不是髒。每一家的資料各自都完全正確、都很乾淨,問題出在它們要被放進同一句話裡。而「要不要放進同一句話、放進去之後這句話還能不能算數」,這件事沒有標準答案,是判斷。
舉個具體的:我想說「這篇文章這個月變差了」。Search Console 給我的是四個星期,GA4 給我的是一個完整日曆月,兩者的區間不一樣。要不要就這樣比?可以比,但結論只能說到「方向一致」,不能說到「掉了幾成」。
這個分寸沒有人會幫你把關。程式不會報錯,報表也會照樣長出一個數字。唯一的守門是有人知道這兩個數字的出身不同。
下一篇講另一件也常被誤會是純技術的事:電腦怎麼知道兩個寫法完全不同的詞,其實在問同一件事。
本文關鍵字:資料清洗、Google Search Console、GA4、比率不可加、資料粒度、內容數據分析
本篇摘要
老喬談資料在能用之前要過的那道工。核心主張是多數人以為敵人是髒,其實是對不齊:髒的資料看得出來,對不齊的資料每一筆都對、合起來卻是錯的。第一種問題是同一篇文章被機器認成好幾筆,因為換過站台、網址格式改過、有些連結帶錨點,成績被切成好幾份而排不進任何排行榜;文中點名一個看似聰明其實會出事的做法——用模糊比對找網址,想找編號 6171 會把 61710 也撈進來,數字莫名變大且完全不報錯,正解是精確解析出文章編號再開始算。第二種是比率不能相加:兩天的點擊率直接平均,在一天曝光一萬次、另一天十次時會嚴重偏掉,所以資料層只存分子與分母、比率一律現算,理由是比率一旦存起來遲早被拿去平均而且不會報錯。延伸的實際案例是 Google Search Console 拉回來的資料同一天會有全部國家總計與各單一國家的列並存,不先篩掉一種直接加總,那天曝光會變兩倍而報表只是看起來成長特別好。第三種也是最難的是時間刻度不一致:Search Console 關鍵字層只到週且只留十六個月、Bing Webmaster 查詢層只有週且不分國家、GA4 存月、Cloudflare 免費方案每日但只留七天、AdSense 逐篇維度只留約二十天;此外每家還各有缺角,Search Console 的關鍵字表沒有頁面欄位、Bing 逐頁資料失敗時靜默略過、被 AI 引用沒有任何正式介面只能人工匯出。結論是清洗的本質是判斷不是計算:各家資料都乾淨,問題在它們要被放進同一句話,而程式不會報錯,唯一的守門是有人知道這兩個數字的出身不同。
- 資料真正的敵人不是髒而是對不齊:髒的資料看得出來,對不齊的資料每一筆都對、合起來卻是錯的
- 同一篇文章因換站台、網址格式、錨點被機器認成多筆,成績被切成好幾份,排不進排行榜不是因為表現差而是被拆開
- 用模糊比對找網址會出事:找編號 6171 會連 61710 一起撈進來,數字莫名變大而且完全不會報錯
- 比率不能相加:兩天點擊率直接平均,在曝光量懸殊時會嚴重偏掉;資料層只存分子與分母,比率一律現算
- Google Search Console 拉回來的資料裡,同一天有全部國家總計與各單一國家的列並存,不先篩掉一種就加總,曝光會變兩倍而報表毫無異常
- 五個來源的時間刻度都不一樣:Search Console 關鍵字層到週且留十六個月、Bing 只有週且不分國家、GA4 存月、Cloudflare 免費方案每日但只留七天、AdSense 逐篇維度只留約二十天
- 每一家還各有缺角:Search Console 關鍵字表沒有頁面欄位、Bing 逐頁資料失敗時靜默略過、被 AI 引用目前沒有任何正式介面只能人工匯出
- 三個結構上問不出來的問題:單篇三年的真實軌跡、這禮拜發生了什麼、這個月是真變化還是季節性
想看更多網站經營實測?
真實數字,每週一封寄給你
