AJAX Forms Break Google Ads Tracking: How to Fix It

You are running Google Ads. Leads are landing in your inbox. But Google Ads reports zero conversions — or far fewer than you actually received. Your cost-per-lead looks terrible, Smart Bidding has nothing to work with, and you cannot tell which campaigns are driving results.

The culprit is almost certainly your contact form. Most WordPress form plugins submit in the background using a technique called AJAX — and that single behaviour breaks the most common Google Ads conversion tracking setup. Here is why it happens and four ways to fix it.

Why Google Ads Says Zero Conversions (But Your Inbox Is Full of Leads)

Traditional Google Ads conversion tracking works by detecting a page load. You create a conversion action, install a tracking tag, and tell it to fire when a visitor reaches your “thank you” page. When someone submits a form and the browser loads /thank-you/, the tag fires, and Google records a conversion.

The problem: modern WordPress forms do not load a thank-you page. They submit the form data in the background and display a success message on the same page. The URL never changes. The tracking tag never fires. Google Ads never records the conversion.

This is not a minor reporting glitch. When Google Ads cannot see your conversions, it cannot optimise your campaigns. You end up paying for clicks with no feedback loop telling Google which clicks are valuable — and which are wasted spend. If you are using Smart Bidding strategies like Maximise Conversions or Target CPA, the algorithm is essentially guessing because it does not have enough conversion data to learn from.

Understanding how lead source tracking works is the first step toward fixing this.

Does Your WordPress Form Have This Problem?

AJAX (Asynchronous JavaScript and XML) is a method of sending data from a web page to a server without reloading the page. When your contact form uses AJAX, the visitor fills in their details, clicks submit, and sees a success message — all without the browser navigating to a new URL.

Here is a quick test: go to your site, fill in your own form, and click submit. If the page does not reload or the URL does not change, your form uses AJAX.

Most popular WordPress form plugins use AJAX by default or have it enabled as a common setting:

  • Contact Form 7 (10+ million active installs) — AJAX by default, no page reload
  • WPForms (6+ million active installs) — AJAX submission enabled by default
  • Gravity Forms (900,000+ active installs) — AJAX available via shortcode parameter; many sites enable it
  • Ninja Forms (600,000+ active installs) — AJAX by default
  • Forminator (600,000+ active installs) — AJAX by default
  • Fluent Forms — AJAX by default
  • Elementor Pro Forms — AJAX by default
  • Formidable Forms — AJAX capable, commonly enabled

If you installed a form plugin and did not manually configure a page redirect after submission, your form almost certainly submits via AJAX.

Tip: Active installation numbers sourced from the WordPress.org plugin directory as of February 2026.

How AJAX Forms Break Google Ads Conversion Tracking

Here is what happens with a traditional (non-AJAX) form versus an AJAX form:

Traditional form flow:

  1. Visitor clicks your Google ad and lands on your page — the URL contains a GCLID (Google Click Identifier) that links this visit to the specific ad click
  2. Visitor fills in your contact form and clicks submit
  3. Browser redirects to /thank-you/
  4. Your Google Ads conversion tag fires on the thank-you page load
  5. Google records the conversion and matches it to the original click via the GCLID

AJAX form flow:

  1. Visitor clicks your Google ad and lands on your page with a GCLID in the URL
  2. Visitor fills in your contact form and clicks submit
  3. Form data is sent in the background — the page does not reload
  4. A “Thank you” message appears on the same page
  5. No new page loads, so the conversion tag never fires
  6. Google Ads records nothing — the click looks like it produced zero results

The GCLID is still present in the browser. The form submission still happened. But the event that Google Ads needs — a page load on a specific URL — never occurred. The conversion is invisible.

This is the same fundamental problem that causes GCLIDs to disappear between pages: the tracking mechanism breaks when the expected browser behaviour does not happen.

The Real Cost of Invisible Conversions

Missing conversion data does not just make your reports inaccurate. It actively degrades your ad performance:

Wasted ad spend. You cannot tell which campaigns, ad groups, or keywords are generating leads. You might pause profitable campaigns or increase budget on ones that produce nothing.

Broken Smart Bidding. Google’s automated bidding strategies (Maximise Conversions, Target CPA, Target ROAS) learn from conversion data. Google recommends at least 30 conversions in the last 30 days for these strategies to optimise effectively. If half your conversions are invisible, the algorithm trains on incomplete data and makes poor decisions.

Misleading cost-per-lead. If Google Ads shows 5 conversions but you actually received 25 form submissions, your reported cost-per-lead is five times higher than reality. This can trigger budget cuts on campaigns that are actually profitable.

Attribution blindness. Without conversion data matched to clicks, you cannot perform keyword-level or ad-level analysis. You are spending money but flying blind on what works.

Key point: The Smart Bidding 30-conversion recommendation comes from Google Ads Help. With fewer conversions, the algorithm still runs — but it optimises on guesswork rather than real patterns.

Server-side tracking tools like lead source tracking plugins capture every form submission regardless of how the form submits — which means your data stays complete even when browser-side tags fail.

4 Ways to Fix Google Ads Conversion Tracking for AJAX Forms

Each method below addresses the same problem from a different angle. Choose based on your technical comfort level and how bulletproof you need your tracking to be.

Note: Methods 2 and 3 require Google Tag Manager (GTM). If you have the Google Ads tag installed directly on your site (via a plugin or pasted into your header), only Methods 1 and 4 apply without additional setup.

Method 1: Force a Thank-You Page Redirect

The simplest approach: instead of showing an inline success message, redirect the visitor to a dedicated /thank-you/ page after submission. Your existing page-load conversion tag then fires as expected.

How easy this is depends on your form plugin:

  • WPForms and Gravity Forms — built-in setting to redirect to a URL after submission. No code needed.
  • Ninja Forms and Forminator — configurable in form settings. No code needed.
  • Contact Form 7 — does not have a native redirect setting. You need either a helper plugin (like “Redirection for Contact Form 7”) or a small JavaScript snippet in your form’s additional settings.
  • Elementor Pro Forms — redirect action available in the form widget settings.

Pros: Simple to set up for most plugins. Works with standard page-view triggers in Google Ads.

Cons: Worse user experience (the page reloads). Does not scale well if you have multiple forms that should trigger different conversion actions. Does not work for single-page applications.

Method 2: GTM Element Visibility Trigger

Google Tag Manager can detect when a specific HTML element appears on the page. When your form shows a “Thank you for your submission” message, GTM spots it and fires your conversion tag.

How to set it up:

  1. Submit your own form and inspect the success message element in your browser’s developer tools. Note the CSS selector (e.g., .wpcf7-mail-sent-ok or .gform_confirmation_message).
  2. In GTM, create a new Element Visibility trigger using that CSS selector.
  3. Check “Observe DOM changes” — this is critical because the success message is dynamically inserted after submission.
  4. Set the firing frequency to “Once per page” to prevent duplicate conversions.
  5. Attach your Google Ads Conversion tag to this trigger.

Pros: No custom JavaScript needed. Uses a native GTM trigger type.

Cons: Can fire false positives if other elements share the same CSS class. Fragile — if a theme or plugin update changes the success message HTML, the trigger breaks silently. Still blocked by ad blockers and cookie consent tools that prevent GTM from loading.

Method 3: GTM Custom Event via DataLayer

The most precise browser-side method. You add a small script (via a GTM Custom HTML tag) that listens for your form plugin’s AJAX response. When a successful submission is detected, it pushes a custom event to GTM’s dataLayer, which fires your conversion tag.

How it works at a high level:

  1. Add a Custom HTML tag in GTM with a JavaScript snippet that listens for form submission success events (the exact code varies by form plugin).
  2. When a successful submission is detected, the script runs dataLayer.push({event: 'formSubmission'}).
  3. Create a Custom Event trigger in GTM that fires on the formSubmission event.
  4. Attach your Google Ads Conversion tag to this trigger.
  5. Ensure a Conversion Linker tag fires on all pages so the GCLID stored in cookies can be matched to the conversion.

The implementation varies significantly between form plugins. Contact Form 7 fires a wpcf7mailsent DOM event, which is straightforward to listen for. WPForms and Gravity Forms have their own success callbacks. Some older tutorials use a generic AJAX listener that intercepts all XMLHttpRequest responses, but these can produce false positives from unrelated AJAX requests on the page.

Pros: Most precise browser-side method. Works across multiple form plugins with the right listener.

Cons: Requires GTM expertise and JavaScript knowledge. Can break if the form plugin changes its AJAX response format in an update. Still subject to ad blockers and consent tools blocking GTM entirely.

Method 4: Server-Side Lead Source Tracking

Instead of relying on browser-side tags that fire on page events, capture UTM parameters and click IDs (GCLID, wbraid, gbraid) at the server level when the form is submitted. The data is stored alongside the form entry in your WordPress database.

Because the tracking happens server-side, it does not matter whether the form uses AJAX, redirects to a thank-you page, or is embedded in an iframe. The conversion data is captured regardless. This approach is also immune to ad blockers and consent tools that block GTM or Google Ads tags in the browser.

The captured click IDs can then feed into Google’s offline conversion import, closing the loop between your ad clicks and actual leads.

How TrueConversion handles this: TrueConversion captures the traffic source — including GCLID, UTM parameters, and ad platform click IDs — for every form submission across 10 WordPress form plugins. It stores this data with each lead automatically, with no GTM setup, no thank-you pages, and no code changes to your forms. Try it free or see pricing.

Which Method Should You Choose?

MethodDifficultyReliabilityNeeds GTM?Best For
Thank-you page redirectEasyMediumNo (works with direct tag)Single simple form, non-technical users
Element Visibility triggerMediumMediumYesGTM users who want a no-code option
Custom Event via dataLayerHardHighYesAgencies, developers, multi-form sites
Server-side tracking (TrueConversion)EasyHighestNoSMBs wanting reliable data without GTM

If you have a single form and basic Google Ads setup, Method 1 is the fastest fix. If you already use GTM and have a developer available, Method 3 gives you the most control. If you want reliable tracking without ongoing maintenance, Method 4 handles it automatically.

You can also combine methods. Using both a server-side plugin (for attribution data) and a GTM-based tag (for real-time Google Ads conversion reporting) gives you redundancy — if one tracking method fails, the other still captures the data.

Two Settings That Quietly Break AJAX Tracking

Even after implementing one of the methods above, two commonly overlooked settings can undermine your conversion data:

The Conversion Linker Tag

If you use GTM, a Conversion Linker tag must fire on every page of your site — not just the conversion page. This tag reads the GCLID from the URL and stores it in a first-party cookie so it is available when the conversion event fires later. Without it, your Google Ads conversion tag fires but cannot match the conversion to the original click. Many advertisers only add the Conversion Linker to their thank-you page, which defeats its purpose.

Enhanced Conversions

Enhanced Conversions send hashed first-party data (like the email address from a form submission) to Google alongside the conversion event. This improves match rates, especially as third-party cookies are phased out and more users browse with tracking protection. If your form collects an email address, enabling Enhanced Conversions provides a second data point for Google to match the conversion — useful insurance even when your primary tracking method is working correctly.

How to Verify Your Conversion Tracking Is Working

After setting up your chosen method, test it properly:

  1. Test with GTM Preview mode. If you use Methods 2 or 3, open GTM Preview, submit your form, and verify the conversion tag fires in the debug panel.
  2. Check Google Ads conversion status. Go to Tools & Settings → Conversions in your Google Ads account. Each conversion action shows a status: Active, Needs Attention, or Inactive. If it is not Active within 72 hours of your test, something is wrong.
  3. Compare conversion counts monthly. Count your actual form submissions (from your email inbox, CRM, or tracking plugin dashboard) and compare against Google Ads reported conversions. A discrepancy above 15% warrants investigation.
  4. Watch for form spam skewing the comparison. Spam submissions inflate your actual form count but are not conversions. Filter these out before comparing.

Frequently Asked Questions

Do all WordPress contact forms use AJAX?

Not technically — but the most popular ones do by default. Contact Form 7, WPForms, Ninja Forms, Forminator, and Fluent Forms all submit via AJAX out of the box. Gravity Forms supports it as an option. If your form shows a success message without reloading the page, it uses AJAX.

Will Smart Bidding still work if I am missing some conversions?

Smart Bidding strategies will still run, but they optimise based on whatever data they receive. Google recommends at least 30 conversions in the last 30 days for strategies like Target CPA to learn effectively. If your tracking only captures half your conversions, the algorithm trains on an incomplete and potentially skewed dataset.

Can I use both GTM tracking and a server-side plugin?

Yes — and this is often the best approach. GTM feeds conversion data directly to Google Ads in real time, which supports Smart Bidding. A server-side plugin like TrueConversion provides a reliable source of truth for lead attribution, capturing data that browser-based tracking misses. The two complement each other.

What about single-page applications (React, Vue, Next.js)?

Single-page applications have the same problem magnified — no pages “load” in the traditional sense, so page-view triggers never fire. Methods 2, 3, and 4 from this article all work for SPAs. Method 1 (thank-you page redirect) does not apply since SPAs do not navigate between server-rendered pages.


Stop Guessing Which Ads Drive Your Leads

TrueConversion captures the traffic source for every WordPress form submission — AJAX or not, GTM or not. See exactly which campaigns, keywords, and channels bring in real leads. No code changes. No thank-you pages. Works with Contact Form 7, WPForms, Gravity Forms, and 7 more plugins.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *