dataLayer.push not working after GTM script

三世轮回 提交于 2019-12-04 12:58:30

You're not following best practices, so you'll run into issues, sooner or later.

  • Always use .push instead of initialization: your first call is an array initialization (dataLayer = [). This means that if the dataLayer already exists, it will be completely overwritten, including the .push method which is customized by GTM in order to receive pushed events. Right now it's working fine because you're calling GTM after the initialization. But it's a bad habit to take. One day you will move GTM above that initialization or add similar initialization calls after GTM, and it will break.

Your first call should be:

dataLayer = window.dataLayer || [];  
dataLayer.push({...});
  • Always set the event property: the event property is what is used by GTM to define triggers and know when data becomes available. You can have 2 successive .push calls, the 1st with an event, and the 2nd without, and the data from the 1st will be available in the 2nd event (as long as that event doesn't overwrite it), but once again that's bad habit and playing with fire.

For instance:

dataLayer.push({
  'event: 'ecommerce', // naming is up to you, should match your GTM triggers 
  'ecommerce': {
  ...

In your particular case, since the event key is missing, it works as long as GTM loads after the push, because the data is already there when GTM kicks in. When the push call is moved after GTM, because there is no event property, there is just no way for GTM to know when data becomes available. So you should:

  • Add the event key (always!)
  • Configure a trigger which matches the event

Here is some more reading on those topics:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!