Skip to content

Commit 5a1063d

Browse files
committed
fix: add event_callback pattern to Google Ads conversion tracking
- Add event_callback to trackGoogleAdsConversion() to ensure conversion ping completes before navigation - Update CTA button handlers to prevent default navigation and pass target URL - Add fallback timeout for reliability in case callback does not fire - Improve documentation with usage examples
1 parent 8e4b145 commit 5a1063d

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

apps/web-roo-code/src/app/reviewer/ReviewerContent.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ export function ReviewerContent() {
127127
href={EXTERNAL_LINKS.CLOUD_APP_SIGNUP_PRO}
128128
target="_blank"
129129
rel="noopener noreferrer"
130-
onClick={trackGoogleAdsConversion}
130+
onClick={(e) => {
131+
e.preventDefault()
132+
trackGoogleAdsConversion(EXTERNAL_LINKS.CLOUD_APP_SIGNUP_PRO)
133+
}}
131134
className="flex w-full items-center justify-center">
132135
Start 14-day Free Trial
133136
<ArrowRight className="ml-2" />
@@ -281,7 +284,10 @@ export function ReviewerContent() {
281284
href={EXTERNAL_LINKS.CLOUD_APP_SIGNUP_PRO}
282285
target="_blank"
283286
rel="noopener noreferrer"
284-
onClick={trackGoogleAdsConversion}
287+
onClick={(e) => {
288+
e.preventDefault()
289+
trackGoogleAdsConversion(EXTERNAL_LINKS.CLOUD_APP_SIGNUP_PRO)
290+
}}
285291
className="flex items-center justify-center">
286292
Start 14-day Free Trial
287293
<ArrowRight className="ml-2 h-4 w-4" />

apps/web-roo-code/src/lib/analytics/google-ads.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,40 @@
33
*/
44

55
/**
6-
* Track a Google Ads conversion event
7-
* This should only be called after user consent has been given
6+
* Track a Google Ads conversion event with optional navigation callback
7+
* This ensures the conversion ping completes before navigation occurs
8+
*
9+
* @param targetUrl - Optional URL to navigate to after conversion is tracked
10+
*
11+
* @example
12+
* // Track conversion and navigate
13+
* trackGoogleAdsConversion("https://app.roocode.com")
14+
*
15+
* @example
16+
* // Track conversion without navigation
17+
* trackGoogleAdsConversion()
818
*/
9-
export function trackGoogleAdsConversion() {
19+
export function trackGoogleAdsConversion(targetUrl?: string) {
1020
if (typeof window !== "undefined" && window.gtag) {
21+
// Callback to handle navigation after conversion tracking
22+
const callback = () => {
23+
if (targetUrl) {
24+
window.location.href = targetUrl
25+
}
26+
}
27+
1128
window.gtag("event", "conversion", {
1229
send_to: "AW-17391954825/VtOZCJe_77MbEInXkOVA",
1330
value: 10.0,
1431
currency: "USD",
32+
event_callback: callback,
1533
})
34+
35+
// Fallback timeout in case event_callback doesn't fire (network issues, etc.)
36+
// This ensures navigation still happens even if tracking fails
37+
setTimeout(callback, 1000)
38+
} else if (targetUrl) {
39+
// If gtag is not available, navigate immediately
40+
window.location.href = targetUrl
1641
}
1742
}

0 commit comments

Comments
 (0)