> ## 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 Zone Shows on Your Website but Not in Your App

> A zone request produces a trigger event with the zone's name and the request's app type, and a Flow Builder call-to-action responds only when both match a trigger event selected in its Triggered By. Here is how app type works and how to cover every place a zone is requested from.

<Note>
  **This page applies only to Flow Builder campaigns that use Triggered By, which may only appear in newly created campaigns.** If the call-to-action has no **Triggered By** setting, the campaign was created before this feature was released, and this page does not apply to it.
</Note>

# Overview

A Flow Builder campaign publishes cleanly, and one of its calls-to-action shows in one place but not another: on your website but not in your app, or in your Android app but not your iOS app. Nothing errors. The zone is empty where it is missing.

The cause is almost always the **app type** of the zone request. This page explains how app type decides which requests a call-to-action serves, and how to cover every place a zone is requested from. For setting up **Triggered By** itself, see [How to Set Up Triggered By](/guides/flow-campaigns/how-to-set-up-triggered-by).

## How App Type Decides Which Requests Are Served

When your website or app requests a zone, the request produces a trigger event, usually named the same as the zone. Every request also carries an app type that says where it came from:

| Requested from | App type | Trigger event declared on |
| - | - | - |
| Your website, including your mobile website | `javascript_sdk` | **Javascript SDK**, under **Tagged CTAs** |
| Your iOS app | `mobile-sdk-ios` | **Mobile SDK**, under **Platforms** > **iOS** |
| Your Android app | `mobile_sdk_android` | **Mobile SDK**, under **Platforms** > **Android** |

Each trigger event declared on an SDK extension belongs to one app type, which it takes from where it is installed. [Javascript SDK and Mobile SDK Extensions](/technical/platform-integrations/extensions/javascript-sdk-and-mobile-sdk-extensions) covers where each trigger event is declared and how to add one. A call-to-action responds to a request only when the request's name **and** app type both match one of the trigger events selected in its **Triggered By**.

Two things follow:

* **A trigger event under the wrong app type changes nothing.** If your iOS app requests a zone and you declare its trigger event on the Javascript SDK, or only under Android, you can select it and the campaign publishes, but no request from your iOS app reaches it.
* **A clean publish does not prove traffic flows.** Publishing checks that **Triggered By** holds a selection. It does not check that every place the zone is requested from is covered.

## Example: The Mobile Header Shows on the Website but Not in the App

The Refer a Friend programs include three calls-to-action named for mobile placements: `mobile_header`, `mobile_footer`, and `mobile_menu`. Despite the names, they are not only for apps. The same zones are requested from your mobile website, your iOS app, and your Android app, and each place produces a distinct trigger event.

With only the Javascript SDK's `mobile_header` trigger event selected, the call-to-action shows on your mobile website and never in either app.

This is the usual result when the campaign was created before you installed the Mobile SDK extension. When the campaign was created, it matched the Javascript SDK trigger event. Installing the Mobile SDK later does not add the app trigger events to the campaign, because that matching happens only when a campaign is created.

To fix it:

1. In My Extole, open [Partners](https://my.extole.com/integrations), select **Extensions**, and open **Mobile SDK**. Check that `mobile_header` is declared under **iOS** and under **Android**. Add it where it is missing, and publish the extension.
2. Open the campaign, select the `mobile_header` call-to-action, and in **Triggered By** select the iOS and Android `mobile_header` trigger events as well as the Javascript SDK one.
3. Publish the campaign, then check the call-to-action in each app.
4. Repeat for `mobile_footer` and `mobile_menu`.

Whenever a zone shows in one place and not another, compare where its requests come from with the app types selected in **Triggered By** before looking anywhere else.

## Requests With No App Type, or a Custom One

Some zone requests carry none of the three app types. An older or custom integration may send its own value, such as `Web`, or send no app type at all. No SDK trigger event matches those requests, so a call-to-action with only SDK trigger events selected never shows for them.

To accept them, declare a trigger event with the zone's name on the **Event API** and select it alongside the SDK trigger events. An Event API trigger event has no app type, and a trigger event without an app type matches every request with that name, whatever app type it carries, including none.

1. Open the **Event API** extension.
2. Under **Integration Events**, add an event named exactly as the zone, for example `mobile_header`, and publish the extension.
3. Open the campaign, select the call-to-action, and in **Triggered By** add the Event API's `mobile_header` to what is already selected.
4. Publish the campaign, and check the call-to-action where the custom requests come from.

<Warning>
  An Event API trigger event matches every source. With it selected, the call-to-action serves a request of that name from any website, app, or integration. Use it when that is what you want, not to get one particular source working.
</Warning>

Matching one custom app type and nothing else is not something you can set up yourself. The Javascript SDK sets one app type for all of its trigger events, so changing it moves every one at once. If a call-to-action must show for one custom app type only, contact your Extole team.

## A Zone Page Opened by a Plain Link Renders Blank

A zone page opened directly by a link, rather than requested by an SDK, carries no app type. A link such as `/zone/in_branch_referral_portal` matches no SDK trigger event and renders blank.

Add the app type to the link:

```text theme={null}
/zone/in_branch_referral_portal?app_type=javascript_sdk
```

## Still Not Showing

If a zone still does not show after every app type it is requested with is selected, contact your Extole team. Include the campaign link, the zone name, and where it is missing: your website, your iOS app, or your Android app.

## Related

* [How to Set Up Triggered By](/guides/flow-campaigns/how-to-set-up-triggered-by)
* [Javascript SDK and Mobile SDK Extensions](/technical/platform-integrations/extensions/javascript-sdk-and-mobile-sdk-extensions)
* [Why a CTA Opens a Different Program's Share Experience](/technical/troubleshooting/why-a-cta-opens-a-different-programs-share-experience)
* [Mobile SDKs](/technical/platform-integrations/mobile-sdks/index)


## Related topics

- [Javascript SDK and Mobile SDK Extensions](/technical/platform-integrations/extensions/javascript-sdk-and-mobile-sdk-extensions.md)
- [How to Set Up Triggered By](/guides/flow-campaigns/how-to-set-up-triggered-by.md)
- [Why Your Site Requests a Zone Named blank](/technical/troubleshooting/why-your-site-requests-a-zone-named-blank.md)
- [Why a CTA Opens a Different Program's Share Experience](/technical/troubleshooting/why-a-cta-opens-a-different-programs-share-experience.md)
- [Share Experience](/guides/programs-and-campaigns/asset-guides/share-experience-asset-guide.md)


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