先记结论:转发前要剥的,是问号后面那些把「你从哪点过来」写进地址的查询参数。核对方法不是看链接变短了,而是对照已移除名单,再确认 pathname 与 id=、q= 还在。剥完不能当成无痕访问,也不能证明落地页没有统计脚本。
一句话先回答搜索意图
转发链接前要先剥追踪参数,是因为查询字符串属于 HTTP 请求目标的一部分。浏览器去拉文档时,问号后面的 utm_source、fbclid、gclid 会写进请求行;托管方、反向代理和访问日志按设计都能看见。把带这些字段的整串贴进群聊或工单,等于把渠道和点击标记一并交给下一个打开的人。
这篇文章给运营、客服,以及要把资料外发之前想先分清「地址里写了什么」和「打开之后还会发生什么」的人。它不代替 隐私清洗 的操作说明,也不重复「怎么点按钮得到干净网址」。你要带走的是:UTM 和点击 ID 各写什么、转发时谁继承了它们、剥完还能证明什么、用已移除清单和 Network 怎么当场对照。
问号后面的字会进 HTTP,不是只给你看
RFC 3986 §3.4 把 query 定义成第一个 ? 之后、fragment 之前的那一段。RFC 9110 接着规定:请求的目标 URI 含路径和查询,不含 fragment。所以「地址栏很长」不是观感问题,是这次文档请求会把问号后的键值对交给对端。
井号后面的片段默认留在当前标签页,上一篇已经写过核对方法。这一篇只盯问号。把两条规则放在一起,才不会把「服务器看不见 # 后面的密钥」误读成「服务器也看不见 ? 后面的渠道」。
浏览器提供的 URLSearchParams 可以把 query 拆成键值对,按名字删除后再拼回地址。清洗工具做的就是这一层:改的是字符串,不是落地页上的脚本。删掉 utm_campaign,并不会关掉对方站点的统计像素。
UTM 写的是渠道,不是装饰性后缀
Google Analytics 把手动标记写成一组 utm_* 查询参数。帮助文档列出的常用对应关系是:utm_source 对应来源,utm_medium 对应媒介,utm_campaign 对应活动名,另外还有 utm_term、utm_content、utm_id 以及较新的 utm_source_platform 等字段。官方示例长这样:http://www.example.com/?utm_source=google&utm_medium=cpc&utm_campaign=summersale。这不是猜测,是 Analytics 流量来源说明 里的写法。
这些值对投放的人有用:同一条内容从邮件、视频简介和群公告点进来,可以分开计数。对下一个打开链接的人,它们是明文备注。工单里出现 utm_source=vip_wechat&utm_campaign=refund_202609,值班的人、搜索工单的人、以后导出表格的人,都能读出「这是从哪条私域活动点过来的」。
UTM 本身通常不含证件号或口令。它泄露的是上下文:你看过哪封邮件、点过哪条广告、是不是从客服话术里的专属链接进来。上下文一旦写进可转发的 URL,就不会只停在你的标签页里。
点击 ID 写的是哪一次点击,不是活动名
点击 ID 比 UTM 更接近「这一次点击」的编号。Google Ads 的自动标记会在落地页地址后追加 gclid(Google Click Identifier)。官方说明给的形态是 www.example.com/?gclid=123xyz。打开自动标记并且站点装着 Analytics 时,这个值还会被写入站点域下的 cookie,用来把后续转化对回那次点击。见 Google Ads 自动标记说明。
在 iOS 14 之后的部分场景里,没有用户同意时不再使用 gclid。Google 另外引入 gbraid(偏 web 到 app)和 wbraid(偏 app 到 web),用来在平台限制下继续做广告度量。这是 Analytics 对 iOS 14+ 活动度量的说明,不是清洗工具自己发明的分类。
Meta 侧常见的是 fbclid。开发者文档写明:页面 URL 里如果带着这个查询参数,Conversions API 仍可用它构造 fbc;站点若装着 Meta Pixel,点击编号还会被写进名为 _fbc 的第一方 cookie,格式是 version.subdomainIndex.creationTime.fbclid。依据是 Meta 的 fbp / fbc 参数说明。你把带 fbclid 的地址转给同事,同事打开时,对方站点仍可能把「来自这次点击」的标记收进自己的 cookie 和后续回传。
同一类名字还会以 msclkid、ttclid、twclid、li_fat_id 等形式出现。它们各自服务自己的广告账户,共同点是:写在 query 里,就会随请求行走;写进你转发的字符串里,就会被下一个打开的人继承。
不要用真实投放链接、含客户手机号的短链或未脱敏工单做实验。准备一条可以公开的示例地址,参数用一次性标记。核对的是 query 和请求行,不是把业务渠道再扩散一遍。
转发时,下一个人继承了整串 query
分享按钮、浏览器「复制地址」和从聊天记录里再次长按,复制的常常是当前完整 URL,而不是站点希望对外展示的短路径。微信、淘宝、广告预览里尤其明显:你看见的是一篇文章或一个商品,剪贴板里却是 pathname 后面挂着一串归因字段。
这些字段会跟着链接进入三个地方。第一,聊天和工单正文,群成员和搜索记录都能看见。第二,对方浏览器的地址栏,以及可能同步出去的历史。第三,对方打开时发出的文档请求——服务器日志里会出现完整 query。你删掉自己聊天里的那一条,改变不了已经打开过的人、已经写下的日志。
运营把投放监测链接直接丢进对外公告,客服把用户复制来的长链原样回进工单,开发把带 gclid 的复现地址贴进 issue,都属于同一类动作:把一次点击的上下文,从「给你自己看的地址栏」变成「任何能看见这串字符的人都能复用的标记」。
剥完能证明什么,地址里还剩什么
剥追踪参数能支持的结论很窄,写清楚反而能少一次误判。它能证明:在你使用的这份名单和这一次清洗里,已知的 utm_*、点击 ID 以及(如果开了更宽模式)部分归因字段,已经从 query 里消失。pathname 还在,id=、q= 一类业务参数按设计应留下,链接应仍指向同一篇内容。
它不能证明:落地页没有像素,对方没有第一方 cookie,短链跳转后不会再挂上新的参数,路径片段里没有追踪记号,浏览器扩展没有改写剪贴板。更不能证明「打开之后没人知道你是谁」。剥的是你准备转发出去的这一串字符,不是下一次浏览会话。
短链是最常见的假通过。短链服务把真正的目标藏在自己的跳转里;你清洗 https://short.example/abc,query 往往是空的,工具会报告「未发现可剥离参数」。追踪写在 302 之后的长地址上。要核对,先在无痕窗口打开短链,再复制地址栏里的最终 URL。不要用含真实隐私的短链做这一步。
| 你看见的变化 | 能支持的结论 | 不能支持的结论 |
|---|---|---|
| 链接变短了 | 少了一些 query 字符 | 已经匿名、已经安全 |
已移除名单里有 utm_*、fbclid |
这些键从当前 URL 里删掉了 | 落地页不会再写 _fbc 或 Analytics cookie |
id=、q= 还在 |
业务定位参数按设计保留 | 所有留下的键都对业务必要 |
| 短链「未发现可剥离参数」 | 这一串短地址本身没有匹配到名单 | 跳转后的长链同样干净 |
| Network 里没有原链接 | 这次清洗请求没把原文当业务数据发出 | 扩展和聊天客户端也没保存过它 |
当场对照:已移除清单和 Network
口号不能当证据。能当场做完的检查有两层:一层看清洗结果,一层看出站流量。准备一条可以丢弃的示例,例如:
https://example.com/article/42?id=42&q=aes&utm_source=wechat&utm_medium=social&utm_campaign=share_20260903&fbclid=IwAR0canaryfp&spm=demo.share.0
金丝雀放在 utm_campaign 和 fbclid 的值里。清洗之后,干净地址里不应再出现 share_20260903 或 IwAR0canaryfp;id=42 与 q=aes 应还在。
- 先读已移除参数清单。应看到
utm_source、utm_medium、utm_campaign、fbclid;若使用更宽的模式,spm一类电商归因名也应出现。清单是空的,却感觉「链接干净了」,先怀疑短链或参数写在路径里。 - 再读干净地址的 pathname 和留下的 query。少了文章编号或搜索词,说明误伤,不要转发。
- 打开开发者工具的 Network,勾选 Preserve log,过滤器用 All。把金丝雀粘进搜索框。请求行、请求体和分析上报里都不该出现那条脏链接。
FastPwd 的干净链接按这条边界实现:解析发生在当前标签页,单条网址超过 8 KB 会拒绝,一次最多处理 100 行;只接受 http / https。保守模式只去掉 utm_* 与点击 ID(包括 fbclid、gclid、gbraid、wbraid、msclkid 等);标准模式再去掉 _ga / _gl、邮件里的 mc_eid / mc_cid、淘宝 spm / scm、拼多多 _x_*、抖音 share_token 一类归因字段,以及未勾选保留时的 ref / referrer。pathname 与 id=、q= 留下。工具打开即用,没有账号。访问统计只记「做了清洗」这类事件名,不写原文。承诺仍然只是承诺,以你这一次在清单和 Network 里看到的为准。
不确定某个键是不是业务参数时,改用保守模式。先保证 UTM 和点击 ID 离开转发串,再人工决定 spm、ref 要不要留。名单洗不掉的键,用眼睛删,不要指望一次「变短」解决所有问题。
三种看起来干净、其实没洗到的情况
第一,追踪写在路径里。有的分享页用 /s/xxxx 或带渠道前缀的 path,query 是空的。按名字删查询参数,地址几乎不变。你要对照的是「打开后落地的规范地址」,不是分享按钮刚吐出来的跳转壳。
第二,清洗工具只动 searchParams,不动 hash。追踪偶发被写进井号后面时,query 清洗会报告通过。对照方法仍然是把地址栏整串和结果整串并排看,不要只看问号前面。
第三,你清洗了准备转发的那一条,聊天软件又在发出时补参数。有的客户端会给外链加上自己的点击标记。发出之后,在另一个窗口打开自己刚发的消息,再看一次地址栏。清洗发生在粘贴之前;发出之后还要抽查。
常见问题
去掉 UTM 之后,打开链接的人还能被追踪吗?
能。剥的是你转发的这一串 query。落地页仍可能有像素、第一方 cookie 和登录态。Meta 的文档也写过:即使 URL 里暂时没有 fbclid,站点若早已写过 _fbc,后续事件仍可能带上它。剥完只证明这条 URL 少了已知追踪参数,不证明下一次访问是匿名的。
清洗会不会把文章 id 或搜索词也删掉?
按名单清洗时,pathname 与 id=、q= 一类业务 query 应留下。不确定时用保守模式,只去掉 utm_* 与点击 ID。清洗后对照已移除清单,不要只看链接变短了。清单里出现了你需要的键,就不要用这一次的结果。
短链要不要先剥参数?
短链本身往往没有 UTM。追踪写在跳转后的长地址里。只清洗短链,通常什么也剥不到。先在无痕窗口打开,把地址栏里的最终 URL 复制出来再剥。不要用含真实隐私的短链做实验;实验用可以公开的示例即可。
在 FastPwd 清洗时,原链接会不会被上传?
按产品说明,解析和剥离都在当前标签页完成,原文不作为 HTTP 业务数据发出,也不写入 analytics。访问统计只记「做了清洗」这类事件名。要当场核对,把金丝雀参数搜进 Network:请求行、请求体和统计上报里都不该出现那条脏链接。localhost 默认不发送访问统计,换到线上域名再复测一次更接近真实使用。
把同一条链接用打开即用的工具对照一次
若你希望用一个把剥离名单写清楚的页面来练习,打开 FastPwd 的 隐私清洗 即可,无需注册。贴进上面那条示例,先跑保守模式,再跑标准模式,对比两次「已移除」芯片。你应看到:两种模式都会拿掉 UTM 和 fbclid;标准模式才会动 spm。干净结果里 id 与 q 仍在。
同一页还可以切到文本脱敏,处理工单正文里的手机号和邮箱;那是另一篇文章的主题。必须把完整秘密交给同事时,改走 阅后即焚:本机用 AES-256-GCM 加密,服务器只暂存密文,密钥放在链接的井号后面。不要把刚洗干净的业务链接,和焚链的完整地址一起贴回同一个群。
下次转发前记住三件事。第一,问号会进 HTTP,渠道和点击 ID 都写在那里。第二,剥完只改变你准备发出的字符串,不关闭落地页的统计。第三,短链、路径标记和发出后再追加的参数,都要另做一次对照。能重复的观察,才值得写进你们自己的外发说明。
延伸阅读
问号和井号不要混为一谈。密钥为什么能放在 # 后面、以及把完整链接贴进聊天时会丢掉哪一层保护,见 URL 的井号后面为什么适合放密钥,以及什么时候会失效。工单正文里的手机号、证件号和 API Key 怎么在离开本机前对照,见 把工单和日志贴进 AI 之前,怎么先核对哪些字段会离开本机。若还要确认清洗过程本身有没有把原链接当业务数据发出,用 浏览器本地加密怎么核对明文没有离开本机 里的金丝雀步骤即可。