# Landing-page playbook

This is the structure Algerian merchants keep coming back to for cold paid traffic. Use it as a starting template, then iterate on your own numbers.

## Landing pages vs. product pages

DZBuild has both. They serve different purposes:

| Use a **product page** when…       | Use a **landing page** when…                   |
| ---------------------------------- | ---------------------------------------------- |
| You're selling a catalog           | You're running paid ads to one product         |
| Customers browse multiple products | Each campaign is one product, one offer        |
| You rely on category pages         | You want full creative control over the layout |
| SEO traffic matters                | Ads are the only source                        |

You can run both in parallel — landing pages for paid, product/category pages for SEO and direct traffic.

## Plan limits

Landing pages are gated by plan:

| Plan           | Landing pages included | Notes                                               |
| -------------- | ---------------------- | --------------------------------------------------- |
| **Free**       | 0                      | No landing pages on the Free plan.                  |
| **Pro**        | **3**                  | 3 landing pages **in total**, not 3 published ones. |
| **Unlimited**  | unlimited              | Spin up as many as you need.                        |
| **Enterprise** | unlimited              | Same as Unlimited.                                  |

The Pro limit counts every row on [`/dashboard/landing-pages`](https://dzbuild.com/dashboard/landing-pages), drafts and AI-generated pages included. Deleting an unused draft is what frees a slot.

Landing pages are not sold one at a time. They come with the plan, and the AI generator spends [AI credits](https://dzbuild.com/docs/advanced/ai-credits.md) rather than a separate page fee.

### What happens when a paid plan expires

When a paid plan expires:

* **Your storefront goes offline.** Your home, product, category and checkout pages show a "Store Unavailable" page. About 12 hours after expiry your custom domain is also unlinked, so an ad still pointing at `/landing/{slug}` on that domain is paying for a dead page.
* **Most of the dashboard is locked.** Only the dashboard home and the subscribe, account, settings, notifications, affiliate, AI credits and domains pages stay open. [`/dashboard/landing-pages`](https://dzbuild.com/dashboard/landing-pages) sends you to [`/dashboard/subscribe`](https://dzbuild.com/dashboard/subscribe) until you renew, so you cannot edit, create or delete anything in the meantime.
* **Nothing is deleted.** Renew and every page comes back exactly as it was. Only the custom domain has to be connected again, from [`/dashboard/domains`](https://dzbuild.com/dashboard/domains).

Renewal: [`/dashboard/subscribe`](https://dzbuild.com/dashboard/subscribe), then the **▶ How to renew** in-app guide, or [DZBuild YouTube](https://www.youtube.com/@DZBuild-off).

## Two ways to build a page

|          | **Build it yourself**                                                                           | **Generate it with AI**                                                                           |
| -------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Where    | [`/dashboard/landing-pages`](https://dzbuild.com/dashboard/landing-pages) → Create landing page | [`/dashboard/landing-pages/ai-generate`](https://dzbuild.com/dashboard/landing-pages/ai-generate) |
| You get  | An **empty** page you fill section by section                                                   | Ready-made image panels with Algerian Darija copy plus a themed order form                        |
| Cost     | Free (uses a plan slot)                                                                         | 20 AI credits (Medium, 1 panel) or 45 (Tall, 3 panels), plus a plan slot                          |
| Language | Arabic / RTL                                                                                    | You choose it in the wizard                                                                       |

The AI generator has two prerequisites, both checked **before** any credits are taken — if either fails, nothing is charged:

1. A product that already has **at least one uploaded photo**.
2. A **free landing-page slot** on your plan.

See [AI Credits](https://dzbuild.com/docs/advanced/ai-credits.md) for pricing, refunds and limits.

Page language

A landing page carries its own language, independent of your store language — it also sets the text direction. Today you can only choose it in the AI-generation wizard (or through the public API). A page you build by hand in the editor is Arabic / RTL, and there is no control to change it afterwards.

## Setting up a landing page

1. Open [`/dashboard/landing-pages`](https://dzbuild.com/dashboard/landing-pages) → **Create landing page**. You pick the product the page sells, which is required, then fill in a title, an optional slug (left empty, one is generated from the title) and an optional short description. That's the whole form.
2. Pick the product the page sells (see the warning below — this matters for shipping).
3. Build the page section by section. **There is no template gallery**: the new page is created empty and drops you straight into the section editor. Add sections one by one from the **Add section** picker.
4. Customize copy, photos and colors. The editor renders the **real storefront page live** in the preview panel, so check the mobile layout there rather than opening the public URL. Previewing doesn't count as a page view, doesn't fire your pixels and can't create orders.
5. Assign your campaign [Pixel](https://dzbuild.com/docs/marketing/pixels.md) at [`/dashboard/pixels`](https://dzbuild.com/dashboard/pixels) — see [Pixel + tracking](#pixel--tracking) below.
6. There is no separate publish step. A page you create in the dashboard is live at its URL as soon as it is created, and your saved edits show there.

The landing page lives at `/landing/{slug}` on your storefront domain (note: `/landing/`, not `/lp/`).

Always pick a real product

A landing page with no product still charges the **base per-wilaya shipping rate** — shipping is not zero. What it silently loses is the **weight surcharge**, the [Custom Product Shipping](https://dzbuild.com/docs/addons/custom-product-shipping.md) override, and the Min/Max Quantity rules. So a heavy product, or one with a per-product shipping override, gets undercharged compared to its own product page.

A page you create in the dashboard always has one: the create form requires a product, and the editor lets you switch the page to another product but not remove it. Older pages, and pages created through the API, can still have none; the landing-page list flags them with a badge and a link to attach a product in the page settings. The **order form**, **order button** and **product offers** sections also carry their own product picker, and a section's product overrides the page-level one.

## The section catalogue

These are the section types you can add in the editor:

| Section            | What it does                                                     |
| ------------------ | ---------------------------------------------------------------- |
| Image              | A single full-width image                                        |
| Image carousel     | A swipeable set of images                                        |
| Announcement bar   | A thin banner strip                                              |
| Special offer      | A highlighted offer block                                        |
| Price display      | Price with optional strikethrough and discount badge             |
| **Product offers** | Quantity bundles ("buy 2", "buy 3") with per-offer free shipping |
| **Order form**     | The order form itself, with a buy button                         |
| Order button       | A buy button, optionally with the form attached                  |
| Free text          | Rich text — use this for your FAQ                                |
| Contact button     | WhatsApp / phone contact                                         |
| Countdown          | A countdown timer                                                |
| Fake visitors      | A live-viewers counter                                           |
| Testimonials       | Customer reviews block                                           |
| Custom form        | Lead capture; answers are appended to the order notes            |

**Product offers** is the main AOV lever on landing pages. Quantity bundles are priced **server-side**, so the total the customer sees is always the total they are charged, and an offer can carry its own free shipping. The **order button** can also be set to follow the offers, mapping the chosen quantity to the matching offer price automatically.

### Order-form behaviour

An order form or order button has four behaviours, chosen in its settings:

* **Link-only button** — no form, the button just links
* **Button + form, tap to open**
* **Button + form already open** — the default for **new** order-form sections
* **Form always open, no button** — the old default

Defaults apply at creation only and are never back-filled, so older sections keep the behaviour they were created with. Note that the order summary renders **below** the submit button, not above it.

## The 7-block structure

### 1. Hero (above the fold)

* **Big product photo** — real, not stock. Mobile-first.
* **One-sentence headline** with benefit + price (*"X premium bag for 1900 DZD only — delivered everywhere"*).
* **CTA button** — scrolls to order form. Color contrasts with the background.

### 2. Benefits (3–5 bullets)

Three to five benefit lines max. Use icons:

* 🚚 Cash on delivery, in the wilayas you actually cover
* ⭐ Your real review score, if you have one
* 🔄 Your return window

Write these from your own store. A delivery or returns promise you cannot keep is what produces refused parcels.

### 3. Product showcase

* 4–6 lifestyle photos
* 1 short video if you have one (15s autoplay loop, no sound)

### 4. How it works / What's in the box

* 3 steps for "how it works" products
* A list of contents for "what's in the box"

### 5. Reviews / testimonials

Use the **Testimonials** section.

* 3–5 reviews with photos
* Real names + locations (*"Sarah, Algiers"*)
* Mix of 4 and 5 stars (all-5 looks fake)
* Source from real reviews captured by [Product Reviews](https://dzbuild.com/docs/addons/product-reviews.md)

### 6. FAQ

There is **no FAQ or accordion section type** — write the FAQ inside a **Free text** section.

* 5–8 questions, as plain question/answer text
* Cover: shipping cost per wilaya, return policy, delivery time, COD, sizing, warranty

### 7. Order form

* Use an **Order form** section (or an **Order button** with the form attached)
* The CTA buttons throughout the page scroll here — so if you leave the form always open with no button, there is nothing for them to scroll to
* Required: name, phone, wilaya, qty
* Optional: variant pickers (color/size — use the [Offer Variant Popup add-on](https://dzbuild.com/docs/addons/offer-variant-popup.md) for multi-piece offers)
* **Submit order** button — large, prominent, with the order summary directly beneath it
* COD trust badge below

## Copy guidelines

* **Arabic** — warm, friendly, conversational. Avoid formal Modern Standard Arabic for casual products; mix in colloquial Darija for relatability.
* **French** — clear and direct. Don't translate Arabic literally; rewrite for French sensibility.
* **Avoid superlatives** — *"the best ever"*, *"world-class"*. Algerian buyers are sophisticated; superlatives signal "marketing speak."

## Pricing tactics

| Tactic                           | When to use                   |
| -------------------------------- | ----------------------------- |
| Strikethrough was/now            | High-perceived-value items    |
| Bundle pricing                   | Cross-sell ("Buy 2 + 1 free") |
| Free shipping for offers ≥ X DZD | High-AOV products             |
| Plain price                      | Premium products, simplicity  |

## Pixel + tracking

Install [Facebook Pixel + CAPI](https://dzbuild.com/docs/marketing/pixels.md) first. The events themselves are automatic — there is nothing to configure on the landing page:

| Event                                          | When it fires                                                   |
| ---------------------------------------------- | --------------------------------------------------------------- |
| `ViewContent`                                  | On page load                                                    |
| `InitiateCheckout`                             | Once per order form, when the buyer submits it                  |
| `Purchase` (Meta) / `CompletePayment` (TikTok) | On a successful order from the order form                       |
| `Lead` / `SubmitForm` / `generate_lead`        | Only from a **Custom form** section — never from the order form |

Landing pages emit `InitiateCheckout` only when the buyer submits an order form, so a retargeting audience built on that event leaves out every visitor who never pressed the order button. Retarget on `ViewContent` or a page-view audience for the `/landing/` URL instead; see [Abandoned cart strategy](https://dzbuild.com/docs/advanced/abandoned-cart-strategy.md).

### Assigning a Pixel to the page

Pixel assignment is **not** part of landing-page setup and it is not an "override". Go to [`/dashboard/pixels`](https://dzbuild.com/dashboard/pixels), open the pixel and assign it to the landing page. The rule is:

* A pixel with **no** assignments is global and fires everywhere.
* A pixel **with** assignments fires only where one matches.

Global pixels still fire alongside an assigned one, so a campaign pixel is **added**, never substituted.

Once you have 50+ purchases, switch your campaign to **Optimize for Purchase** — Meta moves the algorithm to optimize for buyers, not lookers.

## Testing variants

The [A/B Testing add-on](https://dzbuild.com/docs/addons/ab-testing.md) (**Pro plan**) is the built-in way to do this. You give it 2 to 5 landing pages, it hands you one test link, and it rotates arriving visitors between the pages, counts the orders each one produced, and lets you send all remaining traffic to the winner. Point your ad at the test link instead of at a page URL. The add-on is managed at [`/dashboard/ab-tests`](https://dzbuild.com/dashboard/ab-tests).

If you would rather keep the split inside Facebook or TikTok:

1. Build the second page. There is no duplicate button on [`/dashboard/landing-pages`](https://dzbuild.com/dashboard/landing-pages), so you create a new page and rebuild its sections. Inside the editor you can copy an individual section.
2. Give each page its own slug.
3. Point a separate ad set at each URL, so the split happens in the ad platform.

Keep a clean naming convention across the two pages:

* `LP-X-control` — original
* `LP-X-test1` — testing one change
* `LP-X-test2` — testing another change

Don't change two things at once, or you won't know which one won. Remember that each extra page consumes a landing-page slot.

## Speed

Mobile load time is the conversion killer:

* ≤ 1 s = ideal
* 1–2 s = ok
* 2–3 s = losing 30 %+ of visits before they see the page
* 3 s+ = mostly wasted ad spend

Compress hero images aggressively (WebP, ≤ 200 KB). Lazy-load below-fold. The [Image Cadre add-on](https://dzbuild.com/docs/addons/image-cadre.md) helps frame photos correctly, and WebP versions are served automatically.

## Audience matching

A landing page is only as good as the traffic. Match the audience to the offer:

* **Wide audience** for low-price impulse products (perfumes, accessories)
* **Narrow lookalike** for higher-price considered products (electronics, fashion)
* **Retargeting** for cart abandoners — see [Abandoned cart strategy](https://dzbuild.com/docs/advanced/abandoned-cart-strategy.md)

## When to clone vs. build new

* **Reuse the structure** of an existing high-converter when you adapt it to a new product in the same category. There is no whole-page copy in the dashboard, so you create the new page and rebuild its sections; the section copy icon inside the editor saves some of that work.
* **Start from scratch** when you change market segment or core messaging.

## Common mistakes

* **Linking to your storefront from the landing page** — sends customers down a rabbit hole. Don't.
* **Multiple CTAs going to different places** — one CTA, one destination (the order form).
* **Tons of text** — most readers scan, not read. Keep block copy short.
* **No variant pickers** — if your product has variants, the customer needs to choose them on the page.
* **No product selected** — the base per-wilaya shipping still applies, but the weight surcharge, the Custom Product Shipping override and the Min/Max Quantity rules are all skipped. Always pick a real product, at page level or on the order-form / order-button / product-offers section.
* **Forgetting to assign the campaign Pixel** — an unassigned campaign pixel simply doesn't fire on the page, so the campaign records nothing. Assign it at [`/dashboard/pixels`](https://dzbuild.com/dashboard/pixels).
* **Writing the FAQ as a section that doesn't exist** — there is no FAQ/accordion type; put it in a Free text section.
