在網站上設定同意聲明模式

本文適用於在網站上維護自有同意聲明解決方案,且想整合同意聲明模式的開發人員。如需同意聲明模式簡介,請參閱「同意聲明模式簡介」。如果您使用同意聲明管理平台 (CMP) 取得使用者同意聲明,請參閱這篇文章,進一步瞭解如何透過 CMP 設定同意聲明模式。

您可以採用基本或進階方式導入同意聲明模式。請參閱貴公司的指南,選擇導入方法和要設定的預設值。進一步瞭解基本與進階同意聲明模式。

事前準備

導入同意聲明模式前,請注意以下事項:

  • 如果您使用代碼管理工具,且想自行維護橫幅,建議透過代碼管理工具容器載入橫幅。如要這麼做,您需要建立同意聲明模式範本。或者,您也可以使用社群範本庫中的同意聲明模式範本。

  • 如果您使用 gtag.js,請務必在網站的每個網頁上加入 Google 代碼。同意聲明模式程式碼會加到網站的每個網頁。

如要設定同意聲明模式,請完成下列事項:
  1. 使用者授予同意前:設定預設同意聲明狀態。
  2. 根據使用者與同意聲明設定的互動更新同意聲明狀態。

為使用的每種同意聲明類型設定預設值。系統不會預設任何同意聲明模式值。

建議將預設的同意聲明設定限制在向訪客顯示同意橫幅的區域。這樣在需要使用同意橫幅的區域,就能保存成效評估資料,Google 代碼也會據此調整行為。而且,即使沒有同意橫幅資料或同意橫幅不適用,評估結果也不會因此受到影響。請參閱「區域專屬行為」。

代碼管理工具

如果您使用 Google 代碼管理工具,請利用代碼管理工具同意聲明 API 自行建立範本。您可以參考下列範例做為起點。

使用代碼管理工具專屬的 API 管理同意聲明狀態 setDefaultConsentState 和 updateConsentState。您可以視需要使用 gtagSet API 設定 ads_data_redaction 和網址傳遞設定。

gtag.js

如要調整預設的評估功能,請在網站的每個網頁上,於任何傳送評估資料的指令 (例如 config 或 event) 之前,呼叫 gtag('consent', 'default', ...) 指令。

舉例來說,如要預設拒絕所有參數的同意聲明:

gtag('consent', 'default', {
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'analytics_storage': 'denied'
});

選用:與非同步同意聲明管理平台整合

如果橫幅是以非同步方式載入,則有時可能無法在 Google 代碼之前執行。如要處理這類情況,請指定 wait_for_update 和毫秒值,控制傳送資料前的等待時間。

舉例來說,如要預設拒絕特定網頁上的 ad_storage,但允許 CMP 更新同意聲明狀態,請使用 wait_for_update。在下列程式碼中,ad_storage 預設為 denied,且同意聲明工具有 500 毫秒的時間呼叫 gtag('consent', 'update', ...),之後標記就會觸發:

  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'wait_for_update': 500
  });

代碼管理工具

使用同意聲明模式範本時,使用者與橫幅互動後,系統應會自動更新使用者同意聲明。

如果您自行建立同意聲明模式範本,請使用代碼管理工具專用 API 管理同意聲明狀態 setDefaultConsentState 和 updateConsentState。gtagSet API 可用於視需要設定 ads_data_redaction 和網址傳遞設定。

gtag.js

如要傳送使用者的同意聲明狀態,請使用 update 指令。同意聲明模式不會儲存同意聲明選項,因此只要使用者與同意聲明管理工具互動,就應立即更新同意聲明狀態。使用者表示同意後,請保留他們的選擇,並在後續頁面上呼叫相應的更新指令。

您有責任確保所有同意聲明類型都設定正確的值。 如要進一步瞭解支援的類型,請參閱 API 參考資料。

以下程式碼範例說明如何將同意聲明狀態更新為 granted,表示使用者同意所有選項:

<!-- Send consent updates when users interact with your consent banner -->
<script>
function allConsentGranted() {
  gtag('consent', 'update', {
    'ad_user_data': 'granted',
    'ad_personalization': 'granted',
    'ad_storage': 'granted',
    'analytics_storage': 'granted'
  });
}
</script>
<!-- Invoke your consent function when a user interacts with your banner -->
<body>
  ...
  <button onclick="allConsentGranted()">Accept all</button>
  ...
</body>

使用者可以在初步互動後變更同意聲明偏好設定。舉例來說,使用者一開始可能同意,但之後決定透過網站的設定面板撤銷同意。

代碼管理工具

如果您使用同意聲明模式範本,當使用者與橫幅或設定面板互動時,系統應會自動更新使用者的同意聲明。

如果您自行建立同意聲明模式範本,請在使用者確認新偏好設定時,使用 updateConsentState API 更新同意聲明狀態。

gtag.js

如要隨時更新同意聲明狀態,請使用 update 指令。這個指令用於同意聲明狀態的任何變更,包括從 'granted' 變更為 'denied'。

範例:撤銷同意聲明

如果使用者先前已同意 analytics_storage 和 ad_storage,但現在想拒絕同意,請傳送 update 呼叫,反映他們的新選擇:

// User updates their settings to deny consent
gtag('consent', 'update', {
  'analytics_storage': 'denied',
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied'
});

導入注意事項:

  1. 持續性:確保使用者的最新同意聲明選項持續有效 (例如儲存在第一方 Cookie 或本機儲存空間),以便在後續載入網頁時設定正確的狀態。
  2. 時機:使用者在網站的同意聲明設定介面中確認新偏好設定後,請立即呼叫更新指令。

導入範例

以下範例預設將多個同意聲明模式參數設為 denied。使用者表示同意與否後,相關參數會更新為 granted。

代碼管理工具

如果網站使用代碼管理工具,建議使用 CMP 處理訪客同意聲明選項的更新。CMP 會在社群範本庫中提供範本,方便您建立代碼來管理同意聲明模式。

如果無法使用範本,可以改為按照下列方式更新網頁上的程式碼。程式碼的順序非常重要。如果同意聲明程式碼的呼叫順序有誤,同意聲明預設狀態將無法運作。

<script>
  // Define dataLayer and the gtag function.
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  // Set default consent to 'denied' as a placeholder
  // Determine actual values based on your own requirements
  gtag('consent', 'default', {
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'analytics_storage': 'denied'
  });
</script>

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

<!-- Send consent updates when users interact with your consent banner -->
<script>
  function allConsentGranted() {
    gtag('consent', 'update', {
      'ad_user_data': 'granted',
      'ad_personalization': 'granted',
      'ad_storage': 'granted',
      'analytics_storage': 'granted'
    });
  }
</script>
<!-- Invoke your consent function when a user interacts with your banner -->
<body>
  ...
  <button onclick="allConsentGranted()">Accept all</button>
  ...
</body>

gtag.js

程式碼的順序非常重要。如果同意聲明程式碼的呼叫順序有誤,同意聲明預設狀態將無法運作。視業務需求而定,具體細節可能有所不同,但一般來說,程式碼應依下列順序執行:

  1. 載入 Google 代碼。這是預設的程式碼片段。請更新預設程式碼片段 (如下所示),加入對 gtag('consent', 'default', ...) 的呼叫。

  2. 載入同意聲明解決方案。如果同意聲明解決方案是以非同步方式載入,請參閱「與非同步同意聲明管理平台整合」,瞭解如何確保以正確順序載入。

  3. 如果指令不是由同意聲明解決方案處理,請在使用者表示同意後呼叫 gtag('consent', 'update', ...)。

<script>
// Define dataLayer and the gtag function.
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}

// Set default consent to 'denied' as a placeholder
// Determine actual values based on your own requirements
gtag('consent', 'default', {
  'ad_storage': 'denied',
  'ad_user_data': 'denied',
  'ad_personalization': 'denied',
  'analytics_storage': 'denied'
});
</script>
<!-- Google tag (gtag.js) -->
<script async src="//www.googletagmanager.com/gtag/js?id=TAG_ID">
</script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}

  gtag('js', new Date());
  gtag('config', 'TAG_ID');
</script>

<!-- Send consent updates when users interact with your consent banner -->
<script>
  function allConsentGranted() {
    gtag('consent', 'update', {
      'ad_user_data': 'granted',
      'ad_personalization': 'granted',
      'ad_storage': 'granted',
      'analytics_storage': 'granted'
    });
  }
</script>
<!-- Invoke your consent function when a user interacts with your banner -->
<body>
  ...
  <button onclick="allConsentGranted()">Accept all</button>
  ...
</body>

為持續維護以隱私權為重的數位廣告生態,Google 將加強落實歐盟地區使用者同意授權政策。

進一步瞭解 Google 的歐洲經濟區流量同意聲明模式更新。

除了 ad_storage 和 analytics_storage 之外,同意聲明模式使用者還需要傳送兩項新參數:

欄位名稱 接受的值 說明
ad_user_data 'granted' | 'denied' 設定同意聲明,指明可否將廣告相關使用者資料傳送給 Google。
ad_personalization 'granted' | 'denied' 設定個人化廣告的同意聲明。

進階同意聲明功能包括:

  • 使用 Google 代碼使用者介面設定要與哪些 Google 服務分享資料。
  • 設定地理區域的行為。
  • 如果使用者尚未同意使用 Cookie,請在網址中傳遞廣告點擊、用戶端 ID 和工作階段 ID 資訊。
  • 如果使用者拒絕接受廣告 Cookie,請完全遮蓋 (移除) 廣告資訊。

特定地區的行為

如要設定適用於特定區域訪客的預設同意聲明狀態,請在 gtag 同意聲明預設狀態指令中指定區域 (根據 ISO 3166-2)。使用區域值可協助您遵守區域法規。

您可以為特定區域設定預設值,然後為所有其他區域設定不同的預設值。如果沒有區域參數,gtag 同意聲明預設狀態指令會為所有未涵蓋在其他區域專屬指令中的訪客設定預設值。

代碼管理工具

如果您使用範本建立代碼,該範本可能會有設定區域專屬行為的控制項。如果您要自行建立範本代碼,請參閱「建立同意聲明模式範本」,進一步瞭解如何設定區域專屬行為。

gtag.js

以下範例會將西班牙和阿拉斯加使用者的 analytics_storage 設為 denied,並將所有使用者的 ad_storage 設為 denied。

  gtag('consent', 'default', {
    'analytics_storage': 'denied',
    'region': ['ES', 'US-AK']
  });

  gtag('consent', 'default', {
    'ad_storage': 'denied'
  });

最明確的參數優先

如果同一網頁上出現兩個預設同意聲明指令,且包含區域和子區域的值,系統會採用區域較明確的指令。舉例來說,如果美國地區的 ad_storage 設為 granted,而美國加州地區的 ad_storage 設為 denied,則來自加州的訪客會套用更具體的美國加州設定。在本例中,這表示來自 US-CA 的訪客會將 ad_storage 設為 denied。

區域 ad_storage 行為
美國 'granted' 適用於不在加州境內的美國使用者
US-CA 'denied' 適用於美國加州的使用者
未指定 'granted' 使用 'granted' 的預設值。在這個範例中,適用於不在美國或美國加州境內的訪客

在網址中傳遞廣告點擊、用戶端 ID 和工作階段 ID 資訊

使用者點按廣告後連往您的網站時,廣告相關資訊可能會以查詢參數的形式附加至到達網頁網址。為提高重要事件的準確度,這項資訊通常會儲存在您網域的第一方 Cookie 中。

不過,如果 ad_storage 設為 denied,這項資訊就不會儲存在本機。當 ad_storage 為 denied 時,如要提升廣告點擊評估品質,您可以選擇使用網址傳遞功能,透過網址參數在各網頁間傳遞廣告點擊相關資訊。

同樣地,如果 analytics_storage 設為 denied,則可使用網址傳遞功能,在不使用 Cookie 的情況下,跨網頁傳送事件和工作階段層級的數據分析 (包括重要事件)。

如要使用網址轉送功能,必須符合下列條件:

  • 您的 Google 代碼或目的地代碼含同意聲明選項,且位於網頁上。
  • 廣告主已啟用網址傳遞功能。
  • 網頁已導入同意聲明模式。
  • 外送連結參照的網域與目前網頁的網域相同。
  • 網址中含有 Google 點擊 ID 或 DCLID (僅限 Google Ads 和 Floodlight 代碼)

代碼管理工具

如果您使用範本建立代碼,範本可能會有設定網址傳遞的控制項。如果您要自行建立範本代碼,請參閱「建立同意聲明模式範本」,進一步瞭解如何使用 gtagSet 自訂範本 API 設定網址直通。

或者,您也可以使用下列選項,在目標網址代碼、Google 代碼或轉換連接器代碼中設定。

目的地代碼和 Google 代碼:

  1. 在工作區中開啟「代碼」選單。
  2. 編輯現有 Google 代碼或目的地代碼,或建立新的代碼。
  3. 在「設定」中,新增參數:
    • Name (名稱):url_passthrough
    • 值:true
  4. 「儲存」代碼並發布容器。

透過 Google 代碼連結的 Google Ads 和 Floodlight 代碼:

如要啟用這項功能,請建立 (或使用現有的) 轉換連接器代碼,並確認已勾選「對所有的頁面網址啟用連結」。如要瞭解如何建立轉換連接器代碼,請參閱基本設定。

或者,您也可以在 GTM 安裝程式碼片段之前,將網站上每個網頁的 url_passthrough 參數設為 true。

window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('set', 'url_passthrough', true);

gtag.js

如要啟用這項功能,請將 url_passthrough 參數設為 true。在任何 config 指令之前,將下列指令新增至預設程式碼片段:

gtag('set', 'url_passthrough', true);

使用網址傳輸功能時,當使用者瀏覽網站上的網頁時,系統可能會在連結中附加一些查詢參數:

  • gclid
  • dclid
  • gclsrc
  • _gl
  • wbraid

為獲得最佳效果,請確保:

  1. 網站上的重新導向會傳遞所有先前的查詢參數。
  2. 您的 Analytics 工具會忽略網頁網址中的這些參數。
  3. 這些參數不會干擾網站行為。

遮蓋廣告資料

如果 ad_storage 為 denied,系統不會設定用於廣告目的的新 Cookie。此外,先前在 google.com 和 doubleclick.net 上設定的第三方 Cookie,只會用於防範垃圾內容和詐欺行為,傳送至 Google 的資料仍會包含完整網頁網址,包括網址參數中的任何廣告點擊資訊。

代碼管理工具

如果您使用範本建立代碼,範本可能會有進一步遮蓋廣告資料的控制選項。如果您要自行建立範本代碼,請參閱「建立同意聲明模式範本」,進一步瞭解如何遮蓋廣告資料。

gtag.js

如要進一步在 ad_storage 為 denied 時遮蓋廣告資料,請將 ads_data_redaction 設為 true。

gtag('set', 'ads_data_redaction', true);

如果 ads_data_redaction 為 true 且 ad_storage 為 denied,Google Ads 和 Floodlight 代碼在網路要求中傳送的廣告點擊 ID 會經過修訂。網路要求也會透過不含第三方 Cookie 的網域 (例如 pagead2.googlesyndication.com) 傳送。

常見問題

請參閱下列常見導入問題。

導入進階同意聲明模式時,您應在使用者授予同意聲明的頁面上呼叫更新指令。

如果網頁在載入時未取得同意聲明,但在同意聲明變更後重新載入時取得同意聲明,Google 代碼可能會遺失原始網頁的重要資料點。後續報表可能不完整。

舉例來說,在 Google Analytics 中,許多已取得同意聲明的工作階段可能缺少 session_start 事件。

為避免這個問題,請在使用者同意聲明狀態變更時呼叫更新指令。

在某些情況下,當同意聲明類型從「拒絕」更新為「同意」時,Google 代碼可能會根據這項更新傳送評估資料。如果網頁卸載時呼叫更新指令,瀏覽器可能會在完成前取消這項網路流量。後續報表可能不完整。

如有可能,請確保更新指令在網頁卸載前已記錄完畢。

後續步驟

舊版代碼控制項

如果您使用舊版代碼,例如 ga.js、analytics.js 或 conversion.js,請更新為 gtag.js 或 Google 代碼管理工具。

如要進一步瞭解其他舊版代碼的隱私權控制項,請參閱下列文件: