# 網站使用狀況分析架構

> 狀態：正式啟用／公開架構
>
> 版本：0.4.0
>
> 更新日：2026-08-23

## 為什麼需要分析

分析只用來回答公共服務是否真的幫助使用者完成下一步，例如：是否能快速找到商品或工場、哪些篩選有用、是否成功前往原單位，以及公開文件與參與入口是否被使用。

分析結果不能用來建立個人檔案、決定商品付費排序、出售受眾、評估身心障礙者，或推定電子郵件已寄出、訂單已成立。

## 啟用條件

正式站使用獨立 GA4 網站資料流 `G-8TWG8V88YT`，並只在正式部署提供格式正確的 `NEXT_PUBLIC_GA_MEASUREMENT_ID` 時顯示分析偏好。沒有 Measurement ID 的預覽、本機或停用狀態，分析元件、Google tag 與偏好介面均不載入。

即使已配置 Measurement ID，仍採 Consent Mode v2 Basic：

1. 預設將 `analytics_storage`、`ad_storage`、`ad_user_data` 與 `ad_personalization` 設為拒絕。
2. 使用者同意前，不載入 Google tag，也不向 Google 傳送無 Cookie 的量測 ping。
3. 同意後只開啟 `analytics_storage`；三項廣告權限持續拒絕。
4. 使用者可從頁尾重新開啟「分析偏好」並撤回；撤回時移除目前子網域與可能父網域的第一方 `_ga` Cookie，重新載入頁面並停止後續分析。

拒絕或撤回不影響搜尋、篩選、收藏、外部連結、公開文件或 Email 草稿功能。

## 不送出的資料

事件層採固定名稱與參數白名單。以下資料不得送往 GA：

- 姓名、公司、電話、Email 與需求內容。
- Email 草稿的主旨、本文或 `mailto:` 連結。
- 搜尋原文；只記錄字數區間、結果數與是否有結果。
- 完整外部網址；只記錄來源網域與公開資料 ID。
- 收藏清單內容、跨裝置身分、User-ID 或自訂使用者屬性。
- 健康、障礙、金融、身分證件、精確位置或其他敏感資訊。

同意後，GA4 仍會使用第一方 Cookie 的假名 client ID，並處理頁面路徑、前一頁來源、頁面標題、語言、裝置／瀏覽器、螢幕資訊與依 IP 推導的約略地理資訊；這不是匿名瀏覽。網站對自訂事件一律把 `page_location` 限制為 origin＋pathname；同站 referrer 保留 origin＋pathname，外部 referrer 只保留 origin，全部排除 query 與 hash。Google 表示 IP 只在收集時用於推導位置，不記錄或保存；正式啟用仍屬向第三方傳輸資料，必須取得同意。

為區分 LINE、公益宣傳或其他公開入口的整體成效，網站只辨識 `utm_id`、`utm_source`、`utm_medium`、`utm_campaign`、`utm_term` 與 `utm_content` 六個活動標記。每個值限 64 個英數、句點、底線、波浪號或連字號；一筆活動至少須同時具有合法的 source、medium 與 campaign。同意前只在當前頁面的記憶體保留合格值；同意後才可用原始擷取時間寫入目前分頁的 `sessionStorage`，總有效期最多 30 分鐘，且只附加在第一筆手動 `page_view`。過期、缺少核心欄位、不合法或明確拒絕分析時立即刪除，且不回退沿用上一筆活動。原始 query、完整網址、`gclid` 與 `fbclid` 均不送出。

## 事件字典

| 事件 | 用途 | 允許的主要參數 |
| --- | --- | --- |
| `catalog_search` | 判斷搜尋是否能找到結果 | 字數區間、結果數、類別、縣市、位置 |
| `catalog_filter` | 改善類別與地區入口 | 受控篩選名稱、結果數、位置 |
| `catalog_load_more` | 判斷初始結果數是否足夠 | 顯示前後筆數、總結果數、位置 |
| `select_content` | 了解站內資料卡入口 | 公開資料 ID、內容類型、位置 |
| `workshop_outbound_click` | 主要公共服務指標：前往原單位 | 資料 ID、類別、縣市、來源網域、位置 |
| `favorite_change` | 改善本機收藏 | 資料 ID、加入／移除、收藏數量 |
| `gift_outbound_click` | 中秋專題主要公共服務指標：前往公益商品或單位 | 內容群組、公開禮盒 ID、公益方向、品類、縣市、來源網域、位置 |
| `handoff_start` | 了解何處需要人工整合 | 內容群組、位置、公開禮盒或工場 ID、是否有預填 |
| `handoff_draft_created` | Email 草稿已建立 | 需求類型、是否指定品項、公開資料 ID |
| `handoff_draft_action` | 改善草稿後續操作 | 再開啟、複製或修改 |
| `participation_intent` | 改善治理與資源參與入口 | 意願類型、位置 |
| `document_raw_open` | 了解原始 Markdown 的使用 | 文件代稱、類別、位置 |
| `contact_click` | 了解公開聯絡入口是否可見 | 內容群組、公開禮盒 ID（如有）、位置；LINE 與 Email 使用不同位置代碼 |

`handoff_draft_created` 只代表網站完成 Email 草稿，不代表使用者已寄出、平台已收到或合作已成立。

## GA4 管理端設定清單

截至 2026-08-21，管理端已完成並留下以下設定：

- 使用單一正式 GA4 Property 與單一正式網站 Web Stream；預覽與本機環境不送入正式資料流。
- 整組 Enhanced Measurement 已關閉，包含自動 Page views、browser-history page changes、外部連結、表單互動、站內搜尋、下載、影片與捲動。`send_page_view: false` 本身不會關掉後台的 history-based page changes，因此管理端也維持關閉。
- 頁面瀏覽由網站在同意後手動送出一次，`page_location` 只保留 origin＋pathname；同站 referrer 保留 origin＋pathname，外部 referrer 只保留 origin，排除 query 與 hash。仍在 30 分鐘期限內的活動欄位只附加在第一筆手動 `page_view`，不在 config 或後續換頁重複設定；不得同時開啟任何後台自動 page view。
- Google Signals、廣告個人化、精細位置與裝置資料、User-ID、使用者提供資料及跨網域追蹤均關閉；所有地區都不允許廣告個人化，且不連結 Google Ads。
- Email 遮罩已開啟，並遮罩 14 個可能含聯絡或搜尋內容的 query parameter；遮罩只是最後防線，不能取代前端白名單。
- 事件與使用者資料保留均採隱私優先的 2 個月，且不因新活動重設使用者資料保留期。
- 只登錄 9 個事件範圍的受控自訂維度：版位、內容群組、公開內容 ID、公益禮盒 ID、庇護工場資料 ID、公開地區、來源網域、公益方向與商品品類；不登錄完整網址或自由文字。
- Key events 以 `gift_outbound_click`、`workshop_outbound_click` 與 `handoff_draft_created` 為主要候選；LINE 點擊與 Email 草稿不寫成訂單、成交或已送出訊息。

## 驗收要求

每次啟用或修改分析時，至少確認：

- 未同意前沒有對 `googletagmanager.com` 或 Google Analytics 的網路請求。
- 同意後，初次載入與每次站內換頁各只有一次 `page_view`；同頁錨點不增加頁面瀏覽。
- 搜尋、表單與 Email 草稿事件不含自由文字或個資。
- 帶測試 UTM 的頁面仍以乾淨 pathname 傳送 `page_location`，且只出現對應的受控 `campaign_*` 欄位。
- 缺核心欄位、非法或超過 30 分鐘的活動標記不沿用舊活動；外部 referrer 不含來源網站路徑。
- 拒絕、同意、撤回與清除網站資料後的狀態都符合說明。
- 沒有 Measurement ID 或分析程式載入失敗時，網站核心功能仍可使用。

## 變更與治理

新增事件、供應商、資料用途、保存期間、廣告功能、跨網域或識別能力前，必須先更新本文件、[隱私說明](./PRIVACY.md)、[安全政策](./SECURITY.md)與[變更紀錄](./CHANGELOG.md)。贊助者、工場、維護者或分析供應商均不能以資源交換個人資料、商品排序或未公開的分析存取權。

## 官方參考

- [Google：Consent Mode 基本與進階模式](https://developers.google.com/tag-platform/security/concepts/consent-mode)
- [Google：設定 Consent Mode](https://developers.google.com/tag-platform/security/guides/consent)
- [Google Analytics：單頁應用程式量測](https://developers.google.com/analytics/devguides/collection/ga4/single-page-applications)
- [Google Analytics：避免傳送個人識別資訊](https://support.google.com/analytics/answer/6366371)
- [Google Analytics：資料保留](https://support.google.com/analytics/answer/7667196)
