---
updatedAt: 2026-03-14T21:05:42.000Z
agentTools:
  projectIndex: https://docs.optipub.com/llms.txt
---

# Pages

Pages are website pages you build and manage in OptiPub. They are synced to your WordPress site via the official [OptiPub WordPress plugin](https://wordpress.org/plugins/optipub/), which automatically pulls page content, templates, and metadata on a scheduled interval.

> Navigate to **Content** → **Pages**

## Creating a Page

Click the **Create** button to open the page form. The form is split into three steps: **Options**, **Content**, and **Confirm**.

### Step 1 — Options

| Field           | Required | Description                                                                                    |
| --------------- | -------- | ---------------------------------------------------------------------------------------------- |
| **Publication** | Yes      | The publication this page belongs to                                                           |
| **Domain**      | Yes      | The domain where this page will be served                                                      |
| **Path**        | Yes      | The URL path (e.g. `about`, `promotions/summer-sale`). Must be a relative path, not a full URL |
| **Page Type**   | Yes      | `HTML`, `AMP`, or `Instant Article`                                                            |
| **Category**    | No       | Optional page category. Categories can require a subscription to access                        |
| **Template**    | No       | An optional content template to wrap the page in                                               |
| **Active**      | No       | Whether the page is live. Inactive pages are not served                                        |
| **Searchable**  | No       | Whether the page is included in the site search index                                          |

#### SEO & Sitemap Settings

| Field                | Description                                                                                                                      |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Meta Title**       | The page title for search engines                                                                                                |
| **Meta Description** | The page description for search engines                                                                                          |
| **Meta Keywords**    | Keywords for search engines                                                                                                      |
| **Change Frequency** | How often the page content changes — `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, or `never`. Used in the sitemap |
| **Sitemap Priority** | A value from `0` to `1` indicating relative importance in the sitemap                                                            |

You can also attach **Tags** to organize pages across the platform.

### Step 2 — Content

The page content is built using the **GrapesJS** visual editor, which provides a drag-and-drop interface for building web pages without writing code.

Available components include text sections, images, videos, forms, tabs, countdowns, tooltips, link blocks, quotes, and custom code blocks.

#### OptiPub Macros

You can insert **OptiPub macros** into your page content to display dynamic data. Macros use the format `{$variable}` and include:

* **System macros** — pull data from the current context, e.g. `{$sys_resource.title}`
* **Custom content macros** — reference custom content blocks, e.g. `{$custom_sidebar}`
* **Variables** — reference subscriber or ESP variables, e.g. `{$esp_first_name}`

#### Head Section

When a **Template** is selected in Step 1, a **Head** field appears. Use this to add custom CSS or JavaScript that will be appended to the template's `<head>` tag.

#### Page Settings

Inside the editor, the **Page Settings** panel lets you manage:

* **Scripts** — add external JavaScript files or inline scripts
* **Stylesheets** — add external CSS files or inline styles (Google Fonts must be added via the Font Manager instead)
* **Meta tags** — add custom `name`, `property`, `http-equiv`, or `charset` meta tags

### Step 3 — Confirm

Preview the final rendered page in an iframe before saving. This renders the full page with its template and resolved macros.

## Additional Features

* **Auto-save** — unsaved changes are automatically saved every 60 seconds
* **Copy** — duplicate an existing page to use as a starting point for a new one
* **Search indexing** — pages marked as **Searchable** are indexed for site search. The indexer parses the rendered HTML and extracts headers, paragraphs, and content for full-text search

## WordPress Sync

Pages created in OptiPub are synced to WordPress by the [OptiPub WordPress plugin](https://wordpress.org/plugins/optipub/). The plugin runs a scheduled sync (default: every 5 minutes) that pulls pages, resolves templates and macros, and creates corresponding WordPress posts.

***

## Advanced: Dynamic Pages

Most pages have a fixed path like `about` or `contact`. Dynamic pages are an advanced feature that use system macros in the **Path** field to automatically generate pages from your content.

For example, a path of `{$sys_resource.slug}` creates a page for every resource in the publication. You can also build nested paths like `{$sys_resource.category.slug}/{$sys_resource.slug}` for category-based URLs.

Supported dynamic models:

| Model     | Macro prefix      | Example                |
| --------- | ----------------- | ---------------------- |
| Resources | `{$sys_resource}` | `{$sys_resource.slug}` |
| Authors   | `{$sys_author}`   | `{$sys_author.slug}`   |
| FAQs      | `{$sys_faq}`      | `{$sys_faq.slug}`      |
| Forms     | `{$sys_form}`     | `{$sys_form.slug}`     |
| Videos    | `{$sys_video}`    | `{$sys_video.slug}`    |
| Ads       | `{$sys_ad}`       | `{$sys_ad.slug}`       |

Inside the page content, you can use the same system macros to display fields from the current item — for example, `{$sys_resource.title}` in the body of a dynamic resource page will render the title of whichever resource is being viewed.