Google analytics 使用UTM查询预缓存时重复获取请求

Google analytics 使用UTM查询预缓存时重复获取请求,google-analytics,workbox,Google Analytics,Workbox,我本打算把这篇文章发布在Github repo的工具箱中,但我怀疑这是一个bug,更可能是我自己的误解。我发现了一些稍微相似的问题,但没有一个答案能清楚地解释我如何解决我的问题 在我的sw.js文件中,我正在预先设置主URL和起始URL。起始URL与主URL完全相同,只是在URL后面附加了?utm_source=pwa。这是我读过的一种技术,其他人在Google Analytics中跟踪PWA的使用情况,我喜欢这个想法 但是,现在当新用户到达网站时,他们加载初始页面,然后Workbox获取主UR

我本打算把这篇文章发布在Github repo的工具箱中,但我怀疑这是一个bug,更可能是我自己的误解。我发现了一些稍微相似的问题,但没有一个答案能清楚地解释我如何解决我的问题

在我的sw.js文件中,我正在预先设置主URL和起始URL。起始URL与主URL完全相同,只是在URL后面附加了
?utm_source=pwa
。这是我读过的一种技术,其他人在Google Analytics中跟踪PWA的使用情况,我喜欢这个想法

但是,现在当新用户到达网站时,他们加载初始页面,然后Workbox获取主URL然后获取开始URL。这意味着,如果用户到达网站主页,他们将加载该页面3次。我想弄清楚如何让Workbox意识到主URL和开始URL本质上是相同的,不需要第三个获取请求

我知道,
ignoreUrlParametersMatching
默认使用
[/^utm\/]
,我希望它能像上面所描述的那样使用,但可能我理解不正确,它不适用于预取的URL。。。?如果我没有从
precacheAndRoute()
显式调用它,它会自动应用吗

为了澄清我对
ignoreUrlParametersMatching
的期望,它会预先缓存主URL,然后当它尝试缓存开始URL时,它会忽略(删除)UTM参数,看到它已经缓存了该URL,并且不会提取。然后,当从缓存请求开始URL时,它将再次忽略UTM参数,并使用缓存中的URL进行响应这离现实很远吗?如果是,我应该如何做才能实现跟踪和减少“重复”提取

下面是我的sw.js文件的一些摘录:

const HOME\u URL='1https://gearside.com/nebula/';
const START\u URL='1https://gearside.com/nebula/?utm_source=pwa';
workbox.precaching.precacheAndRoute([
//…其他预归档文件
{url:HOME\u url,修订号:revisionNumber},
{url:START\u url,修订号:revisionNumber},
]);
这两个URL都是预先设置的:

显示两个提取请求:

注意:我注意到这个问题,不管有没有修订号。

TL;博士
  • 不包括
    https://gearside.com/nebula/?utm_source=pwa
    在预制清单中
  • 使用
    workbox google analytics
    模块:
长版本 您应该基于独特的资源进行预缓存。将下载并缓存预缓存清单中定义的每个条目

如果
https://gearside.com/nebula/
https://gearside.com/nebula/?utm_source=pwa
提供完全相同的内容,只预缓存其中一个内容(最好是不带查询字符串的内容)

选项
ignoreURLParametersMatching
用于指定将根据查询参数测试的正则表达式数组,如果其中任何一个匹配,则路由匹配将忽略此类查询参数

举例来说

precacheAndRoute([
  {url: '/styles/main.css', revision: '777'},
], {
  ignoreURLParametersMatching: [/.*/]
});
将匹配以下任何请求:

  • /styles/main.css
  • /styles/main.css?minified=0
  • /styles/main.css?缩小=0&更新=1
并提供
/styles/main.css
,因为正则表达式
*
匹配任何查询字符串

ignoreURLParametersMatching
的默认值为
[/^utm\/]
。如果在上面的示例中我们跳过
ignoreURLParametersMatching
,则以下任何请求都将被匹配(并使用预缓存的
/styles/main.css
进行解析):

  • /styles/main.css
  • /styles/main.css?utm\u hello=yes
  • /styles/main.css?utm\u yes\u what=dunno&utm\u really=yes
但以下请求不会通过预检查:

  • /styles/main.css?重塑=昂贵&utm\u pwa=否
  • /styles/main.css?utm_spa=note&trees=awesome
因为它们中没有一个只有以
utm\uu
开头的查询参数

有关
workbox google analytics
模块的更多信息,请参见此处:

TL;博士
  • 不包括
    https://gearside.com/nebula/?utm_source=pwa
    在预制清单中
  • 使用
    workbox google analytics
    模块:
长版本 您应该基于独特的资源进行预缓存。将下载并缓存预缓存清单中定义的每个条目

如果
https://gearside.com/nebula/
https://gearside.com/nebula/?utm_source=pwa
提供完全相同的内容,只预缓存其中一个内容(最好是不带查询字符串的内容)

选项
ignoreURLParametersMatching
用于指定将根据查询参数测试的正则表达式数组,如果其中任何一个匹配,则路由匹配将忽略此类查询参数

举例来说

precacheAndRoute([
  {url: '/styles/main.css', revision: '777'},
], {
  ignoreURLParametersMatching: [/.*/]
});
将匹配以下任何请求:

  • /styles/main.css
  • /styles/main.css?minified=0
  • /styles/main.css?缩小=0&更新=1
并提供
/styles/main.css
,因为正则表达式
*
匹配任何查询字符串

ignoreURLParametersMatching
的默认值为
[/^utm\/]
。如果在上面的示例中我们跳过
ignoreURLParametersMatching
,则以下任何请求都将被匹配(并使用预缓存的
/styles/main.css
进行解析):

  • /styles/main.css
  • /styles/main.css?utm\u hello=yes
  • /styles/main.css?utm\u yes\u what=dunno&utm\u really=yes
但是