Track conversions by URL

Give every yes
its own address.

To track conversions by URL, send people to a dedicated thank-you page after each action and count visits to that page with a goal. A sent form goes to /thank-you/contact, a booking to /thank-you/booking. It works on any site builder and in any analytics tool, and you can track form submissions without GA4 events or a developer. Three things decide whether the count is honest: the redirect, keeping the page out of search, and a pattern that matches only that page.

Pattern *thank* 6 of 9 match Tighter: /thank-you/*

By the Builderify team

01 Every page view streams past 02 *thank* counts 5 03 /thank-you/* keeps the real 3
01 / Why a URL

Why thank-you page
conversion tracking still wins.

Because a page view is the one thing every analytics tool records without being asked. A form that swaps itself for “Thanks!” leaves no address behind. A form that redirects to /thank-you/contact does, and every visit to that address is a submission the form has already accepted.

Nothing to code, nothing to tag, and nothing to rebuild when you change tools: the next one counts the same page. That is what people mean by a destination goal, or URL goal tracking.

Three ways to count a form, and their catch

01

Inline success message

The form swaps itself for a message on the same page.

No new address, so a URL goal has nothing to see. Counting it means an event fired from code.

02

A click on the submit button

A click goal on the Send button.

A click is not a submission: Send also gets clicked when a required field is empty.

03

A thank-you URL This guide

The form redirects once it has accepted the entry.

Counts completed submissions in any tool that records page views. The catch is people who reach it some other way, covered below.

One thank-you page per conversion

Give each conversion its own page, and put them all in one folder. Each page gets its own exact goal, and one pattern counts the family.

If your builder can’t nest pages in a folder, use a shared prefix nothing else on the site starts with, such as /confirmed-contact and /confirmed-booking, counted together by /confirmed-*.

Conversion Thank-you URL Goal pattern Worth putting on the page
Contact form sent /thank-you/contact /thank-you/contact When you reply, and what to do meanwhile
Call or class booked /thank-you/booking /thank-you/booking The confirmation, and how to prepare
Newsletter joined /thank-you/newsletter /thank-you/newsletter A link to the latest issue
Any of them n/a /thank-you/* One goal for all conversions, next to the exact ones
02 / Redirects

Thank-you page redirects,
platform by platform.

Publish the thank-you page first, then point the form at it. Each builder hides the setting somewhere different, and each has its own switch to keep the page out of search.

Where to set a form redirect and a noindex on each platform
Platform Send the form to your thank-you page Keep the page out of search
Squarespace Edit the form block, then in the Content tab: Edit Post-Submit › Redirect › Attach Link. Newsletter blocks have the same Post-Submit redirect. Redirects don’t work while you’re logged in, so test in a private window. Squarespace help Page settings (the gear) › SEO › Hide page from search results. It adds a noindex and drops the page from the sitemap. The Not linked section only keeps it out of your navigation; search engines can still index it. Squarespace help
Wix New Wix Forms: Edit Form › Settings › When a form is submitted › Redirect to a URL, with your published thank-you page’s URL. Older forms: Form Settings › Submit Message › Go to site page or lightbox. Wix help The page’s SEO basics: turn off Let search engines index this page. Wix also suggests hiding the page from your menu. Wix help
Webflow Select the form and open its Settings panel, where you can pick a static page on your site or enter a URL to send visitors to after they submit. Webflow doesn’t process form submissions on sites exported for hosting elsewhere. Webflow help Page settings › SEO settings › turn Sitemap indexing off. It adds a noindex and drops the page from the sitemap. The toggle needs the auto-generated sitemap switched on. Webflow help
Framer Framer forms can redirect on submit to a page of your site; Framer announced it with its forms update but has no help article naming the exact setting. Framer update Page Settings (the gear) › turn Search engines off, then republish. Framer adds the noindex tag. Framer help
WordPress WPForms: Settings » Confirmations, Confirmation Type Show Page (a page on your site) or Go to URL (Redirect). Contact Form 7: a short script that listens for wpcf7mailsent and sets location. Contact Form 7’s own docs show the snippet but don’t recommend a redirect for most sites. WPForms docs · Contact Form 7 docs Use the per-page noindex option in your SEO plugin, or a robots meta tag in the page’s head.
Shopify Purchases need no redirect: checkout ends on Shopify’s own Thank you page. But that page and Order status sit outside your theme: theme app blocks can’t render on checkout pages, and additional scripts stopped running there on 28 August 2025. Shopify’s route is a pixel under Settings › Customer events, where checkout_completed fires once per checkout. Shopify dev docs · checkout_completed For theme pages you build as thank-you pages, such as one for your contact form, add a robots meta tag through your theme. A script tag in your theme, Builderify’s included, isn’t on the checkout pages, so URL goals there can’t see a purchase. Use them for the steps before checkout and for contact forms.

Why direct visits inflate the count

A URL goal counts arrivals, not submissions. Most arrivals come through the form. Four kinds don’t, and each has a fix.

Never block a thank-you page in robots.txt to hide it. Google says a page blocked there can’t have its noindex seen, and can still appear in results if other pages link to it.

01
Search engines

An indexed thank-you page gets visitors from search who never filled anything in.

Fix

Noindex it with the switch above.

02
Reloads and returns

A refresh, the back button, a bookmark or a link in a confirmation email each count again.

Fix

Count unique visitors, not completions. Builderify reports both.

03
Your own links

A thank-you page in the menu, footer or sitemap gets clicked by people browsing.

Fix

Link to it from the redirect and nowhere else.

04
You, testing

Every test submission is a real visit to the page.

Fix

Test in a private window, then check the visitor’s timeline rather than the total.

03 / Match types

Exact, contains, starts with,
wildcard and regex.

The match type decides how much a pattern lets in. Too strict and you miss real conversions; too loose and blog posts start counting as sales. Each card below runs its examples through the same matcher as the tester.

Is exactly

/thank-you/contact

The one page and nothing else. Capitals and a trailing slash still make no difference.

  • /thank-you/contact Counts
  • /Thank-You/Contact/ Counts
  • /thank-you/contact/step-2 Ignored

Starts with

/thank-you

Everything that begins with the text, including words that merely start the same way.

  • /thank-you/booking Counts
  • /thank-you-for-reading-our-blog False match
  • /blog/thank-you Ignored

Contains

thank-you

The text anywhere in the path. Broad, and it reads blog posts as sales.

  • /thank-you/contact Counts
  • /blog/thank-you-for-reading-our-blog False match
  • /contact Ignored

Wildcard *

/thank-you/*

A * stands for anything. Ending in /* covers the folder and the page itself.

  • /thank-you Counts
  • /thank-you/booking Counts
  • /thank-you-for-reading-our-blog Ignored

Regex GA4 and others

/thank-you/(contact|booking)$

Precise and easy to get wrong. Without a ^ at the start, it also matched a blog path. Builderify goals don’t take regex; a * covers the cases above.

  • /thank-you/contact Counts
  • /thank-you/quote Ignored
  • /blog/thank-you/contact False match

Query strings, UTM noise and other small print

How Builderify compares a page with a goal pattern, from the matcher in its own code. Other tools differ, so check yours before you copy a pattern across.

Query strings and UTM tags
Never compared. /thank-you?utm_source=newsletter is the same page as /thank-you, so campaign tags can’t split or break a goal. The flip side: ?form=contact can’t tell two forms apart. Give each its own path.
http, https and www
Never compared either. Only the path counts, so the domain and protocol make no difference. Paste a full URL as a pattern and only its path is kept.
Capitals
Ignored. Patterns and paths are both lower-cased, so /Thank-You and /thank-you are one page.
Trailing slashes
Ignored. /thank-you/ and /thank-you are one page, and a leading slash is optional when you type a pattern.
# fragments
Never part of the path. A form that only adds #thanks to the address can’t be a URL goal. Redirect it to a real page.
The * wildcard
Stands for anything, slashes included, so /blog/*/thanks also matches /blog/a/b/thanks. A pattern ending in /* also counts the folder page itself.
04 / Pattern tester

Test a wildcard URL pattern
before it counts anything.

Paste the URLs from your site, including the ones that should not count, and type a goal pattern. Each URL is marked with the reason, and the tester suggests a tighter pattern when yours lets too much in.

URL goal pattern tester Matches the way Builderify goals do · runs in your browser
Match type

What Journey goals and A/B "Visits a page" goals use. A * stands for anything, slashes included.

Try

Full URLs or paths. Nothing you paste leaves this page.

6 of 9 URLs match *thank*
  • !This matches anywhere in the path, so a blog post such as /blog/thank-you-for-reading counts as a conversion too. Start the pattern with / to anchor it.
  • i2 of the matches are the same page, /thank-you/contact. Each page view counts as a completion; unique visitors are reported separately.
Tighter pattern
/thank-you/* Keeps 4, drops 2

Drops: /blog/thank-you-for-reading-our-blog, /thanksgiving-menu

  • ✓
    /thank-you/contact https://studio-ayla.com/thank-you/contact

    The * stood for “/” and “-you/contact”.

  • ✓
    /thank-you/booking https://studio-ayla.com/thank-you/booking?utm_source=newsletter&utm_medium=email

    The * stood for “/” and “-you/booking”.

    Query string ignored
  • ✓
    /thank-you/contact http://studio-ayla.com/Thank-You/contact/

    The * stood for “/” and “-you/contact”.

    Capitals ignored Trailing slash ignored
  • ✓
    /thank-you https://www.studio-ayla.com/thank-you

    The * stood for “/” and “-you”.

  • ✓
    /blog/thank-you-for-reading-our-blog https://studio-ayla.com/blog/thank-you-for-reading-our-blog

    The * stood for “/blog/” and “-you-for-reading-our-blog”.

  • ✓
    /thanksgiving-menu https://studio-ayla.com/thanksgiving-menu

    The * stood for “/” and “sgiving-menu”.

  • –
    /contact https://studio-ayla.com/contact

    The path /contact does not fit *thank*.

  • –
    /contact https://studio-ayla.com/contact#thanks

    The path /contact does not fit *thank*.

    # fragment ignored
  • –
    /booking https://studio-ayla.com/booking?step=thank-you

    The path /booking does not fit *thank*.

    Query string ignored

The tester uses the same rules as Builderify’s goal matching: path only, lower-cased, trailing slash dropped, * for anything. In GA4 or another tool, check how that tool treats case and query strings before you copy a pattern across.

05 / GA4 key events

How GA4 counts a
thank-you page visit.

GA4 does the same job with events. In March 2024 Google renamed GA4’s conversions to key events; “conversion” now means an action used to measure ad campaigns. A thank-you page becomes a key event by turning its page_view into a new event of its own.

Weighing up GA4 itself? Read the guide to Google Analytics alternatives.

Google’s tutorial, step by stepSource
  1. 01

    In Admin, under Data display, click Events, then Create event.

  2. 02

    Name the event, for example form_sent, and switch on Mark as key event.

  3. 03

    Choose Create without code, and pick page_view as the existing event that triggers it.

  4. 04

    Enter your thank-you page’s URL, then click Create.

Why not mark page_view itself? Google’s answer: every page view would then count as a key event. The older matching-conditions method does the same with page_location; there, match the path with “contains” rather than a full URL with “equals”, so http, www and ?utm_ tags can’t break it.

GA4 key events and Builderify goals, side by side

Question GA4 key event Builderify Journey goal Builderify A/B goal
What it matches A page_view on your thank-you URL, turned into a new event The page’s path, against a pattern with * A page pattern, a click on a CSS selector, or a custom event
Capitals Case-sensitive unless you pick an “(ignore case)” operator Ignored Ignored for page patterns
Query strings Depends on how you match the URL Never compared Never compared for page patterns
Regex Supported in places; see Google’s regex page No: * only No: * only
How often it counts Once per event by default; once per session is the legacy option Every matching page view, with unique visitors and the rate beside it Once per visitor per goal
Past data New and modified events don’t apply to historical data New page views are tagged from the moment you save Visitors in the test, from launch

GA4 facts: key events, counting method, operators and historical data, regular expressions. Checked 4 October 2026.

06 / With Builderify

Track form submissions without GA4,
by URL, in Builderify.

Builderify measures URL goals in two places that don’t depend on each other: User Journey, for every visitor, and A/B Testing, for the people in a test. Both run from one script tag in your site’s <head>, on WordPress, Shopify, Wix, Squarespace, Webflow, Framer or plain HTML.

People in a test

A/B Testing goals

Each experiment has its own goals, measured without User Journey switched on. One is primary; the rest are tracked alongside it. A goal has one of three triggers.

Visits a page
A page pattern with * wildcards, matched like a Journey goal. The thank-you page doesn’t have to be one of the pages being tested.
Clicks an element
A CSS selector. A click on it, or on anything inside it, counts once per visitor.
Custom event
An event name you send from your own code with bdfAb('convert', 'name').
Results
Shown once each variant has 100 visitors and 10 conversions, from a two-proportion z-test at 95% confidence. Launching a test costs 25 credits; every 1,000 exposures and conversions recorded cost 1.

Set up a URL goal in six steps

Every account gets 250 free credits a month and there is no subscription. If you outgrow them, one-time packs start at $9 and never expire. The full rate card is on the pricing page.

Start free
  1. 01
    Build the thank-you page

    One per conversion, in one folder, noindexed and left out of your navigation.

  2. 02
    Point the form at it

    Set the redirect in your form’s settings, as in the table above.

  3. 03
    Add the script tag

    Paste Builderify’s one tag into your site’s <head> and switch User Journey on.

  4. 04
    Add the goal

    In User Journey’s settings, under Goals, click Add goal: a name, the page pattern, and a kind.

  5. 05
    Test the pattern

    Run it through the tester above with your real URLs, including the ones that shouldn’t count.

  6. 06
    Submit the form once

    In a private window. The visit appears in User Journey with the goal on the thank-you page.

Want more people to reach the thank-you page in the first place? A form from Leads or a test in A/B Testing runs on the same tag. See every module.

Questions

Conversion tracking by URL, before you ask.

Send the form to its own thank-you page, such as /thank-you/contact, using the redirect setting in your form builder, then count visits to that page with a URL goal. In Builderify, add the script tag to your site's head, switch User Journey on and add a goal with that page pattern. No events, tag manager or developer are needed.

Yes. An indexed thank-you page gets visitors from search who never filled in the form, and each one counts as a conversion. Use your builder's per-page noindex setting, keep the page out of your navigation, and don't block it in robots.txt, because then search engines can't see the noindex.

Not in Builderify. Goals compare the path only, so /thank-you?utm_source=newsletter counts as /thank-you, and capitals, trailing slashes, http or https and the domain make no difference. The flip side is that a query string can't tell two forms apart, so give each form its own thank-you path.

Exact matches one page. Starts with and contains are broader and can catch pages like /thank-you-for-reading-our-blog. A wildcard pattern uses * for anything, and a pattern ending in /* covers a folder and the folder page itself. Builderify goals use the wildcard form, and the free tester on this page shows what any pattern matches.

Not with a script in your theme. Shopify's Thank you and Order status pages sit outside the theme, and Shopify tracks purchases there through pixels under Settings, then Customer events. Use URL goals for contact forms and the steps before checkout.

Stop losing the visitors
you already paid for.

More leads from the traffic you already have, and follow-up that sends itself. Free to start. No card, no monthly fee.