Google 在 React 中优化的一般问题 / Next.js
General problems with Google Optimize in React / Next.js
标题可能看起来有点含糊,但那是因为我目前在将 Google Optimize 集成到我们的 React / Next.js 项目中时遇到了多个问题。我将尝试尽可能详细地解释我的问题和行为。但是,如果有什么不清楚的地方,请告诉我。
问题:
- 虽然在头顶添加了Google优化,但我们总是遇到页面闪动。这意味着用户首先看到我们的页面,然后什么也看不到(异步隐藏功能启动),然后页面再次发生变化。
- 我创建了一个 re-orders 导航 link 的实验,删除了一个导航 link,并更改了我们的 CTA 文本。出于测试目的,我已将变体设置为 100%。发生的事情(与问题 1 相关)是,我们首先看到我们的原始网页,然后是更改,然后是删除了一个导航 link 的原始网页。这意味着它添加了变体,但删除了一些更改。
- 在动态页面上添加实验时,无法应用更改。当我 运行 实验时,没有任何变化,而当我 re-open 可视化编辑器时,它说更改有问题。即使更改只是简单的文本更改。
我尝试过的:
- 在 html 上默认添加“async-hide”类名。这会将网页设置为默认隐藏。如果我使用 Google 同步优化,效果很好。但是,如果我将其设置为异步,则需要 1 到 2 秒才能显示页面,这不是很好的性能。
- 我按照 Google here 提到的确切步骤在 Google 标签管理器中添加了 Google 优化。是的,我确实将 async-hide 函数中的 Google 优化容器 ID 更改为 GTM 容器 ID。
- 我取消了上面的第 2 部分并添加了 Google 像这样手动优化。
<Html lang="en" className="async-hide">
<Head>
{/*
Google Optimize Ant-Flicker Snippet
https://support.google.com/optimize/answer/9692472?ref_topic=6197443
*/}
<style
dangerouslySetInnerHTML={{
__html: `.async-hide { opacity: 0 !important}`,
}}
/>
<script
dangerouslySetInnerHTML={{
__html: `
(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
})(window,document.documentElement,'async-hide','dataLayer',4000,
{'OPT-OPTIMIZE_ID':true});
`,
}}
/>
<script src="https://www.googleoptimize.com/optimize.js?id=OPT-OPTIMIZE_ID"></script>
{/* Google Tag Manager */}
<script async src="https://www.googletagmanager.com/gtm.js?id=GTM-TAGMANAGER_ID"></script>
<script
dangerouslySetInnerHTML={{
__html: `
(function(w,l){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});
})(window,'dataLayer');
`,
}}
></script>
...
[rest of code]
我遇到的问题
- 此问题是否与 Next.js 有关?事实上,我们在 React 应用程序中使用静态多页而不是单页
- 在 React / Next.js 项目中实施 Google 优化的最佳方法是什么:通过 Google 标签管理器或 Google 优化
- 在 React / Next.js 项目中 Google 优化的最佳加载方法是什么:异步还是同步?
这是您在这里遇到的一个很常见的问题。 Google 优化和其他 A/B 通过 Javascript 在客户端更改网站内容的测试解决方案会产生闪烁效果,因为必须先下载脚本才能更改任何内容。
回答您的问题:
当您使用 next.js 时,会出现一些特殊问题。 Next.js 在服务器端使用服务器(或静态渲染阶段),在客户端使用水化阶段。当您在水合作用开始之前放置 Google 优化(并加载)时,它将呈现正确的实验,但一旦水合作用开始就会被覆盖。
如何将它与 Tagmanger 正确集成:在最外部的组件中,e.x。 <App/>
您可以使用 useEffect()
挂钩,它会抛出一个 tagmanager 事件来触发优化实验的插入。
!请注意!通过这个你会得到一个闪烁效果或慢
关闭您的站点,因为您必须等到所有东西都被水化
在慢速设备上可能需要几秒钟然后重新渲染
你的内容。
这是 Jamstack Pages 的常见问题 - 可以通过以下方式解决
将实验 api 直接集成到代码中,这肯定是
更复杂。
同步加载会降低您的网站速度,因为它会阻止呈现,直到加载 JS 和内容为止,异步加载会使网站闪烁。这是使用基于标签的 A/B 测试时的两个选项 - 你必须选择较小的邪恶。
标题可能看起来有点含糊,但那是因为我目前在将 Google Optimize 集成到我们的 React / Next.js 项目中时遇到了多个问题。我将尝试尽可能详细地解释我的问题和行为。但是,如果有什么不清楚的地方,请告诉我。
问题:
- 虽然在头顶添加了Google优化,但我们总是遇到页面闪动。这意味着用户首先看到我们的页面,然后什么也看不到(异步隐藏功能启动),然后页面再次发生变化。
- 我创建了一个 re-orders 导航 link 的实验,删除了一个导航 link,并更改了我们的 CTA 文本。出于测试目的,我已将变体设置为 100%。发生的事情(与问题 1 相关)是,我们首先看到我们的原始网页,然后是更改,然后是删除了一个导航 link 的原始网页。这意味着它添加了变体,但删除了一些更改。
- 在动态页面上添加实验时,无法应用更改。当我 运行 实验时,没有任何变化,而当我 re-open 可视化编辑器时,它说更改有问题。即使更改只是简单的文本更改。
我尝试过的:
- 在 html 上默认添加“async-hide”类名。这会将网页设置为默认隐藏。如果我使用 Google 同步优化,效果很好。但是,如果我将其设置为异步,则需要 1 到 2 秒才能显示页面,这不是很好的性能。
- 我按照 Google here 提到的确切步骤在 Google 标签管理器中添加了 Google 优化。是的,我确实将 async-hide 函数中的 Google 优化容器 ID 更改为 GTM 容器 ID。
- 我取消了上面的第 2 部分并添加了 Google 像这样手动优化。
<Html lang="en" className="async-hide">
<Head>
{/*
Google Optimize Ant-Flicker Snippet
https://support.google.com/optimize/answer/9692472?ref_topic=6197443
*/}
<style
dangerouslySetInnerHTML={{
__html: `.async-hide { opacity: 0 !important}`,
}}
/>
<script
dangerouslySetInnerHTML={{
__html: `
(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
(a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
})(window,document.documentElement,'async-hide','dataLayer',4000,
{'OPT-OPTIMIZE_ID':true});
`,
}}
/>
<script src="https://www.googleoptimize.com/optimize.js?id=OPT-OPTIMIZE_ID"></script>
{/* Google Tag Manager */}
<script async src="https://www.googletagmanager.com/gtm.js?id=GTM-TAGMANAGER_ID"></script>
<script
dangerouslySetInnerHTML={{
__html: `
(function(w,l){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});
})(window,'dataLayer');
`,
}}
></script>
...
[rest of code]
我遇到的问题
- 此问题是否与 Next.js 有关?事实上,我们在 React 应用程序中使用静态多页而不是单页
- 在 React / Next.js 项目中实施 Google 优化的最佳方法是什么:通过 Google 标签管理器或 Google 优化
- 在 React / Next.js 项目中 Google 优化的最佳加载方法是什么:异步还是同步?
这是您在这里遇到的一个很常见的问题。 Google 优化和其他 A/B 通过 Javascript 在客户端更改网站内容的测试解决方案会产生闪烁效果,因为必须先下载脚本才能更改任何内容。
回答您的问题:
当您使用 next.js 时,会出现一些特殊问题。 Next.js 在服务器端使用服务器(或静态渲染阶段),在客户端使用水化阶段。当您在水合作用开始之前放置 Google 优化(并加载)时,它将呈现正确的实验,但一旦水合作用开始就会被覆盖。
如何将它与 Tagmanger 正确集成:在最外部的组件中,e.x。
<App/>
您可以使用useEffect()
挂钩,它会抛出一个 tagmanager 事件来触发优化实验的插入。!请注意!通过这个你会得到一个闪烁效果或慢 关闭您的站点,因为您必须等到所有东西都被水化 在慢速设备上可能需要几秒钟然后重新渲染 你的内容。
这是 Jamstack Pages 的常见问题 - 可以通过以下方式解决 将实验 api 直接集成到代码中,这肯定是 更复杂。
同步加载会降低您的网站速度,因为它会阻止呈现,直到加载 JS 和内容为止,异步加载会使网站闪烁。这是使用基于标签的 A/B 测试时的两个选项 - 你必须选择较小的邪恶。