Zenovay offers four goal types. You pick one in the first step of the goal assistant (Journeys → Goals → New goal). Every type counts visits: each visit counts at most once per goal.
Goal types at a glance
| In the dashboard | Best for | Code needed? | Past visits counted? |
|---|---|---|---|
| A page visit | Thank-you pages, confirmation pages, pricing page | No | Yes, last 12 months |
| A click on a link | Booking links, app store links, downloads, partner links | No | Yes, last 12 months |
| An event from your code | Forms without a thank-you page, purchases with an amount, app actions | One line | Yes, last 12 months |
| A click on a button or element | Buttons and elements without their own address | No, but a CSS selector | No, counted from creation on |
A page visit
Overview
Counts a visit that opens a page whose address matches your rule. No code needed.
Best for:
- Thank-you pages
- Confirmation pages
- Important content, like your pricing page
- Downloads that open on their own page
Setup
- Choose A page visit
- Pick the page from the list of your pages, or type its address
- Choose how the address is matched
- Check the live preview, which shows how many pages and visits match
Match types
| Match type | Example | Matches |
|---|---|---|
| Is exactly | /thank-you | Only that page |
| Starts with | /blog/ | All blog posts |
| Contains | confirmation | Any address containing the word |
| Ends with | /success | Addresses ending in "/success" |
| Matches a pattern | /{locale}/pricing | The pricing page in every language |
| Regular expression | /order/\d+ | Order pages with a number (advanced) |
How addresses are compared
- Upper and lower case, a trailing slash,
www.and#anchorsnever matter. - The query string (everything after
?) only matters if your pattern contains one. So/thank-youalso counts/thank-you?ref=email. Contains also searches the query string, soutm_source=newsletterwith Contains counts visits that arrived from your newsletter link.
See Page visit goals for all details.
A click on a link
Overview
Counts a visit in which someone clicks a link whose destination address matches your rule. Zenovay records clicks on links automatically (links to other sites and links captured by auto-capture), so no code is needed.
Best for:
- Booking links, like Calendly
- App store links
- Download links
- Partner and affiliate links
Setup
- Choose A click on a link (or the template Click on a link)
- Enter the link address, or part of it, for example
calendly.comor/download - Choose how the address is matched (the same match types as for page visits)
Examples
| Goal | Link address | Match type |
|---|---|---|
| Booking link clicked | calendly.com | Contains |
| App Store link | apps.apple.com | Contains |
| Price list download | /files/prices.pdf | Ends with |
An event from your code
Overview
Counts a visit in which your site sends a named event. Your developer adds one line of code where the action happens.
Best for:
- Forms that show a message instead of a thank-you page
- Purchases with a real amount
- Video plays
- Actions in a web app or single-page app
Setup
- Add the line of code to your site
- Choose An event from your code
- Pick the event from the list of events your site already sent, or type its name
- Watch the live check: it turns green when the first event arrives
Implementation
// Basic event
zenovay('track', 'contact_form');
// Event with its own value
zenovay('track', 'purchase', { value: 99.99 });
Event names are compared without regard to upper and lower case, and spaces count as underscores ("Sign Up" is the same as "sign_up"). Names may use letters, numbers, spaces and _ . : / -, with at most 64 characters.
Examples
| Goal | Event code |
|---|---|
| Form sent | zenovay('track', 'contact_form') |
| Video finished | zenovay('track', 'video_finished') |
| Add to cart | zenovay('track', 'add_to_cart', { value: price }) |
| Feature used | zenovay('track', 'feature_x_used') |
Your code can also record a goal directly with zenovay('goal', 'goal_name', { value, currency }). Zenovay creates that goal automatically the first time and marks it From your code.
See Custom event goals for details.
A click on a button or element
Overview
Counts a visit in which someone clicks an element that matches a CSS selector. A click on the element or anything inside it counts. This type is meant for developers.
Best for:
- Call-to-action buttons
- Buttons that open a form or a video
- Any element without its own address
Setup
- Choose A click on a button or element
- Enter a CSS selector, for example
#signup-buttonor.buy-now
Element clicks are counted from the moment you create the goal. Past clicks are not available. Up to 20 active click goals per site are sent to the tracker.
CSS selectors
| Selector | Matches |
|---|---|
#signup-btn | Element with id="signup-btn" |
.cta-primary | Elements with class="cta-primary" |
button[type="submit"] | Submit buttons |
[data-goal="signup"] | Elements with data-goal="signup" |
Finding selectors
- Right-click the element
- Choose "Inspect"
- Look for a unique id or class
- Test the selector in the console
See Element click goals for details.
Choosing the right type
Decision guide
| Question | Recommended type |
|---|---|
| Is there a page that only people who succeeded see? | A page visit |
| Is it a link to another address? | A click on a link |
| Is it a form, a purchase amount or an app action without its own page? | An event from your code |
| Is it a button without its own address? | A click on a button or element |
Common scenarios
| Scenario | Best type |
|---|---|
| Newsletter sign-up (popup) | An event from your code |
| Newsletter sign-up (thank-you page) | A page visit |
| Download link clicked | A click on a link |
| Booking link clicked | A click on a link |
| Purchase completed | A page visit, or an event with the amount |
| Watched 50% of a video | An event from your code |
| Form sent without a new page | An event from your code |
Several goals for one action
You can create more than one goal for the same action, for example for a purchase:
- A page visit:
/checkout/complete - An event:
purchasewith its value - A click on a button or element: the "Buy now" button
Each goal counts on its own, so the numbers show you each measuring point separately.
Plan limits
| Plan | Goals |
|---|---|
| Pro | Up to 25 |
| Scale | Unlimited |
| Enterprise | Unlimited |
The Journeys tab with goals is available on the Pro plan and above. Even with a high limit, keep your list focused:
- Put your most important results first
- Pause or delete goals you no longer need
- Combine similar goals, for example with Contains or Matches a pattern
Testing goals
- Create the goal
- Do the action yourself
- Check the Live View tab
- Open the goal's details and look at Latest conversions
Debug mode
Add data-debug="true" to the tracking script tag while you test:
<script defer
data-tracking-code="YOUR_TRACKING_CODE"
data-debug="true"
src="https://api.zenovay.com/z.js">
</script>
Watch the browser console for your events, and remove the attribute again when you are done.