Variables
What a variable is, where its value comes from, the three ways to create one, the template syntax, formats, rules, and why changing a variable changes nothing until you publish again.
A variable is a name in braces, {h1} or {org_name}, that a template
resolves to a value for the page being rendered. One template per category,
one value per page: that is how a title pattern written once can be right on a
thousand pages.
Variables are baked in when you publish. Changing a variable's value, or the crawl data it reads, changes nothing on your live site until the content is published again.

Where a value comes from
The list on the Variables page has three groups.
From your site are read per page from the crawl: the page's title, its H1,
its word count, a date from its JSON-LD. Each URL gets its own value, and a
page that has not been crawled has no value at all. Nested under this group,
More keys you can use lists read-only keys you can put in a template but
cannot edit: the URL's own parts (url_slug, path_segment_1, domain) and
crawl fields such as h2 and h3.
Your own are values you typed in: the company name, a phone number, a brand suffix. The same on every page.
Rules are advanced: different values on different URLs, decided by conditions you write.
Naming
A name is lowercase letters, digits and underscores, starts with a letter,
and is at most 100 characters. Seven names are reserved because the URL fills them: url_slug,
url_path, path_segment_1, path_segment_2, path_segment_3,
category_name and detected_language. The page refuses them when you try.
domain, h2 and h3 are not reserved; a variable of your own with one of
those names takes precedence.
Creating one
Your own is the quick row: a name, a value, Save. More options opens the full editor for a description, a category or a rule-based variable.
From your site reads a category, or the whole site, and lists the fields found in the crawled pages: JSON-LD properties, meta tags, headings, breadcrumbs. Each field says whether it is the same everywhere or varies per page, with its coverage and example values. Select the ones you want and click Create. A field that is the same on every page becomes a plain value rather than a per-page one, because a value that never varies does not need reading per page; that is decided from what the crawl saw, not from whether the field could in principle vary.
Suggestions from your site, above the list, proposes values it is
confident about, such as the organisation name from og:site_name, and
fields worth activating. Nothing is created until you click Add or Activate.
An empty variable that matches a crawl field gets a Link to crawl data button, which makes it read per page from that field, with Copy sample value as the alternative if you just want the number once.
The title template
The top of the page shows What your titles become: pick a category, write
a title template, and the sample pages under it update as you type. Type {
to insert a variable; the panel values each one from those very pages and
marks the ones that are missing on these pages rather than borrowing a
value from elsewhere. The counter uses the same 50–60 range as the Content
page.

Only the title is edited here. Edit every field in Content takes you to the rest. On a category with no template yet, a proposal built from what the pages actually contain is filled in for you; it is only a proposal until you press Save.
Syntax
There are three forms:
{name}resolves to the value.{name|fallback}uses the fallback where the page has no value.{if:name}text{/if}includes the text only where the page has a value.
Single braces only; {{name}} and [name] do nothing. Names are
case-sensitive. A name the resolver does not know is left exactly as written,
and a page with one left over cannot be published, so a typo is caught before
it ships. {brand|} with nothing after the bar is not an empty fallback; it is
left as written and caught the same way.
Absent is not empty. A per-page variable on a page that was never crawled
is absent, so {name} survives and the publish gate stops it. A page that was
crawled but has no H1 gives {h1} an empty value, which substitutes silently.
Use {h1|fallback} where that matters.
Formats
A format lives on the variable, not in the template, so {published_date}
reads the same everywhere. Open a variable's Advanced edit and pick one:
ISO date, date with slashes or dots, year only, date and time, UPPERCASE,
lowercase, URL-friendly, trim whitespace. Date parts are read in UTC and the
tokens are case-sensitive: MM is the month, mm the minute.
Formats apply to metadata only. Structured data keeps the raw value, because
schema.org wants ISO 8601 there; one publish can write 2026-06-30 into a
title and the full timestamp into datePublished, and that is as it should be.
Rules
A rule-based variable holds a list of rules, tried highest priority first; the first that matches decides the value, and the variable's own value is the default when none does. Conditions include URL contains, starts with, equals, category, language, domain, a query parameter, and a date range, combinable with ALL, ANY and NOT. Up to 50 rules per variable. Two rules with the same priority are tried in no particular order, and the editor warns about it.
Testing
Test template in the page header opens a tester: pick a URL, type a template, and see each variable's value on that URL and where it came from: the crawl, the URL, a rule, the default, or missing. Clicking the plus on a row in the list adds that variable to the tester.
Deleting
Deleting a variable also deletes its rules. Read-only keys cannot be deleted or edited. Select in the toolbar turns on checkboxes for deleting several at once.
After a change
Open Content and publish the categories that use the variable. Until then the live site serves what was published before.
Read next
Templates and publishing