在MODX Revolution中安装GTM遇错:pdotools报意外标签'w'
问题根源
PDOTools模板引擎会将模板内的{}识别为自身的标签语法进行解析,而你插入的GTM代码中包含{w[l]=...}结构,被引擎误判为非法PDO标签,直接导致模板解析失败,页面出现白屏。
解决办法
以下三种方法任选其一即可:
方法1:用静态片段(Chunk)封装GTM代码
- 登录MODX后台,新建一个Chunk(比如命名为
gtm_head),将完整的GTM代码粘贴进去后保存。 - 在head模板中调用该Chunk:
[[$gtm_head]]。MODX会直接输出Chunk内的原始内容,不会让PDOTools解析其中的代码。
方法2:用PDO的{literal}标签包裹JS代码
直接在GTM代码前后添加{literal}和{/literal}标签,让PDOTools跳过这段内容的解析:
<!-- Google Tag Manager --> {literal} <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-FFFFFFF');</script> {/literal} <!-- End Google Tag Manager -->
方法3:用Snippet输出GTM代码
- 后台新建一个Snippet(比如命名为
outputGTM),内容如下:
return '<!-- Google Tag Manager --><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);})(window,document,\'script\',\'dataLayer\',\'GTM-FFFFFFF\');</script><!-- End Google Tag Manager -->';
- 在head模板中调用该Snippet:
[[!outputGTM]],Snippet返回的内容会直接输出,不会被PDOTools解析。
验证步骤
修改完成后,清空MODX缓存,刷新页面,检查页面是否正常加载,同时查看浏览器控制台是否有GTM的加载请求,确认代码生效。
内容的提问来源于stack exchange,提问作者Anton Mislawsky
相关产品推荐
相关产品推荐

