Browse Product guides

CTA links and redirects

CTA links connect a campaign email, ad, or landing page button to the active promo state.

Redirect when a timed tier ends

Start with the promo setup guide. Use a dedicated test campaign and your organization’s public SDK host.

  1. In Tiers, keep the first tier timed. A one-minute window is useful for this check. Leave its destination blank to keep visitors on the starting page while it is active.
  2. Click Add tier, name the final tier Waitlist, and enter the URL of the page visitors should reach afterward.
  3. Turn off This tier has a time limit on Waitlist so it becomes the permanent fallback, then click Save promo.
Promo editor with a one-minute first tier and a permanent Waitlist tier pointing to the local replay destination.

Real local setup, 2 October 2026. Waitlist is the permanent final tier. Use your own published destination URL for a customer campaign. The right-hand countdown is an editor preview.

  1. Set the page visitors should reach.
  2. Remove the final tier's time limit.
  3. Save the configured tiers.

On the starting page, enable redirects on the same promo handle that renders the countdown:

<div id="countdown"></div>
<script>
var plandalf = plandalf || function () {
  (plandalf.q = plandalf.q || []).push(arguments);
};
plandalf('ready', sdk => {
  sdk.promo('your-campaign-id', {
    target: '#countdown',
    redirect: true
  });
});
</script>
<script src="https://acme.plandalf.dev/js/plandalf-sdk.js" async></script>

Replace the host and campaign identifier with values from the same organization. Use one promo handle for that campaign on the page. An active tier with a different destination can redirect immediately, so keep the first tier’s URL blank for the timed test above.

Replay the destination

  • Open the starting page and confirm the first tier is active with a running countdown.
  • Let it reach the final tier without clicking a navigation link. Check the actual browser URL and the destination page.
  • If the destination also loads the SDK, read the promo there with redirect: false and confirm the final tier. A permanent tier has no active deadline.
  • Return to the original page in the same browser after the deadline. With redirects enabled, it should send the visitor to the current tier’s destination again.
  • To inspect the expired starting page, repeat with redirect: false. It should remain on that page while reporting the current tier.
The configured destination after the real SDK changed from Standard to Waitlist, with the final tier independently resolved on the destination page.

Local browser replay, 2 October 2026. The SDK changed tiers at 01:50:16 UTC and navigated here. This page reads the promo with redirects disabled to inspect the result.

  1. The destination resolves the expected final tier.
  2. The recorded transition came from the real promo handle.

A browser redirect does not make a public page private or enforce a checkout price. Connect the promo to checkout and verify the charged amount separately.

If the page stays put

Check that the active tier has a destination and the page’s promo handle allows redirects. In Settings → Ignore redirect on these pages, a matching pattern suppresses navigation. The SDK also suspends host-page redirects while a checkout frame is open. A destination with the same origin and path is treated as the current page even if only its query string or fragment differs.

To replay a page exclusion, save ?stay=1 in Ignore redirect on these pages. Open the starting page with stay=1 in its query string and redirect: true in the SDK options. Confirm it stays on the page with the expected current tier. Remove stay=1 and load it again; navigation should resume. Use a dedicated test campaign so this check does not alter customer traffic.

Participant reference

Use pf_ref when linking from email or another identified channel. It identifies the promo participant; affiliate partner tracking uses the separately configured referral parameter, usually via. Do not put credentials or sensitive identifiers in these public URLs.

<a href="https://acme.plandalf.dev/p/early-bird?pf_ref={{subscriber.email}}">
  Get the launch price
</a>

The SDK also captures pf_ref from the current page URL so later checkout calls can include attribution context.

Checkout button with promo

<button
  data-plandalf-present="summit-ticket"
  data-plandalf-apply-promo="early-bird"
>
  Buy now
</button>

External destination

Some campaigns send visitors to an external sales page first, then open Plandalf checkout from that page. Keep the same pf_ref value on the URL so attribution stays connected.

<a href="https://example.com/sales-page?pf_ref={{subscriber.email}}">
  Read the offer
</a>

Feature detail