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.
By the Builderify team
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
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.
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.
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 |
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.
| 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.
An indexed thank-you page gets visitors from search who never filled anything in.
Noindex it with the switch above.
A refresh, the back button, a bookmark or a link in a confirmation email each count again.
Count unique visitors, not completions. Builderify reports both.
A thank-you page in the menu, footer or sitemap gets clicked by people browsing.
Link to it from the redirect and nowhere else.
Every test submission is a real visit to the page.
Test in a private window, then check the visitor’s timeline rather than the total.
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.
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.
Full URLs or paths. Nothing you paste leaves this page.
*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.
/thank-you/*
Keeps 4, drops 2
Drops: /blog/thank-you-for-reading-our-blog, /thanksgiving-menu
-
✓
/thank-you/contacthttps://studio-ayla.com/thank-you/contactThe * stood for “/” and “-you/contact”.
-
✓
/thank-you/bookinghttps://studio-ayla.com/thank-you/booking?utm_source=newsletter&utm_medium=emailThe * stood for “/” and “-you/booking”.
Query string ignored -
✓
/thank-you/contacthttp://studio-ayla.com/Thank-You/contact/The * stood for “/” and “-you/contact”.
Capitals ignored Trailing slash ignored -
✓
/thank-youhttps://www.studio-ayla.com/thank-youThe * stood for “/” and “-you”.
-
✓
/blog/thank-you-for-reading-our-bloghttps://studio-ayla.com/blog/thank-you-for-reading-our-blogThe * stood for “/blog/” and “-you-for-reading-our-blog”.
-
✓
/thanksgiving-menuhttps://studio-ayla.com/thanksgiving-menuThe * stood for “/” and “sgiving-menu”.
-
–
/contacthttps://studio-ayla.com/contactThe path /contact does not fit *thank*.
-
–
/contacthttps://studio-ayla.com/contact#thanksThe path /contact does not fit *thank*.
# fragment ignored -
–
/bookinghttps://studio-ayla.com/booking?step=thank-youThe 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.
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.
-
01
In Admin, under Data display, click Events, then Create event.
-
02
Name the event, for example
form_sent, and switch on Mark as key event. -
03
Choose Create without code, and pick
page_viewas the existing event that triggers it. -
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.
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.
User Journey goals
A goal is a name and a page pattern, such as /thank-you/contact or /thank-you/*. Every page view whose path matches is tagged against it, on that visitor’s own page-by-page timeline.
- Goal kinds
- Conversion, Sign up, Checkout step, Engagement or Key content, each with its own colour
- The report
- Completions, unique visitors, the share of all visitors who reached it, and the page of the journey where they typically got there
- Matching
- Path only, case and trailing slash ignored, query strings never compared
- Cost
- 0.1 credits per tracked visitor journey, so 2,500 journeys on the free 250 credits a month
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-
01
Build the thank-you page
One per conversion, in one folder, noindexed and left out of your navigation.
-
02
Point the form at it
Set the redirect in your form’s settings, as in the table above.
-
03
Add the script tag
Paste Builderify’s one tag into your site’s
<head>and switch User Journey on. -
04
Add the goal
In User Journey’s settings, under Goals, click Add goal: a name, the page pattern, and a kind.
-
05
Test the pattern
Run it through the tester above with your real URLs, including the ones that shouldn’t count.
-
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.
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.
Sources
Checked 4 October 2026.
- Squarespace Form blocks: Edit Post-Submit, Redirect
- Squarespace Newsletter blocks: Post-Submit redirect
- Squarespace Hiding your site from search results
- Squarespace The Not linked section
- Wix Customizing the success message and thank you page
- Wix Preventing search engines from indexing your page
- Webflow How do I add forms in Webflow
- Webflow Disable search engine indexing
- Framer Forms update: Redirect on Submit
- Framer Prevent specific pages from being indexed
- Contact Form 7 Redirecting to another URL after submissions
- WPForms Setting up form confirmations
- Shopify checkout.liquid and additional scripts sunset dates
- Shopify Theme app extensions: not rendered on checkout pages
- Shopify Pixels overview
- Shopify checkout_completed standard event
- Google Analytics About key events
- Google Evolving Google Analytics (key events, 21 March 2024)
- Google Analytics Tutorial: Set up a key event
- Google Analytics Create or modify key events
- Google Analytics Rename and generate new events
- Google Analytics Key event counting method
- Google Analytics Regular expressions in Analytics
- Google Search Central Block Search indexing with noindex
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.