# Opt-in forms and confirmation pages

> Build a signup form, embed it on your site, turn on double opt-in, and write the confirmation page people see after they click the link.

Source: https://sendbroadcast.net/university/email-marketing/opt-in-forms-and-confirmation

A signup form is where your list grows on its own. In this lesson you build one, put it on your site, protect it from bots, and set up double opt-in with a confirmation page that sounds like you.

## Choose a widget type

Open **Opt-In Forms** in the sidebar and click **New Form**. Broadcast asks how the form appears:

- **Inline Embed** sits inside your page, where you paste the script. Use it in a sidebar, at the end of a post, or in a footer.
- **Popup Modal** is an overlay on top of the page. Use it for a lead magnet or an offer.
- **Full Page** is a page of its own, linked directly. Use it as a landing page.

You can change the type later from the editor's **Widget** tab.

![Three cards: Inline Embed, Popup Modal and Full Page](https://sendbroadcast.net/assets/docs/opt-in-forms/widget-type-chooser-c31fdabc.png)

The three widget types.

## Build the form

The editor has three panes: blocks on the left, the form in the middle, settings on the right. Work saves on its own.

![The form editor with blocks on the left, the form in the middle and style settings on the right](https://sendbroadcast.net/assets/docs/opt-in-forms/form-builder-528dfde9.png)

Blocks on the left, the form in the middle, settings on the right.

Click a block to add it and drag it to reorder. **Every form needs an Email block and a Button block.** Add a Name block if you want to greet people by name. Add a **Custom Field**, **Checkbox**, **Dropdown** or **Radio Group** to collect more. Their answers go into the subscriber's custom data under a key you choose, such as `signup_source`. Use the same key across forms and you can segment on it later.

Ask for little. Every extra field costs you signups.

## Popup triggers

A popup has a **Show widget** trigger: immediately, after a time delay, after the visitor scrolls part of the page, or on exit intent. **Show frequency** decides how often the same visitor sees it again, from every visit to only once. **Show on devices** lets you run a popup on desktop only, which is worth doing because mobile popups are more intrusive.

## Install it

The form's page gives you two ways in:

1. **Embed script.** Paste the script tag into your HTML where the form goes. It is the recommended method and the only one that supports popup triggers. The form renders in an iframe, so your site's CSS cannot break it.
2. **Direct link.** Every form also works as a page at `/opt_in/`. Share it in a bio link, a QR code or an email.

![The Installation card with an embed script tag and a direct link, each with a copy button](https://sendbroadcast.net/assets/docs/opt-in-forms/installation-db2d3852.png)

Both options are on the form page.

 Once the form is live, add your site under **Allowed Embedding Domains** in the form's **Settings**, so nobody can copy your script onto another site. ## Keep the bots out Public forms attract bots. Broadcast turns on three defences by default: a hidden **honeypot** field, **time-based validation** that rejects submissions faster than 3 seconds, and **rate limiting** at 5 submissions per IP per hour. Leave them on. Add **Cloudflare Turnstile** only if bots still get through. ## Turn on double opt-in In the form's **Settings**, under **Automation**, you find the settings that run after a signup: - **Add Tags**: tags for every subscriber from this form, such as the form's name. - **Double opt-in**: the subscriber must click a link in a confirmation email before they join the list. - **Confirmation Email Template**: the email with the link. It must include `{{ confirmation_url }}`. Leave it empty to use the channel's default confirmation template. - **After Confirmation**: a URL on your own site to send people to after they confirm. - **Send welcome email**: a welcome template after signup, or after confirmation when double opt-in is on.

![Automation settings with Add Tags, Double opt-in ticked, a Confirmation Email Template, an After Confirmation URL and Send welcome email](https://sendbroadcast.net/assets/docs/opt-in-forms/form-settings-automation-507bd825.png)

The Automation section of the form settings.

 Leave double opt-in on unless you have a specific reason. It costs you some signups and buys you a list of people who really want your mail. An address with a typo, or one that a bot typed in, never confirms, so it never joins the list. Your sending reputation is built on that list.

1. **Submits the form**
2. **Gets the confirmation email** With `{{ confirmation_url }}`
3. **Clicks the link** Within 24 hours by default
4. **Joins the list** Sees your confirmation page

A subscriber joins at the last step. A typo or a bot never gets past the second.

 ## Write the confirmation page After the click, the subscriber lands on the **confirmation page**. Its text lives on the confirmation template, not on the form: 1. Go to **Templates → Confirmation** and open the template your form uses. 2. Click **Edit**, then **Edit Page** on the **Confirmation page** card. 3. Pick a language tab and open an outcome, such as **Confirmed**. 4. Write a **Heading** and a **Body**. You can use `{{ first_name }}` and `{{ channel_name }}`. 5. Add a **Button label** and **Button link** if you want to send people on to your site. 6. Click **Save**. The page has six states, not one. Write at least **Confirmed** and **Link Expired**, because those are the two people see most. A blank field uses Broadcast's built-in text.

![The Confirmation Page editor with language tabs and the Confirmed outcome open on the left, and a live preview on the right](https://sendbroadcast.net/assets/docs/confirmation-pages/confirmation-page-editor-3aa854d0.png)

Each outcome is a tab above the preview. This channel writes in German, with an English version too.

 If you set **After Confirmation** on the form, subscribers who confirm go to your URL instead and never see the page. An expired or invalid link still shows Broadcast's page. ## Link expiry A confirmation link expires 24 hours after it is sent. Change it under **Settings → General Channel Settings → Confirmation Page → Confirmation link expiry**, to 48 hours, 7 days, 30 days or Never. A person with an expired link submits the form again for a fresh one. Avoid **Never**: a link that never expires still works years later, and from a forwarded email. ## Test before you publish Click **Preview** in the editor and submit the form with your own address. Check that the subscriber lands in the right channel with the right tags, that the confirmation email arrives, and that the link opens the page you wrote. After launch, the form's page shows **Views**, **Submissions** and **Conversion**. See [Opt-in forms](/docs/opt-in-forms) and [Confirmation pages](/docs/confirmation-pages). ## What you learned - Every form needs an Email block and a Button block. Install it with the embed script. - Double opt-in sends a confirmation email first. Leave it on. - The confirmation page text lives on the confirmation template, with six states. - Confirmation links expire after 24 hours by default.

## Quiz
1. Which two blocks must every opt-in form have?
   - Heading and Button
   - Email and Name
   - Email and Button (correct)
   Without an Email block there is nothing to create a subscriber from, and without a Button there is no way to submit.
2. How long does a confirmation link stay valid by default?
   - 24 hours (correct)
   - 7 days
   - 30 days
   - Forever
   Links expire after 24 hours unless you change Confirmation link expiry in the channel settings.
3. Where do you edit the text of the confirmation page?
   - In the opt-in form's Widget tab
   - On the confirmation template, with Edit Page (correct)
   - In Settings → Sender Details
   The page text lives on the confirmation template. Open it under Templates → Confirmation and click Edit Page.
