javascript - 如何将我的 utm_cookie 设置脚本合并到一个脚本中?
问题描述
我的要求可能很简单——但我不确定它是否符合最佳实践,所以我想我的问题是双重的。
- 如何将我的 9 个单独的脚本合并为 1 个单独的脚本?
- 这是一个好主意 - 还是我应该将它们全部分开?
现在,我的脚本从查询字符串中获取单独的 utm 参数并将它们存储在 cookie 中。我为以下 utm 参数和单击 ID 执行此操作。我在 Google 跟踪代码管理器中执行此操作。
- utm_source
- utm_medium
- utm_campaign
- utm_content
- utm_term
- gclid
- fbclid
- 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>
总的来说,我担心通过组合它们,如果其中一个参数存在,而其他参数不存在,我会得到一堆值作为“未定义”。
解决方案
创建九个单独的第一方 cookie 不是一个好主意,因为浏览器可以存储的 cookie 数量是有限的。此外,这些值中的每一个都通过 cookie 标头发送到服务器,这会使您的请求超出必要的范围,并且可能会在您的服务器上创建足够的元数据,从而成为安全/隐私问题。
IMO 的最佳选择是将所有值作为键/值对字符串存储在单个 cookie 中,最好的选择是 url 格式:
?utm_source=source&utm_medium=medium
等(这必须是查询字符串格式,所以开头的问号是强制性的)。
我认为这是最好的方法的原因是因为 GTM 有一个内置的 url 解析器,它允许您通过将 url 变量的源设置为值来轻松获取各个值(并为不存在的值设置默认值)你的第一方饼干。
在您的第一方 cookie 中保存完整的字符串(无缺失值)后,您可以通过第一方 cookie 变量在以下页面上读取它:
然后,您可以使用该变量的输出通过 url 类型变量读取各个部分,在其中将类型设置为“查询”,将键设置为要提取的 utm 键,并将源设置为第一方的变量饼干价值:
您可以根据需要为缺失值设置默认值(即,如果您的 cookie 字符串中不存在某个键)。
作为提示,当您设置 cookie 时,请使用自定义模板而不是自定义 HTML 标记(自定义 HTML 需要 eval,这很慢并且通常不是好习惯)。
现在您有一个 cookie 而不是 9 个,以及一个获取值或返回合理默认值的简单解决方案。
推荐阅读
- javascript - 如何在从一个域重定向到另一个域时将数据传递到另一个域
- python - OneHotEncoder 更改名称列
- hive - 如何正确设置 SerDe XML 架构?
- powerbi - 基于 Power Bi 中的多个切片器计算结果行的数量
- hdbscan - 如何在 HDBSCAN 中打印输出结果
- jquery - 需要从组中选中 4 个复选框
- c++ - 如果函数退出而没有返回,如何正确处理
- gremlin - 是否有关于 gremlin 'match()' 如何工作的文档?
- c - 从子进程中的管道读取时,读取系统调用返回 -1
- postgresql - Postgresql 中的日期/时间字段超出范围,小时字段超过 24 小时