Authors¶
Everything in this page is done from AdminCentral. You never edit a file.
The [H1] SEO tab¶
Page properties have a tab called [H1] SEO, and the content apps that have been enabled for it (products, case studies) have the same tab in the item form. The fields are identical in both places: a catalog product is optimised where you edit the product, not somewhere else.
Inside the tab you will find one or two panels — Metadata and Sitemap — depending on what the template needs. A detail template that lists a collection may show only Sitemap, because its own address is never published. If you expect a panel and it is not there, that is a one-time setup job for a developer, described in Developers · Installation.
📸 [Screenshot: page properties dialog open on the [H1] SEO tab, with the Metadata panel expanded showing the Content, Indexing (robots), Social, Structured data / GEO and Advanced groups]
Content¶
| Field | What it does |
|---|---|
| Title | The blue link Google shows in its results, and the title of the social card. Put the main keyword first and the brand last ("Running shoes | Brand"). Recommended 50–60 characters, max. 60. Per language. |
| Description | The grey snippet under the title, and the description of the social card. One or two sentences with the value proposition and a call to action. Recommended 140–160 characters, max. 160. Per language. |
| Summary / TL;DR | A short factual summary in plain language, one to three sentences — what you would tell a person, or an AI, about this page. It feeds AI search and it is the description used in llms.txt. Per language. |
Empty fields fall back, they never break anything. An empty Title uses the item's own title
(for catalog items, its name). An empty Description uses the Summary / TL;DR. An empty
Summary / TL;DR simply means the link in llms.txt falls back to the description, and then to
the title. Filling these in is an improvement, never a prerequisite.
Indexing (robots)¶
| Field | What it does |
|---|---|
| No index | Asks search engines not to show this page in their results — and removes it from llms.txt. Unchecked by default. Use it on thank-you pages, internal search results and duplicates; never on a page that should rank. |
| No follow | Asks crawlers not to follow the links on this page. Unchecked by default. Rarely needed. |
Note — No index does not remove the page from the sitemap; the field for that is Exclude from sitemap, in the Sitemap panel. The two are separate on purpose: a page can be excluded from the sitemap and still be indexable through a normal link.
Social (Open Graph / Twitter)¶
| Field | What it does |
|---|---|
| Social image (Open Graph) | The image used when the page is shared. Picked from the media library. Recommended 1200×630 px, under 1 MB, with the subject centred. |
| Twitter/X card | summary_large_image (default) — a big image; or summary — a small thumbnail. |
Leave Social image empty and the site's default social image is used, when one is configured. If neither exists, the share simply has no image.
Structured data / GEO¶
| Field | What it does |
|---|---|
| Schema.org type | What the page is, which is what enables rich results and helps AI place the content: WebPage (default), Article, Product, Organization or Person. It also decides the social type: Article shares as an article, Product as a product, everything else as a website. |
| Topics / entities | The main topics of the page, one per line. Three to six concepts in plain language (running, cushioning, neutral pronation). They help an AI understand and disambiguate the subject. |
| FAQ (Q&A) | Question and answer pairs. Google can show them as an expandable block directly in the results, and AI assistants quote them. Use real user questions with answers of one to three sentences. Per language — keep the same number of entries in the same order in every language. |
Leave them empty and the structured data is still generated, just with less detail.
Advanced¶
| Field | What it does |
|---|---|
| Raw JSON-LD (override) | Structured data written by hand, for cases the fields above cannot express. It replaces the generated block entirely. Leave it empty unless you know you need it. |
Warning — Raw JSON-LD (override) must be valid JSON. When you fill it in, Schema.org type and Topics / entities stop having any effect on the structured data — your text is published instead of the generated one. The FAQ block is published separately and is not affected.
What happens on its own¶
You fill in what adds meaning; the plumbing is generated:
- The canonical address of the page.
- The complete social card:
og:title,og:description,og:url,og:type, the site name, the image and its alternative text (which reuses the title), and the matching Twitter/X tags. - The crawler instruction built from No index and No follow.
- The publication and update dates, taken from the page itself.
- The structured data, from Schema.org type, Topics / entities and the title and description — plus a separate FAQ block whenever you have entered questions.
- The publisher block (organisation name, type, logo and social profiles), taken from the site configuration.
Sitemap¶
The sitemap is generated from the published pages. There is nothing to maintain and nothing to regenerate.
A developer creates one page named sitemap per site or brand — see
Developers · Installation — and from then on:
- Its location decides its scope. A
sitemappage at the root covers the whole site; asitemappage under/brand-acovers/brand-aonly. - It is served at
/sitemap.xml, and at/brand-a/sitemap.xmlfor a brand. - Its own dialog holds a single read-only field, Automatic sitemap, that restates these rules. There is nothing to fill in there.
What you do control is per page, in the Sitemap panel of the [H1] SEO tab:
| Field | What it does |
|---|---|
| Exclude from sitemap | Removes this page from the sitemap and every page under it. Unchecked by default. |
| Priority (0.0 - 1.0) | How important this page is relative to the rest, e.g. 0.8. Empty by default. |
| Change frequency (changefreq) | How often the page changes: always, hourly, daily, weekly, monthly, yearly, never. Empty behaves as weekly. |
Left empty, Priority is calculated from how deep the page sits: 1.0 at the root, 0.1 less
per level, never below 0.1. Left empty, Change frequency is weekly. A value outside 0.0–1.0
is refused when you save.
Warning — Exclude from sitemap takes the whole branch with it. Ticking it on a section landing page removes every page underneath, which is usually what you want — but it does mean one checkbox can remove many addresses at once.
There is a fourth field in that panel, Source workspace (dynamic page). It is an advanced, one-time setting a developer fills in; leave it alone. What it does is described below.
Dynamic collections¶
Some templates render one address per item — a case study detail, a product detail. Those pages are expanded automatically: instead of the template's own address, the sitemap gets one entry per item of the collection, built from the item's slug. Publishing a new case study adds it to the sitemap with no further action, and removing it takes it out.
The dates come from each item; the priority and the change frequency come from the template, because all the items share it.
Languages¶
On a multilingual site each page appears once per language, and every entry carries the full set
of language alternates so Google never reads the translations as duplicates. The home page of the
default language is the one exception: it is published as /, without a language prefix, because
that is the address visitors actually land on.
On a single-language site the addresses are published plain, with no language information — which is correct: alternates for one language say nothing.
📸 [Screenshot: the sitemap page in the Pages app, and the resulting sitemap.xml opened in a browser]
robots.txt¶
robots.txt is the set of traffic rules crawlers read when they arrive. It lives in a page named
robots, created once by a developer, and has one editable field.
Open the page properties and edit robots.txt content. What ships as the starting point is:
User-agent: *
User-agent: AdsBot-Google
Disallow: /admin/
Disallow: /.magnolia/
Disallow: /modules/
One directive per line. An empty field is valid and means "everything is allowed".
Note — the
Sitemap:line is appended for you, with the right domain for whichever address the file is served from. Do not write it by hand or it will appear twice.
Same scoping rule as the sitemap: a robots page at the root serves /robots.txt, and one under
/brand-a serves /brand-a/robots.txt.
📸 [Screenshot: the robots.txt content field in the page properties dialog]
llms.txt¶
llms.txt is the equivalent of the sitemap, written for AI assistants — ChatGPT, Claude, Perplexity,
Gemini. It is a readable index of the site: what it is about, and which content matters.
It is fully automatic. There are no fields to fill in, because it reuses what you have already entered:
- The title and description at the top come from the site configuration.
- Each first-level page becomes a section, with its own pages nested underneath.
- Each link's description is the page's Summary / TL;DR, or its Description, or its title — whichever is filled in first. For a collection item it is the Summary / TL;DR, then the item's own description, summary or subtitle.
- Pages marked No index are left out. Your decision about search engines applies to AI too — though, unlike Exclude from sitemap, the pages underneath a hidden page still appear.
- Dynamic collections are expanded, exactly as in the sitemap.
- The
sitemap,robotsandllmspages themselves never appear.
It is served at /llms.txt, and at /brand-a/llms.txt for a brand. Its dialog holds a single
read-only field, Automatic llms.txt.
To improve what it says, fill in Summary / TL;DR on the pages that matter. That is the only lever, and it is the same field that feeds the search snippet.
📸 [Screenshot: generated llms.txt showing the site title, the description blockquote and two sections with nested links]
The Redirects app¶
Open [H1] SEO › Redirects. Each rule sends visitors from an old address to a new one, which is what protects your ranking when a site is redesigned, a section is renamed or a platform is migrated.
📸 [Screenshot: Redirects app, list view with several rules and the rule form open]
Creating a rule¶
| Field | What it does |
|---|---|
| Source URL pattern | The address to catch. Required. Must start with / for an exact or prefix rule, or with ^ for a pattern rule — you are told so when you save if it does not. |
| Target URL | Where to send the visitor. Required. A path starting with /, or a full https://… address on another domain. |
| Redirect type | 301 permanent (default — moves the ranking to the new address) or 302 temporary (campaigns, maintenance). |
| Match type | exact (default), prefix or regex — see below. |
| Description | Internal notes: why the rule exists, who asked for it. Never shown to visitors. Optional. |
| Active | Turn a rule off without deleting it. A rule that is not active is never applied and is never published — an unticked box behaves exactly like a deleted rule, except you keep it. |
The three match types¶
| Type | Catches | Example |
|---|---|---|
| exact | One specific address, nothing else. | /about-us → /company |
| prefix | A whole section, keeping the rest of the address. End the pattern with /*. |
/cs/* → /case-studies/ turns /cs/acme into /case-studies/acme |
| regex | Flexible patterns, with $1-style substitution. Anchor it with ^…$. |
^/blog/(\d+)/(.*)$ → /news/$2 |
Pick prefix to rename a section, exact for a single address, regex only when the address has to be transformed.
When several rules match the same address the most specific one wins: exact beats prefix, which beats regex; between two rules of the same type, the longer pattern wins. There is no priority to set by hand.
Languages¶
On a multilingual site you normally leave the language out of both fields. A rule written as
/products/old catches /es/products/old and /en/products/old, and the visitor keeps the
language they were reading in. Write a language only when you mean it: in Source URL pattern to
restrict the rule to that language, or in Target URL to move the visitor to another one.
Bulk import and export¶
In a migration you will not type hundreds of rules one by one.
- Select the root — or a brand folder — and click Import from CSV.
- Click CSV template to download a spreadsheet with the right columns, or Full CSV export to start from the rules you already have.
- Fill it in, upload it under CSV file, and click Import.
- Export to CSV in the list view downloads the current rules for auditing, or to edit in bulk and re-import. Standing in a brand folder exports that folder only.
A row with an error does not abort the import: the valid rules are created and you get a message telling you how many were created, how many updated and how many failed.
Note — the round trip is safe: re-importing an export updates the rules instead of duplicating them, as long as you keep the
namecolumn untouched. That column is the identity of the row, and themarcacolumn decides which brand folder a rule belongs to — the folder written in the file wins over the folder you happen to have open.
Where rules apply¶
A rule works on the public site and inside the platform, and takes effect within a minute of saving — no deployment, no restart.
Warning — brand folders organise the list, they do not scope it. A rule filed under
/brand-ais applied to any address that matches it, whichever brand the visitor is on. Write the brand into the Source URL pattern if you need the rule to apply to one brand only.