首页 > 解决方案 > 如何将我的 utm_cookie 设置脚本合并到一个脚本中?

问题描述

我的要求可能很简单——但我不确定它是否符合最佳实践,所以我想我的问题是双重的。

  1. 如何将我的 9 个单独的脚本合并为 1 个单独的脚本?
  2. 这是一个好主意 - 还是我应该将它们全部分开?

现在,我的脚本从查询字符串中获取单独的 utm 参数并将它们存储在 cookie 中。我为以下 utm 参数和单击 ID 执行此操作。我在 Google 跟踪代码管理器中执行此操作。

  1. utm_source
  2. utm_medium
  3. utm_campaign
  4. utm_content
  5. utm_term
  6. gclid
  7. fbclid
  8. msclkid

对于每个 utm 参数或单击 id,我的脚本如下所示:

<script>

function createCookie(name,value,days) {
    var expires = "";
    baseDomain = '.website.com';
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + value + expires + "; domain=" + baseDomain + "; path=/";
}

  createCookie("utm_source","{{url - utm source}}",1)

  
 </script>

总的来说,我担心通过组合它们,如果其中一个参数存在,而其他参数不存在,我会得到一堆值作为“未定义”。

标签: javascripttagsgoogle-tag-manager

解决方案


创建九个单独的第一方 cookie 不是一个好主意,因为浏览器可以存储的 cookie 数量是有限的。此外,这些值中的每一个都通过 cookie 标头发送到服务器,这会使您的请求超出必要的范围,并且可能会在您的服务器上创建足够的元数据,从而成为安全/隐私问题。

IMO 的最佳选择是将所有值作为键/值对字符串存储在单个 cookie 中,最好的选择是 url 格式:

?utm_source=source&utm_medium=medium

等(这必须是查询字符串格式,所以开头的问号是强制性的)。

我认为这是最好的方法的原因是因为 GTM 有一个内置的 url 解析器,它允许您通过将 url 变量的源设置为值来轻松获取各个值(并为不存在的值设置默认值)你的第一方饼干。

在您的第一方 cookie 中保存完整的字符串(无缺失值)后,您可以通过第一方 cookie 变量在以下页面上读取它:

cookie 变量配置

然后,您可以使用该变量的输出通过 url 类型变量读取各个部分,在其中将类型设置为“查询”,将键设置为要提取的 utm 键,并将源设置为第一方的变量饼干价值:

url变量配置

您可以根据需要为缺失值设置默认值(即,如果您的 cookie 字符串中不存在某个键)。

作为提示,当您设置 cookie 时,请使用自定义模板而不是自定义 HTML 标记(自定义 HTML 需要 eval,这很慢并且通常不是好习惯)。

现在您有一个 cookie 而不是 9 个,以及一个获取值或返回合理默认值的简单解决方案。


推荐阅读