Cookie 同意管理

配置 Cookie 提示方式和第三方脚本加载规则,并让隐私说明与网站的实际行为保持一致。

Saavo 内置了 Cookie 同意横幅、分类偏好和 Cookie 政策页。当前功能主要用于控制第三方统计与广告脚本是否加载;它不会自动接管网站使用的所有 Cookie 和本地存储。

相关配置位于 config/cookie-consent.ts。项目默认采用 silent 模式,并且所有第三方服务的必填配置均为空,因此初始状态下不会显示横幅,也不会加载 Google Analytics、AdSense 等第三方脚本。

Cookie 同意横幅

工作模式

模式是否显示横幅第三方脚本的处理方式
silent否立即加载已启用且配置完整的第三方脚本
prompt是用户同意相应分类后才加载脚本
disabled否不显示同意界面,也不通过该功能加载第三方脚本

silent 只是“不询问直接加载”,并不表示网站已经取得用户同意。面向需要事先同意的地区时,应根据实际业务和适用法规改用 prompt,并请专业人员审核隐私与 Cookie 说明。

第一方访问统计不受此开关控制

项目自带的 /js/analytics.js 和 /api/analytics/collect 属于第一方访问统计,不由这里的第三方统计分类控制。即使用户拒绝第三方统计脚本,只要第一方统计仍处于开启状态,采集请求仍可能发生。详见访问统计。

默认配置包含以下分类:

  • necessary:登录、安全、结账等必要 Cookie,始终启用且不可关闭;
  • functionality:功能偏好,例如主题设置;
  • analytics:Google Analytics、Clarity、Umami、Plausible、PostHog 等第三方统计服务;
  • marketing:Google AdSense 等营销服务。

第三方服务必须同时满足两个条件才会实际加载:

  1. 在 config/cookie-consent.ts 中启用对应项目;
  2. 在 config/analytics.ts 或 config/ads.ts 中填写完整配置。

例如,只把 Google Analytics 项设为 enabled: true,但没有填写 Measurement ID,页面仍不会加载其脚本。在 prompt 模式下,没有可用脚本的第三方项目也不会作为可执行选项参与脚本加载。

不要绕过这套配置在组件中直接插入第三方 <script>。否则脚本不会受用户选择控制,横幅中的说明也会与实际行为不一致。

用户的选择保存在 cookie_consent Cookie 中,有效期为 365 天。记录包含:

  • 政策版本 policyVersion;
  • 配置版本 configVersion;
  • 各分类和项目的选择;
  • 同意状态以及创建、更新和过期时间。

修改政策正文时递增 policyVersion;调整分类、项目或默认值时递增 configVersion。任一版本与旧记录不一致,旧记录都会失效。prompt 模式下,用户需要重新选择。

mode: 'prompt',
policyVersion: '1.1.0',
configVersion: '1.1.0',

首次作出选择时,页面会按结果加载允许的脚本。用户之后修改已有偏好时,页面会刷新,以便重新应用脚本加载状态。只有 prompt 模式会在页脚提供重新打开 Cookie 设置的入口。

Cookie 同意设置

目前不会管理哪些功能偏好

functionality.theme 会显示并记录主题偏好,但目前还没有接入主题存储逻辑。网站主题仍由 localStorage 中的 saas-theme 独立保存;关闭该偏好不会停止主题的读取或写入。

如果产品要求此选项真正控制主题持久化,需要修改主题初始化与切换逻辑。只调整同意配置或文案,不能改变实际存储行为。

同样,新增任何 Cookie、本地存储项或第三方脚本时,都应先确认它由哪段代码写入,再决定是否以及如何纳入同意管理。

/cookies 是面向用户的 Cookie 政策页。模板提供的是示例内容,正式上线前必须按实际站点重写,并与 config/cookie-consent.ts 保持一致,至少说明:

  • 网站实际使用的必要 Cookie 和用途;
  • 已启用的第三方服务、采集目的和保存期限;
  • 第一方访问统计的采集范围;
  • 用户如何修改或撤回选择;
  • 政策生效日期和联系方式。

不要只改横幅而保留示例政策,也不要在政策中列出网站实际上没有启用的服务。

上线检查

  • 已根据目标市场选择 silent、prompt 或 disabled。
  • /cookies 与网站真实使用的 Cookie、存储项和第三方脚本一致。
  • 未使用的统计和广告服务配置保持为空。
  • prompt 模式下,接受、拒绝和自定义三种操作均已测试。
  • 拒绝后,受控的第三方统计和广告脚本不会加载。
  • 已单独评估第一方访问统计是否需要告知或同意。
  • 政策或分类变更后已递增相应版本。
  • 文档中的功能偏好确实接入了对应功能,没有把“记录偏好”写成“阻止存储”。

常见问题

接下来