# Announce New Features With a Product Tour Link

> Play by Link force-plays a published StepsKit tour when a page URL carries a `?sk=` query parameter. Share the link in a changelog, launch email, or support reply, and the recipient lands in your app with the tour already running.

*Source: https://stepskit.com/features/play-by-link*

## The mechanism

```
https://app.example.com/dashboard?sk=new-analytics
```

Opening that link plays the `new-analytics` tour on load. The `?sk=` value is matched against both the tour's **id** and its **slug**, so either works. The parameter is read once per page load.

## What it skips and what it enforces

| Gate | Play by Link |
| --- | --- |
| URL pattern matching | Skipped |
| Audience targeting rules | Skipped |
| Minimum screen width | Skipped |
| Frequency capping (`show_once`) | Skipped — plays even for a visitor who already completed or dismissed it |
| Tour is active + published | **Enforced** — drafts never play |
| Domain whitelist | **Enforced** — the tour only plays on domains you've published to |

The design intent: a link can't surface unshipped work, and it can't bypass your domain whitelist, but it does override every auto-play gate that would normally suppress the tour for a given visitor.

## How to use it

1. **Publish the tour** to the domain your app runs on. Drafts never play.
2. **Copy the link** from the tour's Publish page in the dashboard. Point it at the page where the tour's first step appears.
3. **Send it anywhere** — launch email, changelog, release notes, support reply. No code beyond the StepsKit embed you already have.
4. **The tour plays on load.** StepsKit reads `?sk=` once and force-plays the matching tour.

## Use cases

| Context | Why it fits |
| --- | --- |
| Release notes & changelog | The entry links to a running tour of the new feature instead of a paragraph describing it. |
| Launch emails | One CTA — "See it in action" — that opens the app already touring the feature. |
| Support replies | Paste a link instead of writing a wall of text. |
| Sales demos | Send a prospect a link that starts the tour on the right screen, no screen-share scheduling. |
| Help docs | A "show me how" button that opens the app and plays the matching tour in context. |
| Re-showing a dismissed tour | Frequency capping is ignored, so a `show_once` tour replays for someone who already dismissed it. |

## FAQ

**Does it work on draft tours?**
No. Play by Link only plays a tour that is active and published to the requesting domain.

**Does it bypass the domain whitelist?**
No. The link respects your published-domain whitelist. It skips targeting, screen-width, and frequency rules, never the domain check.

**What if the visitor already saw a show-once tour?**
It plays anyway. Play by Link force-plays regardless of frequency capping.

**Do I use the tour ID or the slug?**
Either. The `?sk=` value is matched against both.

**Do I need extra code?**
No. As long as the StepsKit embed snippet is on your site, Play by Link works out of the box.

## Related

- [All features](/features.md)
- [Visual tour builder](/features/visual-tour-builder.md)
- [Installation docs](/docs/install/js.md)
- [Feature adoption](/solutions/feature-adoption.md)
