# Conversion goals are configured in the analytics platform

- **Pattern:** `ab-001704` (`marketing-analytics.event-conversion-tracking.conversion-goal-configured`)
- **Severity:** high
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-001704
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-001704)

## Why it matters

A conversion goal is what turns analytics from a pageview counter into a revenue measurement tool. Without a configured goal — a dedicated success page, a named `purchase` or `sign_up` event, a webhook-triggered completion event — GA4 has nothing to optimize against, Google Ads smart bidding has nothing to learn from, and your dashboards cannot answer the one question that matters: how many visitors became customers. Conversion reports stay empty.

## Severity rationale

High because without configured goals the analytics platform cannot measure the outcome the business exists to produce.

## Remediation

Create a dedicated success route like `app/signup/success/page.tsx` and fire GA4's recommended conversion event on mount:

```tsx
'use client'
export default function SignupSuccessPage() {
  useEffect(() => { analytics.track('sign_up', { method: 'email' }) }, [])
  return <div>Welcome.</div>
}
```

Use GA4's named events — `purchase`, `sign_up`, `generate_lead`, `subscribe` — because GA4 maps them to conversion reports without manual configuration. For payment flows, fire the event from the Stripe webhook handler on `checkout.session.completed`.

## Detection

- **ID:** `conversion-goal-configured`
- **Severity:** `high`
- **What to look for:** "Configured in the analytics platform" cannot be detected from code — instead, look for proxies that indicate goals are set up: dedicated thank-you pages or success routes (e.g., `/signup/success`, `/checkout/complete`, `/thank-you`), analytics events with conversion-intent names (`purchase`, `sign_up`, `generate_lead`, `conversion`), or GA4 recommended event names for conversions. Also check for Stripe webhook handlers that trigger analytics events on payment completion. The presence of these signals strongly suggests goals are being tracked; their absence is a red flag.
- **Pass criteria:** At least 1 of the following: a dedicated conversion/success page exists with analytics tracking, an analytics event with a recognized conversion-intent name exists (`purchase`, `sign_up`, `generate_lead`, `subscribe`), or at least 1 payment webhook handler triggers an analytics event. Enumerate all conversion-intent event names found.
- **Fail criteria:** No dedicated success/thank-you pages, no conversion-intent event names, and no webhook-triggered analytics events. The codebase shows analytics tracking only generic page views with no signals of conversion goal setup.
- **Skip (N/A) when:** No analytics is present (`script-present` failed). Skip for developer tools, CLIs, or library projects with no conversion flows.
- **Detail on fail:** `"No /signup/success, /checkout/complete, or equivalent thank-you routes found. No conversion-intent event names (purchase, sign_up, generate_lead) found in analytics calls. Cannot confirm conversion goals are configured."`
- **Remediation:** Create a dedicated success page for each conversion flow and fire a conversion event when it loads:

  ```tsx
  // app/signup/success/page.tsx
  'use client'
  import { useEffect } from 'react'
  import { analytics } from '@/lib/analytics'

  export default function SignupSuccessPage() {
    useEffect(() => {
      analytics.track('sign_up', { method: 'email' })
    }, [])
    return <div>Welcome! Your account is ready.</div>
  }
  ```

  Use GA4's recommended event names for common conversions (`purchase`, `sign_up`, `generate_lead`) — these map automatically to GA4's conversion reports without additional configuration.

Taxons: observability

HTML version: https://auditbuffet.com/patterns/ab-001704
