Feature image on how to set up Google Analytics 4 to capture seo conversion events
Technical SEO5 min read

How to Set Up GA4 Goals and Track SEO Conversions

Oladoyin Falana
Oladoyin Falana

May 15, 2026

Reviewed bySemola Digital Content Team

Why Conversion Tracking is Not Optional

Without conversion tracking, you are flying blind. You may know your organic sessions are growing. You do not know whether those sessions are generating leads, enquiries, or sales. You do not know which pages are converting and which are attracting the wrong audience. You cannot calculate ROI. You cannot justify the investment to a finance team. You cannot make data-driven decisions about which content to scale and which to abandon.

The cost of this gap is compounding. An SEO engagement without conversion tracking is three to six months of work that generates conclusions like ‘traffic went up’ rather than ‘organic generated 43 leads at a cost per lead of ₦7,900.’ The second statement is defensible. The first is a decoration.

GA4 gives you everything you need to produce the second statement. It takes approximately three hours to configure correctly and produces measurement data that cannot be retroactively recovered if you delay. Configure it before traffic exists, not after.

Step 1: Confirm Your GA4 Property is Correctly Set Up

Before configuring conversion events, confirm the foundation is clean. A misconfigured GA4 property produces data that looks accurate but misleads every decision made from it.

Verify the tracking code is firing

Google tag firing on cta

Open your website in Chrome. Open DevTools (F12), go to the Network tab, reload the page, and filter by ‘google-analytics’ or ‘gtag’. You should see a hit to collect.analtyics.google.com with your Measurement ID in the payload. If no hit appears, the tracking code is not installed.

// Alternative: use GA4 DebugView to verify hits in real time
// In Chrome DevTools Console, run:
document.cookie = '_ga_debug=1'

// Then in GA4: Admin → DebugView
// Reload your site and watch events appear live
// Every page load should show a 'page_view' event
// If nothing appears after 30 seconds: tracking code is not installed
javascript

Verify your Measurement ID is correct

// Your Measurement ID format: G-XXXXXXXXXX
// Find it: GA4 → Admin → Data Streams → your stream → Measurement ID

// Check it matches what is on your site:
// In DevTools → Sources → search for 'G-' to find the ID in your code
// Or in Network tab: filter by 'collect', click the request,
// look for 'tid=G-XXXXXXXXXX' in the query string
text

Confirm data is not being sampled or filtered incorrectly

Go to GA4 → Admin → Data Settings → Data Filters. If you see an active filter excluding internal traffic, confirm the IP address listed matches your office IP. An incorrectly configured internal traffic filter will suppress a significant portion of your real data if your IP range is too broad.

Step 2: Identify Every Conversion Point on Your Site

Before creating conversion events, list every action on your site that represents a genuine business outcome. Be specific. Generic tracking produces generic reports.

Conversion TypeTrigger EventPriorityWhat It Proves
Contact form submitForm submission completeP1 — CriticalA visitor became a lead. The single most important event for most service businesses.
Phone number clickClick on tel: linkP1 — CriticalHigh-intent action. Mobile users who call are frequently ready to buy.
Email link clickClick on mailto: linkP1 — CriticalSecond-most common enquiry method for professional services.
Booking widget completeCalendar confirmation pageP1 — CriticalThe most committed action possible before a contract is signed.
Resource/PDF downloadFile download eventP2 — HighLead magnet engagement. Indicator of serious research intent.
Live chat initiatedChat widget open eventP2 — HighHigh-intent signal, especially during business hours.
Pricing page visitPage view of /pricing/P3 — MediumCommercial intent indicator. Not a conversion but a strong signal.
Video play (key videos)Video start eventP3 — MediumContent engagement depth. Useful for long-consideration cycles.

Step 3: Create Conversion Events

GA4 tracks events automatically (page_view, scroll, click, etc.). For business-specific conversions, you either create custom events in GA4 or push them from your site via the dataLayer. The method depends on your site’s technical setup.

Method A: Mark an existing event as a conversion (no code required)

If GA4 is already detecting the action you want to track as a conversion — for example, a thank-you page view after a form submission — you can mark it directly without touching your code.

// Path: GA4 → Admin → Events
// Look for an event that fires on your confirmation/thank-you page
// Common candidates:
//   page_view with page_location containing '/thank-you'
//   page_view with page_location containing '/contact/success'

// Once found:
// Click the toggle in the 'Mark as conversion' column
// The event becomes a conversion within 24 hours

// Verify: Go to Conversions report
// Submit your own form → wait 24 hours → check it appears
text

Method B: Create a custom event from an existing event

If no existing event matches your conversion point, create a custom event in GA4 without touching your site code. This works for page-view-based conversions.

// Path: GA4 → Admin → Events → Create Event

// Example: Track any visit to a URL containing '/thank-you/'
// Custom event name: contact_form_submit

// Matching conditions:
// Event name: equals: page_view
// page_location: contains: /thank-you/

// Click 'Create', then mark the new event as a conversion
// GA4 Admin → Events → find 'contact_form_submit' → toggle on

// Important: this method only works if the thank-you page
// has a distinct URL. If the form submits via AJAX with no
// URL change, use Method C instead.
text

For AJAX form submissions, phone click tracking, or any interaction that does not produce a page URL change, push a custom event to the dataLayer. This is the most reliable method and works with Google Tag Manager.

// Push event from your contact form (JavaScript)
// Add to your form's success callback:

document.getElementById('contact-form').addEventListener('submit', function(e) {
  // After successful submission:
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({
    'event': 'contact_form_submit',
    'form_type': 'contact',
    'page_location': window.location.href
  });
});

// Track phone number clicks:
document.querySelectorAll('a[href^="tel:"]').forEach(function(el) {
  el.addEventListener('click', function() {
    window.dataLayer.push({
      'event': 'phone_click',
      'phone_number': this.getAttribute('href')
    });
  });
});

// Track email link clicks:
document.querySelectorAll('a[href^="mailto:"]').forEach(function(el) {
  el.addEventListener('click', function() {
    window.dataLayer.push({
      'event': 'email_click',
      'email_address': this.getAttribute('href').replace('mailto:', '')
    });
  });
});
javascript

Configuring the dataLayer events in Google Tag Manager

If you are using Google Tag Manager (recommended), create a trigger for each dataLayer event and a GA4 event tag that fires on it.

// Google Tag Manager configuration:

// 1. Create a Trigger:
//    Trigger Type: Custom Event
//    Event Name: contact_form_submit
//    (match exactly, not regex)

// 2. Create a Tag:
//    Tag Type: Google Analytics GA4 Event
//    Configuration Tag: your GA4 config tag
//    Event Name: contact_form_submit
//    Triggering: the trigger you just created

// 3. Repeat for: phone_click, email_click, pdf_download

// 4. Preview mode → submit your form → confirm event fires
// 5. Publish the container
// Then in GA4: Admin → Events → mark each as conversion
text

Step 4: Isolate Organic Search Traffic

A conversion event tells you that a lead happened. Channel grouping tells you that an organic search visitor generated that lead. Without channel isolation, you cannot connect SEO to business outcomes. GA4 does this automatically via its default channel grouping, but it needs verification.

Verify organic is classified correctly

// GA4 → Reports → Acquisition → Traffic Acquisition
// Primary dimension: Session default channel group
// You should see: Organic Search as a distinct row

// If 'Organic Search' is missing or grouped with other channels:
// GA4 → Admin → Data Settings → Channel Groups
// Confirm 'Organic Search' rule is:
//   Session medium exactly matches 'organic'

// Recommended: create a custom channel group to separate
// branded and non-branded organic:

// GA4 → Admin → Data Settings → Channel Groups → Create Custom

// Rule 1: 'Organic (Non-Branded)'
//   Session medium = 'organic'
//   AND session campaign does NOT contain [your brand name]

// Rule 2: 'Organic (Branded)'
//   Session medium = 'organic'
//   AND session campaign CONTAINS [your brand name]

// This separation is critical: branded organic = returning/aware users
// Non-branded organic = new audience discovered through content
text

Linking GSC to GA4 enables the Queries report: which exact search terms generated sessions and which of those sessions converted. This is the most commercially useful report in the entire measurement stack.

// Path: GA4 → Admin → Product Links → Search Console Links → Add
// Select the matching GSC property → Confirm

// Access linked data after 24–48 hours:
// GA4 → Reports → Acquisition → Search Console → Queries

// This report shows:
// Query | Clicks | Impressions | CTR | Sessions | Conversions

// Add 'Conversions' as a secondary metric:
// Click the column header area → Add metric → select your
// conversion event name

// Now you can answer: which search queries are generating leads?
// A query with 200 clicks but 0 conversions = intent mismatch
// A query with 40 clicks and 8 conversions = protect and grow this
text

Step 5: Build the Organic Conversion Report

The default GA4 reports are designed for general use. For SEO measurement, build a custom Exploration that shows exactly what you need: organic sessions, engagement, and conversions side by side.

Create the Organic SEO Conversion Exploration

// GA4 → Explore → Blank Exploration
// Name it: 'Organic SEO — Conversion Report'

// DIMENSIONS (drag to Rows):
//   Landing page + query string
//   Session default channel group

// METRICS (drag to Values):
//   Sessions
//   Engaged sessions
//   Engagement rate
//   Average engagement time per session
//   Conversions (select your specific event name)
//   Session conversion rate

// FILTERS:
//   Session default channel group exactly matches 'Organic Search'
//   (or your custom 'Organic Non-Branded' group)

// DATE RANGE: Set to last 28 days, compare to previous 28 days

// SORT: Session conversion rate — Descending
// This surfaces your highest-converting organic landing pages at the top

// Save and share with edit access to your client/team
text

Reading the report: three things to look for

High sessions, low conversion rate: The page is attracting the wrong audience. The keyword driving traffic does not match the commercial intent of your service page. Either the content needs to be rewritten for a different intent, or the page needs a clearer call-to-action aligned to what the searcher expects.

High conversion rate, low sessions: This page is commercially excellent but under-trafficked. Expand the content, build internal links to it from related cluster articles, and consider building additional cluster articles targeting related queries to grow sessions while preserving the conversion rate.

Zero conversions despite significant traffic: A content piece is generating informational traffic from people who are researching but not ready to buy. This is not a failure — it is top-of-funnel traffic. Ensure these pages have a clear next step: an internal link to a service page, a lead magnet download, or a newsletter signup that keeps the visitor in the pipeline.

Step 6: Calculate Cost Per Organic Lead

This is the metric that converts an SEO report into a business case. It is calculated from GA4 data and your financial records. Run it monthly.

// Cost Per Organic Lead Formula:
// CPL = Monthly SEO Investment / Organic Conversions (that month)

// Example:
// Monthly investment: ₦380,000 (agency + content + tools)
// Organic goal completions from GA4: 43
// Cost per organic lead = 380,000 / 43 = ₦8,837

// Compare to your paid search CPL for the same queries:
// If Google Ads CPC = ₦800 and conversion rate = 3%
// Paid CPL = ₦800 / 0.03 = ₦26,667 per lead

// Organic CPL at month 7: ₦8,837
// Paid CPL equivalent: ₦26,667
// Organic is 67% cheaper per lead

// This number is what you present to a finance team or board.
// Not rankings. Not traffic. Cost per lead vs paid alternatives.

// Track it monthly. It should decline as traffic scales:
// Month 1:  ₦63,000 CPL (few conversions, full investment)
// Month 6:  ₦18,000 CPL (conversions growing)
// Month 12: ₦7,500 CPL (volume scaling, investment flat)
text

Step 7: Set Up the Monthly Verification Routine

Conversion tracking degrades silently. A developer updates a form plugin, a URL changes after a site migration, a new privacy banner blocks the tracking script. Build a monthly check into your workflow so you catch failures before they erase a month of data.

// Monthly conversion tracking verification (first Monday of month):

// 1. Submit your own contact form → check DebugView immediately
//    GA4 → Admin → DebugView
//    The 'contact_form_submit' event should appear within 60 seconds

// 2. Click your phone number link on mobile → check DebugView
//    The 'phone_click' event should appear

// 3. Check last month's conversion volume in GA4:
//    Reports → Conversions
//    If conversions dropped sharply vs prior month with no
//    corresponding traffic drop: tracking failure, not lead drop

// 4. Check GSC for crawl errors on key landing pages:
//    GSC → Indexing → Pages → Errors
//    A page removed from the index stops generating organic sessions
//    which shows up as a conversion drop in GA4

// 5. Run a test conversion in Incognito mode (clears cookies)
//    This simulates a new user and confirms the full tracking path

// Monthly check takes 20 minutes. Saves weeks of lost data.
text

Quick Reference: The Complete Setup Checklist

TaskPath in GA4 / GTMStatus
Verify GA4 tracking code is firing on all pagesDevTools → Network → filter 'collect' OR DebugView☐ Done
Confirm Measurement ID matches on site and in GA4GA4 → Admin → Data Streams → Measurement ID☐ Done
Create 'contact_form_submit' conversion eventGA4 → Admin → Events → Create Event OR GTM → New Tag☐ Done
Create 'phone_click' conversion eventGTM dataLayer push → GA4 mark as conversion☐ Done
Create 'email_click' conversion eventGTM dataLayer push → GA4 mark as conversion☐ Done
Mark all P1 events as conversions in GA4GA4 → Admin → Events → toggle Mark as Conversion☐ Done
Verify conversions fire via DebugViewGA4 → Admin → DebugView → submit test form☐ Done
Confirm Organic Search channel grouping is correctGA4 → Admin → Data Settings → Channel Groups☐ Done
Create branded vs non-branded organic splitGA4 → Admin → Data Settings → Channel Groups → Create Custom☐ Done
Link Google Search Console to GA4GA4 → Admin → Product Links → Search Console Links☐ Done
Build Organic SEO Conversion ExplorationGA4 → Explore → Blank → set dimensions/metrics/filter☐ Done
Record Month 1 baseline: sessions, conversions, CPLGA4 Reports → document in content strategy tracker☐ Done
Schedule monthly verification routineFirst Monday of each month — 20-minute check☐ Done

Configure it Today. The Data Cannot Be Recovered Retroactively

Every day your site operates without conversion tracking is a day of organic lead data permanently lost. GA4 does not backfill. Whatever traffic your site received before conversion events were configured is unattributable to any business outcome.

The setup described in this guide takes two to three hours for a standard service business site. The GA4 DebugView verification takes twenty minutes. The monthly check takes twenty minutes. The cost of not doing any of this is measured in months of unmeasured leads and an SEO engagement that cannot demonstrate its own value.

Configure the events. Verify they fire. Link Search Console. Build the exploration. Record the baseline. Then measure every month against that baseline, and the conversation with your finance team or your board changes from ‘trust us, SEO is working’ to ‘here is the cost per lead this month versus what we were paying in paid search.’

That is the conversation worth having. And it starts with three hours of configuration.

Continue reading:

Need help setting this up? semoladigita@gmail.com

Semola Digital configures GA4 conversion tracking and GSC linkage as part of every SEO engagement. We also offer this as a standalone setup session for businesses that already have an SEO team but are not yet tracking conversions correctly.

Share this article

Oladoyin Falana
Oladoyin Falana

Founder, Technical Analyst

Oladoyin Falana is a certified digital growth strategist and full-stack web professional with over five years of hands-on experience at the intersection of SEO, web design & development. His journey into the digital world began as a content writer — a foundation that gave him a deep, instinctive understanding of how keywords, content and intent drive organic visibility. While honing his craft in content, he simultaneously taught himself the building blocks of the modern web: HTML, CSS, and React.js — a pursuit that would eventually evolve into full-stack Web Development and a Technical SEO Analyst.

Follow me on LinkedIn →

Related Insights