Google AI Max Substitutes Your Final URL. Your Tracking Template 404s.

April 27, 2026
by Cherry Rose

Google’s AI Max for Search uses a feature called Final URL Expansion to replace the destination URL on your ad with whichever WooCommerce product page Google’s AI judges most relevant to the searcher’s query. The {lpurl} your tracking template was built around is no longer the URL the user actually reaches. 84% of AI Max advertisers report neutral or negative results (ALM Corp, 2026), and Google’s own documentation excludes retail ecommerce from its 27% lift claim due to high result variability. The 404 errors showing up in your tracking-template tests are an early warning, not an edge case.

What Final URL Expansion Actually Does to Your URL

The mechanism is in the substitution step. A standard Google Ads tracking template looks something like this:

{lpurl}?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&gclid={gclid}

Without FUE, {lpurl} is the final URL you set on the ad — typically your designated landing page, like https://store.example/category/hiking-shoes/. The template resolves cleanly to that URL with parameters appended.

With FUE on, {lpurl} is no longer that URL. Google’s AI picks a different page from your site that it thinks is a better match for the user’s query. Maybe a specific product page (/product/waterproof-hiking-shoe/), a variant URL (/product/waterproof-hiking-shoe/?attribute_pa_size=11), or a category subset Google’s AI inferred from the search context. The substitution is opaque to the advertiser at click time. You don’t know which URL the user reached unless you reconstruct it from logs.

The collision happens when the substituted URL has its own query-string structure that conflicts with your tracking template’s appended parameters, or when the page the AI picked doesn’t exist in the form Google’s index assumed it did. Both produce 404s. Both are documented behaviors that Google’s own help center quietly warns about.

Why WooCommerce Stores Hit This Harder

WooCommerce URLs are query-string-heavy by design. Variable products attach parameters for attribute selection (?attribute_pa_color=blue). Multi-currency stores append currency selectors (?currency=eur). Polylang or WPML add language flags (?lang=de). Permalink customizations add their own query patterns.

A tracking template that assumed a flat product URL with no query parameters lands gracefully. A tracking template hitting a FUE-expanded URL that already carries ?attribute_pa_size=large ends up with something like:

/product/hiking-shoe/?attribute_pa_size=large?utm_source=google&utm_medium=cpc&gclid=Cj0KCQ...

That second ? is the failure. Most servers route this to a 404, some route it to the canonical product page with no variant selected, and a few route it to whatever the WooCommerce template falls back to. None of those outcomes match what your tracking template intended. The conversion still might fire — it just fires from the wrong page, with the wrong context, against the wrong product.

This is the same class of problem that surfaced with the Dynamic Search Ads sunset. When Google killed DSA, AI Max became the forced migration path — we covered that in Google Just Killed Dynamic Search Ads: Every WooCommerce Store Will Be Force-Migrated to AI Max. Stores moving over inherited DSA’s flexible URL handling and lost the structured tracking templates that came with manually configured Search campaigns.

The 15-Minute Test Before You Enable AI Max

If your campaign is currently in AI Max with FUE on, or you’re about to enable it, run this test against the campaign’s tracking template:

  1. Pull your tracking template. It lives at the campaign or account level — Google Ads → Settings → Account Settings → Tracking.
  2. Pick three likely FUE substitution URLs. Look at your bestselling product pages, three top variants, three category pages. These are the kinds of URLs Google’s AI will pick.
  3. Manually substitute {lpurl}. Replace it with each of the three URLs in turn.
  4. Add realistic parameter values. Use a real-looking gclid (any 50-character alphanumeric string works for the test), and the actual utm_source/utm_medium/utm_campaign values your template inserts.
  5. Hit each resolved URL in an incognito window. Watch for 404s, redirects to wrong products, or pages that load but with the wrong variant selected.

If any of the three URLs fail this test, your live AI Max traffic is producing the same failures at scale — you just don’t see them in Google Ads’ interface, because Google reports the click as successful regardless of what HTTP status your server returned.

The Two Unhappy Choices Google Gives You

Once you’ve confirmed the breakage, the documented options are both bad:

  • Disable Final URL Expansion. The Google Ads help center confirms that turning off Text Customization also turns off FUE, since FUE depends on Text Customization being enabled. You keep AI Max’s broad-match query expansion but lose the dynamic landing-page swap that most of the lift case depends on. AI Max becomes mostly indistinguishable from a regular Search campaign.
  • Keep FUE on and live with broken tracking. Your conversion data becomes a fiction layered on top of the wrong landing pages. Smart Bidding trains on contaminated signal. ROAS reporting drifts.

Smarter Ecommerce’s 250-campaign analysis (2026) found that AI Max’s median revenue uplift is +13%, and median CPA is 16% higher — meaning the lift, where it exists, comes with substantially more expensive clicks. The black-box reporting problem we covered in Google Opened the Performance Max Black Box applies just as cleanly to AI Max: Google shows you the headline number, not the path the click took to get there.

The Architectural Escape Hatch

The third option Google doesn’t put in its help docs: stop depending on the URL for tracking. Tracking templates were a 2010s solution to a 2010s problem — links were stable, advertisers controlled the destination URL, and stitching parameters into the URL was the only way to pass attribution context to the destination page.

None of those assumptions still hold. AI Max specifically breaks the third one: the destination URL is no longer something you control. The template approach was always going to fail when an ad platform inserted itself between the ad and the landing page.

The structural fix is to capture the gclid at first page load — via a WooCommerce hook reading $_GET['gclid'] at the entry visit — and persist it server-side against the customer’s session. The conversion event then fires at woocommerce_payment_complete with the gclid attached, regardless of which product page Google’s AI sent the click to. Google still gets the conversion. Smart Bidding still gets the signal. Your tracking template can be as plain as {lpurl}?gclid={gclid} with nothing else, because the rest of the attribution work happens on your server, not in the URL.

Here’s How You Actually Do This

Transmute Engine™ is a first-party Node.js server that runs on your subdomain (e.g., data.yourstore.com). The inPIPE WordPress plugin captures the gclid at the visitor’s first page load, persists it across the session, and fires the conversion event at woocommerce_payment_complete — sending it to Google Ads via the Enhanced Conversions API and to GA4, Facebook CAPI, and BigQuery in parallel. Whichever page Google’s AI Max decided to substitute into your final URL stops mattering, because the conversion is captured server-side from the order itself.

Key Takeaways

  • Final URL Expansion replaces your {lpurl} at click time with a page Google’s AI judges more relevant. The substitution is opaque to the advertiser.
  • WooCommerce stores hit this hardest because product URLs carry variation, currency, and language query strings that collide with tracking-template parameters.
  • The 15-minute test: manually substitute likely AI-picked URLs into your tracking template and hit each one. Any 404 or wrong-product result is happening to live traffic too.
  • Disabling FUE defeats the AI Max lift case; keeping it on means tracking on contaminated context. Both are bad.
  • The escape hatch is server-side capture. Persist the gclid at first page load and fire the conversion at the order hook — the tracking template stops mattering.

Frequently Asked Questions

What is Final URL Expansion in Google AI Max?

Final URL Expansion (FUE) is the AI Max feature that lets Google replace the final URL you set on an ad with a different page from your site that Google’s AI judges more relevant to the search query. The substitution happens at click time, not at ad-build time.

Why are my AI Max ad tracking templates returning 404 errors?

Your tracking template was built around a specific {lpurl} — usually a category or campaign landing page. With FUE enabled, Google substitutes that lpurl with whichever product page its AI picks. If that product page has a different query-string structure (WooCommerce variations, currency, language) or doesn’t exist, the resolved URL 404s. The tracking template itself isn’t broken; the URL it expanded into is.

Can I disable Final URL Expansion without disabling AI Max?

You can disable FUE specifically, but the practical answer is more nuanced. FUE requires Text Customization, so turning Text Customization off also turns off FUE. With FUE off, AI Max becomes much closer to a regular Search campaign — you keep the broad-match-style query expansion but lose the dynamic landing page swap. Most of the AI Max lift case depends on FUE being on.

Why does this hit WooCommerce stores harder than other ecommerce platforms?

WooCommerce product URLs commonly carry query-string parameters for variations (?attribute_pa_size=large), currency (?currency=eur), and language (?lang=de). Tracking templates assemble a final URL by appending parameters; when AI Max substitutes the base URL with a product variant page that has its own query strings, the parameter layering produces malformed URLs that hit 404s or land on the wrong variant.

What’s the long-term fix that doesn’t require disabling AI Max features?

Move conversion tracking off the URL layer entirely. Capture the gclid at first page load via a WooCommerce hook, persist it server-side against the visitor session, and fire conversion events at woocommerce_payment_complete — not from a URL parameter chain that depends on which page Google’s AI decided to send the click to.

Pull your tracking template, run the manual substitution test against three likely FUE-picked product URLs, and watch what happens. If even one 404s, your live AI Max traffic is hitting the same wall — and the URL layer is the wrong place to be doing tracking in 2026 anyway. See how Transmute Engine handles it.

Share this post
Related posts