---
title: Content Pages
description: Content pages are the editable pages of your public site — terms of service, privacy policy, company information, a landing page, anything that is prose or layout rather than catalogue. RackHelm ships thirteen starter legal templates and lets you add…
url: "https://rackhelm.com/documentation/content-pages/"
updated: "2026-09-24"
category: "Content, Storefront & Marketing"
---

# Content Pages

Content pages are the editable pages of your public site — terms of service, privacy policy, company information, a landing page, anything that is prose or layout rather than catalogue. RackHelm ships thirteen starter legal templates and lets you add as many pages of your own as you need. This article is for operators; every screen below is in the staff area.

## Before you start

> **Note:** Every screen in this article requires the `manage_pages` permission. The built-in **Administrator** role holds it out of the box; **Support Agent** and **Billing Manager** do not.

The seeded legal templates are created as **drafts**. A draft is not public, is not linked in the footer and is not offered at sign-up, so a fresh install ships with no live legal pages until you review the wording and publish each one deliberately. The Pages index shows a warning banner counting how many drafts you still have.

> **Warning:** The seeded documents are starting templates, not legal advice. Have the wording — particularly Terms, Privacy and the Data Processing Agreement — reviewed by a suitably qualified person before you publish.

## Where pages live

Open **Platform Settings → Pages**. The index lists every page with its group, publication status, whether it appears in the footer, whether it requires consent, its version number and its full public path.

![The Pages index listing content pages with group, status, footer, consent and version columns](/wp-content/uploads/rackhelm-docs/content-pages-index.png)
The Pages index. The pills across the top filter by group and show each group's URL prefix.

## Creating a page

1. Select **New Page**.
2. Enter a **Title**. Leave **URL Slug** blank to have one generated from the title.
3. Choose the editor: **Rich text** for prose, or **Visual builder** for a laid-out page (see [The Visual Page Builder](/docs/visual-page-builder/)). New pages open in the visual builder by default.
4. Pick a **Group** in the sidebar — the group's prefix becomes the first part of the page's URL. Use **Add group** to create one without leaving the form.
5. Set the switches for **Published**, **Show in footer** and **Require acceptance at sign-up**.
6. Select **Create Page**.

![The page editor showing the title, slug with group prefix, content editor and the settings sidebar](/wp-content/uploads/rackhelm-docs/content-pages-editor.png)
The slug field shows the group prefix in front of it, so you can see the finished URL as you type.

### Field reference

| Field | What it does |
| --- | --- |
| **Title** | Required, up to 255 characters. Shown as the page heading and in the browser title. |
| **URL Slug** | Letters, numbers, dashes and underscores only, up to 255 characters. Must be unique within the group, so `/legal/overview` and `/company/overview` can both exist. Leave blank to generate it from the title; a clash gets `-2`, `-3` and so on appended. |
| **Content** | The page body, written in either the rich-text editor or the visual builder. Cleaned when saved and again when rendered. |
| **Group** | Required. Supplies the URL prefix and the group index the page is listed on. |
| **Sort Order** | Whole number. Lower numbers appear first in the footer and on the group index. |
| **Published** | Off means draft: invisible to the public, absent from the footer, not offered at sign-up. Staff holding `manage_pages` can still open the page's URL to preview it, and see a "Draft preview" banner. |
| **Show in footer** | Adds the page to the footer link list once it is published. |
| **Require acceptance at sign-up** | New customers must tick to agree to this page when they register, and the acceptance is recorded against the page's version number. |
| **Meta Description** | Up to 255 characters, used as the page's search-engine description. |

## Never hardcode a page URL

A page's public address is its group's prefix plus its slug — and both halves are editable (see [Page Groups and URL Prefixes](/docs/page-groups-urls/)). If you paste `/legal/privacy-policy` into another page, an email template or a setting, that link dies the moment you rename the group prefix.

Instead, link to the permalink `/page-link/{slug}`. That address always resolves to the page wherever it currently lives. In the rich-text editor, enter `/page-link/privacy-policy` as the link URL; in the visual builder, use the same value in the link component. When the page is rendered, RackHelm rewrites those links to the page's real URL, so readers get a direct link rather than a redirect hop.

> **Tip:** The permalink is also the right value for settings that point at a page, such as the cookie banner's policy link. The seeder sets that to `/page-link/cookie-policy` for exactly this reason.

## Placeholders that fill themselves in

Page content can contain `{{token}}` placeholders that are replaced with your company details when the page is rendered. Both `{{company_name}}` and `{{ company_name }}` spacing work. Fill the values in under **Platform Settings → General & System**.

| Placeholder | Filled from |
| --- | --- |
| `{{company_name}}` / `{{site_name}}` | Company Name |
| `{{company_registered_name}}` | Registered Company Name, falling back to Company Name |
| `{{company_number}}` | Company Registration Number |
| `{{vat_number}}` | VAT Number |
| `{{company_address}}` | Address (line breaks preserved) |
| `{{company_registered_address}}` | Registered Office Address, falling back to Address |
| `{{company_email}}` | Public Contact Email |
| `{{company_url}}` | Company URL |
| `{{last_updated}}` / `{{effective_date}}` | The date this page was last saved |

A placeholder whose setting is empty renders as a visible red marker such as `[Vat Number]` rather than a broken token — that is your prompt to go and fill the field in.

## Versions and proof of consent

Every page carries a **version** number, starting at 1. Saving an edit that changes the body — or, on a built page, the stylesheet — increases it by one. Editing only the title, the sort order or the meta description does not.

When a page has **Require acceptance at sign-up** switched on, RackHelm records a consent row each time a customer agrees: which page, which version, when, from which IP address and with which browser user agent. Registration writes those rows automatically for every acceptance-required page.

There is also an optional re-consent flow: when a page's version moves on, customers who accepted an earlier version are redirected to `/terms/review` and asked to accept again before they can carry on using the portal. It is governed by the `terms_reacceptance_enabled` setting and is **off by default** — this build has no admin screen for it, so it has to be enabled in the settings table. Staff and impersonation sessions are never interrupted, and the flow fails open, so a problem in it cannot lock a customer out.

## System pages

The thirteen seeded documents are marked as system pages. They show a padlock in the index, their slug is read-only so public links keep working, and they cannot be deleted — unpublish them instead if you want them hidden. You can still move a system page to a different group, edit its wording freely, and change any of its switches.

The seeded set is: Terms of Service, Privacy Policy, Acceptable Use Policy, Cookie Policy, Refund & Cancellation Policy, Domain Registration Agreement, SSL Certificate Terms, Service Level Agreement, Anti-Spam Policy, Data Processing Agreement, Company Information, Complaints Procedure and Accessibility Statement. Terms of Service and Privacy Policy arrive with **Require acceptance at sign-up** already on.

## Troubleshooting

| Symptom | Cause and fix |
| --- | --- |
| The page 404s for visitors but opens for you | It is still a draft. Staff with `manage_pages` can preview drafts; nobody else can. Switch **Published** on. |
| Placeholders show as red text in square brackets | That company setting is empty. Fill it in under **Platform Settings → General & System**. |
| "This is a system page and cannot be deleted" | Seeded legal pages are protected. Unpublish the page instead. |
| The slug field is greyed out | System pages keep a fixed slug so existing links keep resolving. You can still move the page to another group. |
| A link inside page content goes nowhere after a rename | The link hardcoded a path. Replace it with `/page-link/{slug}`. |
| The register page shows plain text instead of links to Terms and Privacy | Those two pages are still drafts. The sign-up form only links to published pages. |
| An edit does not appear in the footer | The footer link list is cached and refreshed whenever a page or group is saved. Save the page again if it looks stale, and confirm **Show in footer** and **Published** are both on. |
