Marketing

UTM 卫生审计:破损、重复、互相蚕食的标签(1,000 条 URL,Claude)

UTM 卫生审计:破损、重复、互相蚕食的标签(1,000 条 URL,Claude)
目录

上个季度,一个客户把一份 Google 表格发给我 —— 里面是从 GSC(Google Search Console,Google 搜索控制台)+ GA4(Google Analytics 4,Google 分析 4)导出的 1,037 条带 UTM(Urchin Tracking Module,Urchin 跟踪模块 —— 即附加在 URL 后面的 utm_source / utm_medium / utm_campaign 等归因参数)标签的着陆页 URL —— 然后说"告诉我我们的 UTM 哪里出问题了"。两个小时后,Claude 已经把其中 312 条按三类问题标注了出来,我们还产出了一份我现在每个 Campaign 都在参考的"权威 UTM 表"。

我想分享的是工作流本身。因为靠肉眼审 1,000 行的 UTM 卫生(UTM hygiene,即 UTM 标签的命名规范性与一致性),正是那种让人做一半就放弃、然后假装数据没毛病的工作。

导出部分

两个文件,都是过去 90 天的:

  • GSC 导出 —— pageclicksimpressionsquery。UTM 字符串就在 page 字段里。
  • GA4 导出 —— landing pagesessionssourcemediumcampaignutm_content

在 Google Sheets 里我用 SPLIT? 切分 URL,再 VLOOKUP 把两份表按 URL 字符串连起来,然后把合并后的表导出为 audit-input.csv —— 一行一条带标签的 URL,UTM 参数被拆成独立列。

Claude 实际找到的三类问题

1. 破损的 UTM(拼写和结构错误)。 有 47 条 URL 的参数名是 GA4 静默忽略的那种 —— 把 utm_source 写成 utm-so、把 UTM_Medium 大写、同一个 URL 里出现两个 ?、百分号编码错误。页面照样能打开,流量却会被归到"Unassigned"(未分配)。几个月都没人发现。

2. 重复的 UTM(大小写 + 拼写变体)。 这是大头 —— 218 条。同一 source 标签在不同的 Campaign 里被写成 googleGoogleGooggoogel。同一 medium 被写成 cpcCPCpaidpaidsearchpaid-search。GA4 把每个变体都当成一个不同的渠道,所以你报表里"Paid Search"那一行,可能只展现了 60% 的真相。

3. 互相蚕食(utm_source 和自然流量重叠)。 47 条 URL 同时挂了 utm_source=google + utm_medium=organic —— 通常是某个好心的市场同学觉得"Google 就是 Google"就这么填了。GA4 会优先认显式的 UTM,把这些本该是自然搜索的流量重新归到一个偏付费的渠道上。你的"Organic"报表被人为压低,你的"Paid"被人为抬高。乘以 47 条 URL 之后,你的归因模型就在对你撒谎。

我实际用的 Prompt

我给 Claude 的是 CSV 加一段简短的指令:

你正在审计一份 UTM 分类体系。对每一行,把它归为以下之一:BROKEN(拼写/结构错误)、DUPLICATE(某个权威值的变体)、CANNIBALIZE(utm_source/medium 与自然搜索分类冲突),或 OK。新增一列输出标签,再加一列输出权威替换值(canonical replacement,即统一后的标准值,例如 Googlegoogle,paid-searchpaidsearch)。不要猜测。如果是 OK,两列都留空。返回完整文件。

最后那句"返回完整文件"是关键 —— 没这句话,Claude 会只给你一份摘要而不是逐行处理。有了这句话,1,037 行会被完整标注意见回来。我会人工复查 CANNIBALIZE 和 BROKEN 两类,DUPLICATE 那一类 30 秒扫一遍就完事,因为替换规则都是机械的。

权威表

三个 Tab。sources(12 个权威值,全小写,不带 .com)、mediums(8 个值,和 GA4 默认渠道分组对齐)、campaigns(每个 Campaign 一行,带负责人、起始日期、应该用的 source/medium)。每个新 Campaign 都从这里开始。审计 CSV 是"过去实际是什么"的事实来源,权威表是"未来应该是什么"的事实来源。

两份表合起来形成闭环。没有权威表,审计就是一次性的清理;有了它,下一批 1,000 条 URL 验证只要 10 分钟,不是 10 个小时。