# Setting up landing-page angles

> Build a Shopify product page version for each ad angle without code, point ads at it, read each angle's results in Page Performance, and keep it working.

Source: https://help.tryordinary.com/features/landing-page-angles

---

An angle is a version of one product page written for one ad message: a different headline, different copy, different proof. "Sensitive skin", "founder story" and "menopause" can all sell the same deodorant, and each ad performs better when the page it lands on says the same thing as the ad.

On Shopify, the cleanest way to build an angle is an **alternate product template**. It needs no code, the content is edited in the theme editor, and Ordinary reports each angle as its own page.

## Angle or test? Decide first

These answer different questions, and mixing them up is the most common mistake.

- **An angle** sends one ad's audience to one version of the page. Page Performance tells you how each ad-and-page pair performs. Each angle gets different people from a different ad, so a better number does not prove the page is better: the ad, the audience and the page are measured together.
- **A test** splits the same visitors at random between two versions. Only a test tells you which page wins. In Ordinary that's a split-URL test (see [Experiments](https://help.tryordinary.com/features/experiments)).

A good rhythm: launch angles to find the messages that work, then test the strongest angle against your base product page before you make it the default.

## Build an angle in Shopify

1. In Shopify, go to **Online Store → Themes → Customize**.
2. Open the template menu at the top of the editor, choose **Products**, then **Create template**. Base it on your default product template.
3. Name it `lp-<product>-<angle>`, for example `lp-deodorant-sensitive`. Use lowercase letters and hyphens.
4. Edit the new template like any page: headline, sections, images, reviews.
5. Open `/products/<product-handle>?view=lp-deodorant-sensitive` to see it. The part after `view=` is the template name without the `product.` prefix.

Don't assign the template to the product in the product's settings. That changes the page every visitor sees. An angle works only through the link.

**Choose names you'll keep.** Ordinary uses the template name to tell angles apart. If you rename a template while ads point at it, its history splits into two rows. To change what the row says in Ordinary, give it a label instead (below). Never reuse a name for different content: make a new template.

**Check before the ads go live:**
- The page looks right on a phone and on a computer.
- Add to cart and checkout work from the angle page.
- The page's canonical URL is still the plain product URL, so search engines don't treat the angle as a duplicate page. Most themes do this already.

## Point your ads at it

Use the angle link as the ad's destination: `https://yourstore.com/products/<handle>?view=<template-name>`. UTM tags and ad click IDs can be added as usual. Ordinary ignores them when it groups pages.

Keep one angle per ad, or per ad set. If one ad links to several angles, you can no longer tell which message brought the visitor.

## Read the results in Ordinary

In **Page Performance**:

- The product page's row is the **whole page**: every angle plus the base page, exactly as before. A **variants** chip shows the page has angles.
- Click the chip to expand one row per angle and a **Base page (no view)** row for visits without `?view=`. There is no total row: the page's own row is the total.
- Open the page and it starts with **Versions of this page**: the whole page, the base page and each angle side by side — visits, orders, conversion rate against the base, and on Starter and higher spend, ad orders, new customers, CAC and ROAS. Orders are the ones added to cart on the angle itself; ad orders count every buyer the angle's ads brought in, even if they added to cart on the plain product page. Click an angle's row, or use the picker at the top, and every section below follows it.
- An angle with too few visitors to judge says so rather than reading as ahead or behind.

Two things to expect:

- **Angle rows can add up to more than the page row.** A visitor who lands on an angle and later clicks through to the plain product page is counted on both rows, and once on the page row.
- **An angle that is part of a test** shows a link to that test. Use the test's results to decide the winner, because only the test knows which version each visitor was assigned.

**Labels.** Rows show the template name until you give it a label. Click the pencil on an angle's row (admins) to call it "Sensitive skin" instead of `lp-deodorant-sensitive`, or manage labels under **Settings → Tracking**. A label changes only the display.

Ordinary splits pages on `view` automatically, so there's nothing to set up for angles built this way. Results start from the day your Ordinary pixel was installed.

## Test one angle against another

Create a split-URL test in Ordinary with the base page as the control and the angle link as the variant, or with two angle links. Send it the same traffic, for example one ad pointing at the base page, and let Ordinary split visitors. See [Whole-page redesigns: use a split-URL test](https://help.tryordinary.com/features/experiments#whole-page-redesigns-use-a-split-url-test) for how split-URL tests work.

## Keep angles working

- **Each template is its own copy.** A change to your base product page, such as a new review section or a price note, does not reach the angle templates. Copy shared changes across, or keep templates frozen while ads run.
- **After a theme change or update,** open every angle link again. A template that didn't come across with the new theme quietly shows your default product page.
- **Retiring an angle:** turn off the ads first, then delete the template. If a link names a template that no longer exists, Shopify shows the default product page and nothing tells you, while the ad keeps spending.
- **Changed a product's handle?** Update the ad links.
- **Each template can hold up to 25 sections,** a Shopify limit. Each angle template has its own 25.

## Using a different URL parameter

Some teams pick the angle with their own parameter, such as `?angle=sleep`, and change the page with theme code. Ordinary can split pages on any parameter you name. When visitors arrive on your pages with a parameter that looks like an angle, Page Performance shows a notice offering to **Split by** it (or **Ignore** it), or you can add it yourself under **Settings → Tracking**. History is re-keyed in the background and the rows fill in over a few minutes. Ordinary only groups the visits: your theme still has to change the page content for that parameter. Alternate templates with `?view=` need neither.

Tracking parameters such as UTMs and ad click IDs are never treated as angles.

## Related articles

- [Page Performance](https://help.tryordinary.com/features/page-performance)
- [Experiments](https://help.tryordinary.com/features/experiments)
- [Building a test in your theme code](https://help.tryordinary.com/features/experiments-theme-markup)
