> ## Documentation Index
> Fetch the complete documentation index at: https://docs.extole.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Why a CTA Opens a Different Program's Share Experience

> Why a CTA or a program domain can serve a different program when several programs are live at once, and the two settings that fix it.

# Overview

When you run more than one referral program on the same site, each program has its own
call-to-action, but they can end up opening the **same** share experience. A customer clicks the
CTA for one program and the share experience that opens belongs to another one.

This is not a broken CTA and it is not a mis-targeted campaign. It happens because Extole keeps each
person in one program at a time, and something that should have decided the program first did not.

There are two causes, and they have different fixes:

* The programs **share a zone name** for the share experience, so the visitor's existing journey
  decides between them. This is the common one, and it is covered first.
* A **promotion link is labeled for a program that does not exist** on the account, so the label
  narrowing is skipped and the journey decides instead. This one shows up on your program domain and
  is a single field to correct.

## How Extole Picks Which Program Answers a Zone

A zone is a named place on your site where Extole serves content. When a zone request arrives,
Extole gathers every live campaign that publishes that zone name — the **candidates** — and then
decides between them in a fixed order:

1. **Explicit hints.** If the request carries a hint that names a program — most commonly the
   program label on a promotion link the visitor followed — Extole narrows the candidates to the
   campaigns carrying it and decides from those. This runs before the journey is consulted, which is
   what makes a promotion link serve its own program reliably.
2. **Journey check.** If no hint decided it, and the person is already in a journey that one of the
   candidates owns, that candidate answers. The person stays in the program they are already in.
3. **Journey entry.** Only if no candidate matches an existing journey does Extole start a new
   journey and pick a candidate for it.

That order is what keeps a returning advocate's experience consistent: someone part-way through
one program does not get pulled into another one because they landed on a different page.

It also produces the behavior on this page. **When only one campaign publishes a zone name, there
is only ever one candidate, so the zone always serves that program.** When several campaigns
publish the same zone name, the journey check runs first — and once the person holds a journey,
that journey decides, whichever CTA they clicked.

<Info>
  Your program-specific CTA zones normally behave correctly for exactly this reason: each CTA zone
  name is published by one campaign, so it has a single candidate and always serves its own program.
</Info>

## Why the Share Experience Is the Zone That Collides

Every CTA has a **CTA Popup Zone Name** setting, which names the zone the CTA opens. On the
call-to-action component it defaults to `share_experience`, so programs built from the same theme
inherit the same value. (Some themes set a different default — the welcome offer themes use
`welcome_experience` — but sibling programs built the same way still share whichever one they
inherit.)

So two programs built from the same theme both publish that zone, both point their CTAs at it, and
neither team has done anything wrong. The collision is the default rather than a misconfiguration,
and it appears as soon as the second program goes live.

The result for a customer with more than one program available to them:

* Their first CTA click creates a journey and serves that program's share experience. This is
  correct.
* Every later CTA click, for any of the programs, matches that first journey and serves the **same**
  share experience — even though they clicked a different program's CTA.

Which program a person is pinned to therefore depends on which CTA they happened to click first,
which is why the symptom looks intermittent and customer-specific.

## When the Wrong Program Comes and Goes

The section above is the usual case. The person stays on the first program they opened, and every
later click shows that same share experience.

There is a second case, and you tell them apart by repeating the click. Two programs can answer the
same share experience name, and Extole shows whichever answer arrives first. Nothing in My Extole
names this. You see it on the click:

* The usual case stays put. Repeat the click and the same wrong program opens every time.
* This case flips. Two clicks a few seconds apart can open two programs.

A program label does not fix the flipping case. The label can choose a program when only one
program is answering, and it cannot stop a second program from answering the same name.

<Info>
  Repeat the same click ten times in one session. The same wrong program every time is the usual case
  above. A wrong program that comes and goes is this case. One passing click is not evidence the
  problem is gone.
</Info>

## What Does Not Fix It

Three things that look like the fix are not:

* **The program label on the share experience request.** The label sets which program is preferred
  when a new journey is started. A visitor who already holds a journey never reaches that step, so
  the label leaves them where they are.
* **Adjusting the program-label rules** on the campaigns. The person is not being excluded by a
  rule — they are being matched by an existing journey, which happens first.
* **A `campaign_id` on its own.** Adding `campaign_id` without the form in
  [Option 2](#option-2-name-the-campaign-on-the-request) leaves the other programs eligible, so the
  person stays in the program they already opened.

## A Second Cause: A Promotion Link Labeled for No Program

The same symptom appears on your **program domain** itself — the address your promotion links are
built on, such as `refer.example.com`. Someone opens a promotion link for one program, later returns
to the bare program domain, and gets that first program again instead of your main one.

This one has a different cause, and it is worth checking first because it is a single field.

Every promotion link carries a **program label**, including the built-in link for the bare program
domain. Extole reads that label before it looks at the visitor's journey, and narrows the candidates
to the campaigns that carry it. That is what makes a promotion link reliable: it decides the program
outright, whatever journey the visitor already holds.

The narrowing only happens when the label **matches a program label in use on the account**. When a
link is labeled for a program that does not exist — most often a default such as `refer-a-friend`
left in place on an account whose programs are named something else — Extole finds no candidates for
that label, stops, and falls through to the journey check described above. The visitor's existing
journey then decides, and a promotion link they opened earlier keeps serving its program.

<Warning>
  A mislabeled link fails silently. Nothing errors, and a first-time visitor still sees the right
  program, because they hold no journey for the fall-through to match. The symptom only appears for
  someone who opened one of your other promotion links first.
</Warning>

### How to Check and Fix It

1. List your promotion links and read the **label** on each one, including the link for the bare
   program domain.
2. Compare each label against the program labels actually in use on your account.
3. Correct any label that matches no program, setting it to the program that link should serve.

No campaign change and no publish is needed, and nothing on your own site has to change. Confirm it
the way the section below describes: open another program's promotion link, then the bare program
domain, in the same browser session.

## How to Fix a Shared Zone Name

When the collision is a shared zone name rather than a mislabeled link, there are two remedies, and
they trade a campaign change against a site change.

### Option 1: Give Each Program Its Own Share Experience Zone

Recommended when you can change the campaigns. Each zone then has a single candidate, so the click
decides again:

1. For each program, choose a distinct zone name — for example `share_experience_poa`,
   `share_experience_will`.
2. In each campaign, open the CTA component's **basic settings** and set **CTA Popup Zone Name** to
   that program's name.
3. Build and publish every campaign you changed.
4. Update any place that requests the old shared zone name directly — site tags, app integrations,
   email links, and promotion links — so they ask for the program's new name.

Once each share experience zone name is published by one campaign, the CTA click is what selects
the program again, because the single candidate is reached through journey entry rather than
journey check.

<Warning>
  Changing a zone name changes what your site tags must request. Inventory every surface that asks
  for the old name before you publish, or those surfaces will request a zone no campaign publishes.
</Warning>

### Option 2: Name the Campaign on the Request

Use this when you cannot give each program its own zone name. This is a change to the tag on your
site, not a setting in My Extole. The request that opens the share experience names the campaign,
and it includes the program's label:

```
GET /zone/share_experience?labels=<program label>&target=campaign_id:<campaign id>
```

`target=campaign_id:` limits the share experience to that campaign, so another program cannot answer
the same zone name. See [Targeting](/guides/platform-overview/targeting) for how a named campaign
ranks against the usual selection.

<Warning>
  Send the program label with it. Naming the campaign limits which campaign can answer, and the label
  is still what starts the person's journey. A request that names the campaign and omits the label
  matches nothing, and the share experience does not open.
</Warning>

<Warning>
  `journey.campaign_id` is a different value, and it does not do this job. It prefers one campaign and
  still lets another program answer the same share experience, so the wrong program still appears some
  of the time. Use `target=campaign_id:` when the click has to open one campaign.
</Warning>

This keeps one shared zone name. Each CTA has to send its own campaign on the request that opens
the share experience, not only on an earlier page view. Try it on one program before you roll it
out.

## How to Confirm the Behavior

Test with a fresh browser session per program, and test the collision deliberately:

1. In a clean session, click one program's CTA and confirm the share experience that opens belongs
   to that program.
2. In the **same** session, click a different program's CTA. Before the fix, the first program's
   share experience opens again. After the fix, the second program's own share experience opens.
3. Repeat step 2 ten times in that same session. If the wrong program appears on some loads and not
   others, more than one program is answering the share experience name, and one passing click
   proves nothing.
4. Repeat in a new clean session starting with the other program, to confirm the result follows the
   fix and not the order of clicks.

Testing each program only in its own clean session hides the problem entirely, because a fresh
visitor holds no journey and the journey check has nothing to match.

## Measuring How Many Customers Were Affected

To size the impact, compare the program a person's CTA views belong to against the program that
served their share experience, per person.

Two things will give you a wrong answer:

* **The share experience step's own source column** reports the zone name as read back from the
  campaign that rendered it, so it always agrees with itself and reports no mismatches.
* **Pairing a CTA view to the next share experience by time** over-counts, because promotion view
  events are recorded once per person per zone rather than once per click.

The reliable comparison is at the person level: people whose CTA views name only one program, who
also have a share experience recorded under a different one.


## Related topics

- [Why a Zone Shows on Your Website but Not in Your App](/technical/troubleshooting/why-a-zone-shows-on-your-website-but-not-in-your-app.md)
- [Why You Should Pop-up Your Advocate Share Experience](/guides/strategy-and-best-practices/campaign-optimization/why-you-should-pop-up-your-advocate-share-experience.md)
- [Share Experience](/guides/programs-and-campaigns/asset-guides/share-experience-asset-guide.md)
- [Experiences](/product/product-overview/content/experiences.md)
- [Why Your Site Requests a Zone Named blank](/technical/troubleshooting/why-your-site-requests-a-zone-named-blank.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.