Reactjs React/Next.js中Google优化的一般问题
标题可能看起来有点模糊,但这是因为我目前在React/Next.js项目中集成Google Optimize时遇到了多个问题。我将尽可能详细地解释我的问题和行动。但是,如果有不清楚的地方,请告诉我 问题是:Reactjs React/Next.js中Google优化的一般问题,reactjs,next.js,google-tag-manager,google-optimize,Reactjs,Next.js,Google Tag Manager,Google Optimize,标题可能看起来有点模糊,但这是因为我目前在React/Next.js项目中集成Google Optimize时遇到了多个问题。我将尽可能详细地解释我的问题和行动。但是,如果有不清楚的地方,请告诉我 问题是: 虽然谷歌优化添加在顶部的头部,我们总是经验到一个页面闪光。这意味着用户首先看到我们的页面,然后什么也看不到(异步隐藏函数启动),然后页面再次发生更改 我已经创建了一个实验,重新排序导航链接,删除一个导航链接,并更改我们的CTA文本。出于测试目的,我已将变量设置为100%。发生的情况(与问题1
{/*
谷歌优化蚂蚁闪烁片段
https://support.google.com/optimize/answer/9692472?ref_topic=6197443
*/}
{/*谷歌标签管理器*/}
...
[其余代码]
我有问题
这是你在这里遇到的一个很常见的问题。Google Optimize和其他A/B测试解决方案通过客户端上的Javascript更改网站内容,会产生闪烁效果,因为在更改任何内容之前,必须下载脚本 回答您的问题:
中,您可以使用一个useEffect()
钩子,它抛出一个tagmanager事件来触发插入优化实验
!!请注意!通过这个,你会得到一个闪烁的效果或缓慢
关闭你的网站,因为你必须等待,直到一切都水合
在速度较慢的设备上可能需要几秒钟,然后将重新启动
你的内容
这是Jamstack页面的常见问题,可以通过
将实验api直接集成到代码中,这是肯定的
更复杂
您是否正在利用nextjs提供的任何路由器事件<代码>router.events.on('routeChangeStart。如果您需要一个示例,请告诉我。不,我们在项目中不使用路由器。我们只在定义页面时使用pages文件夹。在我们的情况下,我们将其放置在src/pagesYo中,不需要使用其他第三方路由器-只需使用内置的下一个路由器。这些是nextjs提供的事件。您只需在你的app.js中做一些更改。你可以继续使用pages文件夹中的autorouting。Nextjs可以告诉你pages文件夹中的一个页面何时更改为另一个页面以及加载何时完成。你可以使用它来避免页面闪烁。我将查看这些路由器事件的文档,看看如何使用它来帮助我。谢谢你的建议ce。我会发布一个答案作为示例,但可能有人可能有更好的解决方案,所以我将不回答。祝你好运,但如果你需要appjs的完整代码,请告诉我。
<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]