UTM链接生成器

把五个 utm 参数按 GA4 识别的键名拼到网址后面,编码与空值处理全部交给浏览器原生 URLSearchParams。

用 new URL(基础网址) 解析后交给 url.searchParams.set() 逐个写入,序列化交给浏览器按 application/x-www-form-urlencoded 规则处理;原网址自带的查询参数与 # 锚点位置都不会被破坏。留空的参数整项不写入,不会产生 utm_term= 这种空壳键。

使用方法

  1. 在「基础网址」填要推广的页面地址(示例 https://example.com/spring-sale),带 ?id=7 或 #top 都可以直接粘,本工具会保留它们。
  2. 填 utm_source(示例 wechat)与 utm_medium(示例 cpc)——这两个是 GA4 判定来源渠道的必需项。
  3. 填 utm_campaign(示例 spring_sale_2026),同一轮投放用一个固定名字,方便在报表里合并。
  4. 需要区分广告词时填 utm_term(示例 running shoes),需要区分素材时填 utm_content(示例 banner_a);这两项留空即整项跳过。
  5. 点「生成带参数的链接」或直接按 Enter,立刻得到链接、链接总长度与每个参数占用的字符数;点「复制链接」拿走结果。

这个UTM链接生成器能解决什么问题

投放链接最常见的错误不是「少带参数」,而是参数名拼错、每次拼的大小写不一致、中文没编码。这三个问题在 GA4 里的表现都一样:报表上多出一行 (not set),而你完全看不出是哪个环节错了。UTM链接生成器把参数名固定成 GA4 文档里的五个小写键,值统一由浏览器编码,把「拼写」和「编码」这两类错误在源头消掉。

另外两个具体场景:一是同一活动要区分素材,5 个链接手工改 utm_content 很容易漏,本次示例把 banner_a 换成 banner_b 就能得到长度差 1 字符的可区分链接;二是活动名里带空格或中文,手工拼接十有八九会漏掉百分号编码,本页会把 running shoes 稳定输出成 running+shoes,把 微信广告 输出成 36 个字符的百分号串。

本页只做参数拼接与编码,不生成短链、不做跳转、不接入任何统计平台。要把长链变成可读短链请用 CampaignURL生成;要检查已经拿到的地址结构请用 URL解析;要单独处理某个值的百分号编码请用 URL编码。

原理与规则说明:URL 与 URLSearchParams 的分工

完整示例(数值仅作演示)

示例条件与工具默认值完全一致:基础网址 https://example.com/spring-sale,source wechat,medium cpc,campaign spring_sale_2026,term running shoes,content banner_a。

这些长度只反映编码规则,不代表任何真实投放数据。

输入范围与对照表

输入范围:基础网址最长 1800 字符,每个 utm 值最长 200 字符,生成后总长超过 2048 字符会被拦下。下表是 24 组常见渠道组合在同一基础网址上的实测长度,前 12 行直接显示,其余点「加载更多」展开。

utm_sourceutm_mediumutm_campaigntermcontent参数数链接长度
wechatcpcspring_sale_2026running shoesbanner_a5138
wechatsocialspring_sale_2026——397
baiducpcspring_sale_2026跑鞋banner_b5142
newsletteremailweekly_2026w10—header_cta4121
xiaohongshusocialspring_sale_2026跑鞋 折扣note_015169
douyincpcspring_sale_2026跑鞋—4122
wechatcpc春季大促跑鞋banner_a5163
partnerreferralspring_sale_2026—logo4117
wechatcpcspring_sale_2026running shoes 跑鞋banner_a 蓝色5176
offlineqrstore_opening_2026—poster_014118
wechatcpcabc5104
wechatcpcspring_sale_2026running shoesbanner_a_v25141
googlecpcbrand_kwrunning shoesexact5127
googlecpcbrand_kwbuy running shoes onlinephrase5139
bingcpcbrand_kw跑鞋—4112
weibosocialspring_sale_2026跑鞋weibo_top5146
wechatcpcspring_sale_2026—banner_c4115
kaolaaffiliatespring_sale_2026跑鞋widget_015149
wechatlivespring_livestream跑鞋live_room_015149
zhihusocialspring_sale_2026跑鞋answer_025146
tiktokcpcspring_sale_2026shoesspark_ad5130
wechatcpc2026_spring_sale_cny跑鞋 限时banner_a_cta_v35173
edmemailspring_sale_2026—footer_link4117
qr_offlineqrstore_opening_2026—poster_024121
partner_breferralspring_sale_2026跑鞋logo_grey5152

常见字符的编码对照(encodeURIComponent 与 URLSearchParams 一致,除空格外):

原字符裸长度编码后编码后长度为什么必须转义
空格1+(表单规则)或 %201 或 3裸空格在 URL 里非法
+1%2B3不转义会被解码成空格
&1%263是参数分隔符
=1%3D3是键值分隔符
#1%233后面会被当成锚点
?1%3F3后面会被当成查询串
中文1%E5%BE%AE(单字)9UTF-8 每字 3 字节,每字节 3 字符
100%4100%256百分号起始转义序列

边界与精度

常见问题

链接能打开,但 GA4 报表里是 (not set),先查什么?

先确认 utm_source 与 utm_medium 是不是没填或填错键名——GA4 的默认渠道分组靠这两个值判定渠道,缺一个就进不了已知渠道表。其次确认 utm_medium 用的是文档里的媒介写法(cpc、social、email、referral、affiliate、qr、live),而不是「付费」「推广」这类中文自定义词。自定义值不是不能用,只是会被归到 Unassigned(未分配)栏,需要自己在 GA4 里建自定义渠道组。

空格到底该用 + 还是 %20?

两者解码后都是同一个空格。本页因为用了 URLSearchParams,输出的是 +,这是 HTML 表单的标准做法,GA4 能正常解析。要自己拼字符串时就用 encodeURIComponent(),它给 %20。唯一要注意的是反向:如果服务端代码用 URLDecoder.decode() 之外的手写解析,或者把链接塞进某些不认 + 的日志系统,%20 更保险。代价是每个空格多 2 个字符。

utm_term 里填了 a+b,为什么服务端收到的是 a b?

那说明这条链接是手工拼接的,没有对值做百分号编码。+ 在表单解码规则里等于空格,所以 a+b 被读成 a b。本页输出的一定是 a%2Bb,服务端解码回来还是 a+b。这也是「永远不要用字符串相加拼查询参数」的直接理由——加号是最容易被忽略的一种。

原网址本来就带 ?id=7,utm 参数会覆盖它吗?

不会。new URL() 会把原有的 ?id=7 解析成已有的查询参数,searchParams.set() 是往里追加,本工具只写五个 utm_ 开头的键。原网址的 id 原样保留在前面。如果原网址已经带了一个 utm_source,set() 会覆盖它而不是产生两个同名键——这正是用 set() 而不是 append() 的原因。

原网址带 #top 锚点,参数会跑到锚点后面吗?

不会。查询串永远在片段之前,https://example.com/p?id=7 拼完是 https://example.com/p?id=7&utm_source=wechat...,带锚点时是 https://example.com/p?utm_source=wechat...#top。如果把参数手工拼在 # 后面,# 之后的内容浏览器根本不会作为查询串发给服务器,参数会静默丢失。

参数名必须全小写吗?

本工具固定输出小写,与 Google Analytics 文档的写法一致。需要提醒的是值的部分本页不做大小写归一:utm_source=WeChat 和 utm_source=wechat 在报表里通常是两行。所以真正的风险不在参数名,而在你投放时值的大小写不统一。请在团队里定死一种写法,然后用本页的「载入示例」把它固定下来复用。

活动名里能不能用中文?

能,编码交给浏览器。一个汉字 UTF-8 占 3 字节,百分号编码后变 9 个字符,实测把示例的三个必填值换成中文后链接从 138 字符涨到 168 字符。统计侧完全能读,但如果你要把链接放进短信(有字符数限制)、二维码(密度上限)或纸质物料,长度会是硬约束。更省的做法是活动名用拼音或英文短码,term 里保留中文关键词。

这个工具免费吗?输入的网址会上传吗?

免费,无需注册。拼接由浏览器的 URL 与 URLSearchParams 在本地完成,页面不发任何网络请求,可以在开发者工具的 Network 面板里连点几次「生成带参数的链接」确认请求列表始终为空。网址与参数只存在于当前输入框,不写 Cookie、不写本地存储,刷新页面即清空。

相关工具