如何实现CF7表单提交时同时完成Google AdWords追踪与跳转?
解决表单提交时AdWords追踪与感谢页跳转的冲突问题
嘿,我猜你现在碰到的问题是:单独加AdWords追踪或者单独加跳转都没问题,但放一起要么报"标识符已声明"的错,要么跳转太快导致追踪根本没发送成功对吧?这俩问题其实很好解决,核心就是整合代码避免重复,同时确保追踪请求先发出去再跳转。
下面是我整理好的完整实现,直接替换你原来的代码就行:
整合后的代码(WordPress环境)
<?php // 只用一个wp_footer钩子函数,避免重复声明 add_action( 'wp_footer', 'mycustom_form_tracking_redirect' ); function mycustom_form_tracking_redirect() { // 可选:只在你的表单页面加载这段脚本,省点性能 if ( is_page( '你的表单页面slug' ) ) { ?> <script type="text/javascript"> // 等页面DOM加载完再绑定事件 document.addEventListener('DOMContentLoaded', function() { // 替换成你实际的表单选择器,比如#contact-form或者.form-class const targetForm = document.querySelector('#your-form-id'); if (targetForm) { targetForm.addEventListener('submit', function(e) { // 先拦住默认的表单提交,不然跳转直接打断追踪 e.preventDefault(); // --- 第一步:执行Google AdWords转化追踪 --- // 把下面的参数换成你自己的AdWords追踪信息 gtag('event', 'conversion', { 'send_to': 'AW-你的账号ID/转化ID', 'value': 0.0, // 可选:填写转化的价值 'currency': 'CNY', // 可选:对应货币代码 'transaction_id': '' // 可选:用来避免重复统计的订单ID }); // --- 第二步:等追踪请求发出去再跳转/提交 --- // 给浏览器留500毫秒时间发送追踪请求,时间可以根据情况调整 setTimeout(function() { // 两种选择,选适合你的: // 1. 如果你的表单需要先把数据提交到后台(比如用Contact Form 7这类插件),就用这个: targetForm.submit(); // 2. 如果是AJAX表单(数据已经异步提交完了),直接跳感谢页: // window.location.href = 'https://你的域名/thank-you-page/'; }, 500); }); } }); </script> <?php } } ?>
为啥这么改?
- 解决标识符重复:把原来两个分开的
wp_footer钩子函数合并成一个,再也不会报"标识符已声明"的错误了。 - 确保追踪不丢失:用
e.preventDefault()先阻止表单默认提交,等追踪代码执行完、给足时间发送请求后,再触发提交或者跳转,避免页面刷新把追踪请求打断。 - 性能优化:加了
is_page()判断,只在表单所在页面加载脚本,不用全站都跑这段代码。
小细节调整建议
- 把
#your-form-id换成你实际表单的ID或者类选择器,比如你的表单是<form id="contact-us">,就改成#contact-us。 - AdWords的
send_to参数一定要换成你自己的转化ID,这个在AdWords后台的转化跟踪里能找到。 - 如果发现追踪还是没触发,可以把
setTimeout的时间从500改成1000(1秒),确保请求发出去。 - 如果是用表单插件(比如CF7),插件本身可能有提交后的跳转设置,那你只用保留追踪部分,把
setTimeout里的代码换成插件的跳转逻辑就行。
内容的提问来源于stack exchange,提问作者eMikkelsen
相关产品推荐
相关产品推荐

