diff --git a/docs/user-guides/cms/pages/search.md b/docs/user-guides/cms/pages/search.md index 5726dbc4..3e606a1a 100644 --- a/docs/user-guides/cms/pages/search.md +++ b/docs/user-guides/cms/pages/search.md @@ -64,6 +64,7 @@ The other settings: | Placeholder (optional) | Pale example text inside the box. | | Button text | The text on the button. | | Put the button below the search box | Tick this when the box is in a narrow column. A button beside the box would leave little room to type. | +| Show a clear button in the search box | Adds a cross at the end of the box. It appears once the visitor has typed something, and pressing it empties the box so they can start again. | | Form action URL | The page that shows the results. Leave it as `/search` unless you have built a results page of your own. | ## Show matches as people type: instant search diff --git a/src/DfE.CheckPerformanceData.Application/ContentPages/WidgetRegistry.cs b/src/DfE.CheckPerformanceData.Application/ContentPages/WidgetRegistry.cs index 4fd6a47f..8489094b 100644 --- a/src/DfE.CheckPerformanceData.Application/ContentPages/WidgetRegistry.cs +++ b/src/DfE.CheckPerformanceData.Application/ContentPages/WidgetRegistry.cs @@ -15,7 +15,7 @@ public static class WidgetRegistry new("card", "Card", ContributesToNav: false, """{"title":"","body":"","href":""}"""), new("summarylist", "Summary list", ContributesToNav: false, """{"rows":[]}"""), new("published", "Published callout", ContributesToNav: false, """{"text":""}"""), - new("search", "Search", ContributesToNav: false, """{"label":"Search","placeholder":"","action":"/search","buttonText":"Search","scope":"","scopePageIds":"","searchIn":"site","instant":"false","showButton":"true","buttonBelow":"false","noResultsText":"No results found"}"""), + new("search", "Search", ContributesToNav: false, """{"label":"Search","placeholder":"","action":"/search","buttonText":"Search","scope":"","scopePageIds":"","searchIn":"site","instant":"false","showButton":"true","buttonBelow":"false","clearButton":"false","noResultsText":"No results found"}"""), new("results", "Search results", ContributesToNav: false, """{"scope":"","scopePageIds":"","emptyText":"No results found."}"""), new("pagenav", "Page navigation", ContributesToNav: false, """{"mode":"headings","childrenParentPath":"","showSearch":false,"searchPath":"","searchLabel":"Search","h1":"false","h2":"true","h3":"true","h4":"false","h5":"false","h6":"false"}""") ]; diff --git a/src/DfE.CheckPerformanceData.Web/Data/Import/cms-guide.json b/src/DfE.CheckPerformanceData.Web/Data/Import/cms-guide.json index a24a1082..25c56b8b 100644 --- a/src/DfE.CheckPerformanceData.Web/Data/Import/cms-guide.json +++ b/src/DfE.CheckPerformanceData.Web/Data/Import/cms-guide.json @@ -1,8 +1,8 @@ { "$schema": "cpd-content-v2", "schemaVersion": 2, - "exportedAtUtc": "2026-10-16T09:27:18Z", - "exportedBy": "cms-guide d86271069b4d6cb75dec3129ed5cb0c018f5f87156041ce6e6c3c75c074fd957", + "exportedAtUtc": "2026-10-19T11:41:50Z", + "exportedBy": "cms-guide c6f8aedd298d204938d6437d3d81be5aa36ea652361211fc543bf2f19c61c550", "pageNodes": [ { "id": "a969611f-33ad-518d-9ce5-dcd82a9b2656", @@ -18,7 +18,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

This guide shows you how to create and publish pages, keep them easy to find, and look after the content of the service. Every screenshot is taken from the service itself.

\"}},{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"For example, schedule a page\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}}]]},{\"kind\":\"region\",\"layout\":\"single\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Start here\"},\"anchor\":\"start-here\"}]]},{\"kind\":\"region\",\"layout\":\"halves\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"card\",\"props\":{\"title\":\"For editors\",\"body\":\"Create pages, build them from widgets, publish and schedule them, and edit the fixed text of the service.\",\"href\":\"/help/how-to-use-the-cms/for-editors\"}}],[{\"kind\":\"widget\",\"type\":\"card\",\"props\":{\"title\":\"For administrators\",\"body\":\"Organise the site, move content between environments, read the search figures and decide who can do what.\",\"href\":\"/help/how-to-use-the-cms/for-administrators\"}}]]},{\"kind\":\"region\",\"layout\":\"halves\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"card\",\"props\":{\"title\":\"If something looks wrong\",\"body\":\"A page that will not show, a change that has not appeared, a search that finds nothing.\",\"href\":\"/help/how-to-use-the-cms/troubleshooting\"}}],[{\"kind\":\"widget\",\"type\":\"card\",\"props\":{\"title\":\"Words used in this guide\",\"body\":\"Region, widget, content block, draft, live and the rest, in plain English.\",\"href\":\"/help/how-to-use-the-cms/glossary\"}}]]},{\"kind\":\"region\",\"layout\":\"single\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"I want to\"},\"anchor\":\"i-want-to\"}]]},{\"kind\":\"region\",\"layout\":\"two-thirds-one-third\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
I want toGo to
Add a new pageCreate a page
Change the words on a pageBuild a page from regions and widgets
Know which widget to useWidgets: what each one does
Change a page's title or address, or hide it from the menuPage properties
Make a change go live, now or laterDrafts, publishing and versions
Go back to how a page was last weekDrafts, publishing and versions
Change the home page, the footer or the contact pageContent blocks
Put a search box on a pageSearch
Make a page easier to findSearch
Move a page to a different part of the siteOrganise the page tree
Get a deleted page backOrganise the page tree
Copy content from one environment to anotherMove content between environments
See what people search for and cannot findSearch analytics and feedback
Give a colleague accessRoles and access
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"How the CMS is organised\"},\"anchor\":\"how-the-cms-is-organised\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The public pages of the service come from 2 places.

Pages are the pages you create. They live in a tree that starts with 4 sections: Support, Wiki, Help and Guidance. You build each page from widgets, and you decide when it is published.

Content blocks are pieces of text built into the fixed pages of the service, such as the home page, the contact page and the footer. You can change the words. You cannot move or delete them.

Everything else in this guide is a tool for working with one of those two.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Who can use the CMS\"},\"anchor\":\"who-can-use-the-cms\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

You need one of 2 roles, which are given to you in DfE Sign-in.

RoleWhat you can do
Content editorCreate, edit, publish, move, copy and delete pages. Edit content blocks. Export and import content.
AdministratorEverything an editor can do, plus search analytics, search feedback, system settings, role settings, logs and the audit log.

An administrator can change what each role is allowed to do. An administrator who also writes content needs both roles. See Roles and access.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"About this guide\"},\"anchor\":\"about-this-guide\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

This guide is part of the service. It is created automatically in every environment and brought up to date with each release, so it always describes the version you are using.

It is itself a set of CMS pages, built with the widgets it describes. Open any page of it in the editor to see how it is put together.

!WarningDo not edit these pages to change the guide. A release that brings a newer version of the guide overwrites every page of it, and your changes are lost. If you find a mistake, tell the development team so that the fix reaches every environment.

The editor reminds you. Open a page of this guide, or any other page supplied with the service, and a warning at the top says that your changes will be overwritten.

\\\"The
The warning the editor shows on a page that is supplied with the service.
\"}}],[]]}]", "bodyPlainText": "This guide shows you how to create and publish pages, keep them easy to find, and look after the content of the service. Every screenshot is taken from the service itself. Start here For editors Create pages, build them from widgets, publish and schedule them, and edit the fixed text of the service. For administrators Organise the site, move content between environments, read the search figures and decide who can do what. If something looks wrong A page that will not show, a change that has not appeared, a search that finds nothing. Words used in this guide Region, widget, content block, draft, live and the rest, in plain English. I want to I want to Go to Add a new page Create a page Change the words on a page Build a page from regions and widgets Know which widget to use Widgets: what each one does Change a page's title or address, or hide it from the menu Page properties Make a change go live, now or later Drafts, publishing and versions Go back to how a page was last week Drafts, publishing and versions Change the home page, the footer or the contact page Content blocks Put a search box on a page Search Make a page easier to find Search Move a page to a different part of the site Organise the page tree Get a deleted page back Organise the page tree Copy content from one environment to another Move content between environments See what people search for and cannot find Search analytics and feedback Give a colleague access Roles and access How the CMS is organised The public pages of the service come from 2 places. Pages are the pages you create. They live in a tree that starts with 4 sections: Support, Wiki, Help and Guidance. You build each page from widgets, and you decide when it is published. Content blocks are pieces of text built into the fixed pages of the service, such as the home page, the contact page and the footer. You can change the words. You cannot move or delete them. Everything else in this guide is a tool for working with one of those two. Who can use the CMS You need one of 2 roles, which are given to you in DfE Sign-in. Role What you can do Content editor Create, edit, publish, move, copy and delete pages. Edit content blocks. Export and import content. Administrator Everything an editor can do, plus search analytics, search feedback, system settings, role settings, logs and the audit log. An administrator can change what each role is allowed to do. An administrator who also writes content needs both roles. See Roles and access . About this guide This guide is part of the service. It is created automatically in every environment and brought up to date with each release, so it always describes the version you are using. It is itself a set of CMS pages, built with the widgets it describes. Open any page of it in the editor to see how it is put together. ! Warning Do not edit these pages to change the guide. A release that brings a newer version of the guide overwrites every page of it, and your changes are lost. If you find a mistake, tell the development team so that the fix reaches every environment. The editor reminds you. Open a page of this guide, or any other page supplied with the service, and a warning at the top says that your changes will be overwritten. The warning the editor shows on a page that is supplied with the service." } @@ -38,7 +38,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to How to use the CMS

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Everything you need to write and publish content. If you are new to the CMS, read the first 3 pages in order: they take you from an empty page to a published one.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Two ways into the editor\"},\"anchor\":\"two-ways-into-the-editor\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

From the page you are reading. When you are signed in as an editor, every content page shows an Edit button in the top right corner. Select it to open that page in the editor, in a new tab.

\\\"The
The Edit button appears on every content page.

From the admin area. Select Admin in the header, then Pages. This is where you create pages and find ones that are not published yet.

\\\"The
The Administration page shows only the tools your role can use.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The 5 things to know first\"},\"anchor\":\"the-5-things-to-know-first\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
  1. Nothing you do to a page is public until you publish it. Your work is kept as a draft. Visitors keep seeing the published version until you select Publish draft.
  2. A page is made of widgets. A heading, a block of text and a search box are each a widget. You add them one at a time and arrange them in regions.
  3. Every version is kept. You can look at any earlier version of a page and make it live again.
  4. Deleting is not final. A deleted page goes to Deleted pages, where it can be restored with all its versions.
  5. Changing a page's address breaks links to it. The CMS warns you first. Avoid it once a page is published.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"In this section\"},\"anchor\":\"in-this-section\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
PageWhat it covers
Create a pageAdding a page and choosing its type and address
Build a page from regions and widgetsAdding, editing, moving and removing content
Widgets: what each one doesEvery widget, its settings and when to use it
Page propertiesTitle, address, menu and search settings
Drafts, publishing and versionsPublishing, scheduling, unpublishing and going back
Content blocksThe text of the home page, contact page and footer
Home page bannersNotices at the top of the start page, now or at a set time
SearchSearch boxes, results pages and making content easy to find
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Before you publish: a checklist\"},\"anchor\":\"before-you-publish-a-checklist\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"\"}}]]}]", "bodyPlainText": "Everything you need to write and publish content. If you are new to the CMS, read the first 3 pages in order: they take you from an empty page to a published one. Two ways into the editor From the page you are reading. When you are signed in as an editor, every content page shows an Edit button in the top right corner. Select it to open that page in the editor, in a new tab. The Edit button appears on every content page. From the admin area. Select Admin in the header, then Pages . This is where you create pages and find ones that are not published yet. The Administration page shows only the tools your role can use. The 5 things to know first Nothing you do to a page is public until you publish it. Your work is kept as a draft. Visitors keep seeing the published version until you select Publish draft . A page is made of widgets. A heading, a block of text and a search box are each a widget. You add them one at a time and arrange them in regions. Every version is kept. You can look at any earlier version of a page and make it live again. Deleting is not final. A deleted page goes to Deleted pages , where it can be restored with all its versions. Changing a page's address breaks links to it. The CMS warns you first. Avoid it once a page is published. In this section Page What it covers Create a page Adding a page and choosing its type and address Build a page from regions and widgets Adding, editing, moving and removing content Widgets: what each one does Every widget, its settings and when to use it Page properties Title, address, menu and search settings Drafts, publishing and versions Publishing, scheduling, unpublishing and going back Content blocks The text of the home page, contact page and footer Home page banners Notices at the top of the start page, now or at a set time Search Search boxes, results pages and making content easy to find Before you publish: a checklist The page has one clear title, and the subtitle adds something the title does not. Headings go in order: Heading 2 for sections, Heading 3 inside them. Do not skip a level. Link text says where the link goes. Not \"click here\". Every image has a description for people who cannot see it. You have read the draft with View on the Versions tab, not only in the editor. You have searched for the words people will use, and the page comes up. If not, add Search keywords ." } @@ -58,7 +58,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A new page starts as a draft that only editors can see. Creating one takes about a minute.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"1. Find where the page belongs\"},\"anchor\":\"1-find-where-the-page-belongs\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, then Pages. The screen lists the pages at one level of the site. Select a page's title to see the pages beneath it.

\\\"The
The Pages screen. The menu on the left shows the whole site as a tree.

The site starts with 4 sections: Support, Wiki, Help and Guidance. Most pages belong under one of them. Where you put a page decides its address. A page called autumn-checking-exercise under Guidance is at /guidance/autumn-checking-exercise.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"2. Add the page\"},\"anchor\":\"2-add-the-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select the plus icon on the row of the page yours should sit beneath. Its name is Add child page. To add a page at the top level, select the plus icon beside the Pages heading instead.

\\\"The
The Create page form. The line under the heading confirms where the page will go.

Fill in the 3 fields.

Page type. You cannot change this later, so choose with care.

TypeUse it for
ContentAlmost everything. You build the page from widgets, so it can have columns, cards, a search box and a contents list.
WikiA simple page of text with nothing else. Quicker to write, but it cannot use widgets, and its title and address cannot be changed afterwards.
FolderA container that groups pages. It has no content of its own. Its address shows a list of the pages inside it. Its title and address cannot be changed afterwards.

URL segment. The last part of the page's address. Use lowercase letters, numbers and hyphens only, for example spring-checking-exercise. Keep it short and use the words people would search for.

Title. The main heading of the page. On a content page you can change it later.

Select Create page. A content or wiki page opens in the editor, ready for you to write. A folder takes you back to the list.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"If the page cannot be created\"},\"anchor\":\"if-the-page-cannot-be-created\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
MessageWhat to do
A page already exists at that path.Another page under the same parent uses that URL segment. Choose a different one.
'x' is a reserved path segment and cannot be used for content pages.A top-level page cannot be called admin, dev or healthcheck. Choose a different segment.
'x' conflicts with an existing application route and cannot be used for content pages.A top-level page cannot use an address that belongs to a built-in page of the service. Choose a different segment.
Path may only contain lowercase letters, digits, hyphens, and forward slashes (e.g. 'my-page' or 'section/sub-page').Remove spaces, capital letters and punctuation from the URL segment.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Start from a page that already exists\"},\"anchor\":\"start-from-a-page-that-already-exists\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

If a new page will look like an existing one, copy it. On the Pages screen, select the Copy icon on the page's row.

The copy is added after the last page at the same level, with -copy added to its address and - Copy to its title. A copy of a content page opens on its Properties tab with the message Copied. Change the segment and title to something meaningful before publishing.

!WarningThe copy keeps every version of the original, including its publishing dates. A copy of a published page is published too, at the -copy address, straight away. If you do not want that, open its Versions tab and select Unpublish.

The pages beneath the original are not copied, and the copy starts with no search keywords.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Edit a wiki page\"},\"anchor\":\"edit-a-wiki-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A wiki page opens in a simpler editor: one box for the text, with Save page to keep a draft, Publish to save and publish in one step, and Unpublish. Its versions are listed under the box, with the same publishing dates and actions as a content page. See Drafts, publishing and versions.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"What to do next\"},\"anchor\":\"what-to-do-next\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Your page exists but it is empty and unpublished. Next, build it from regions and widgets.

\"}}]]}]", "bodyPlainText": "A new page starts as a draft that only editors can see. Creating one takes about a minute. 1. Find where the page belongs Go to Admin , then Pages . The screen lists the pages at one level of the site. Select a page's title to see the pages beneath it. The Pages screen. The menu on the left shows the whole site as a tree. The site starts with 4 sections: Support , Wiki , Help and Guidance . Most pages belong under one of them. Where you put a page decides its address. A page called autumn-checking-exercise under Guidance is at /guidance/autumn-checking-exercise . 2. Add the page Select the plus icon on the row of the page yours should sit beneath. Its name is Add child page . To add a page at the top level, select the plus icon beside the Pages heading instead. The Create page form. The line under the heading confirms where the page will go. Fill in the 3 fields. Page type. You cannot change this later, so choose with care. Type Use it for Content Almost everything. You build the page from widgets, so it can have columns, cards, a search box and a contents list. Wiki A simple page of text with nothing else. Quicker to write, but it cannot use widgets, and its title and address cannot be changed afterwards. Folder A container that groups pages. It has no content of its own. Its address shows a list of the pages inside it. Its title and address cannot be changed afterwards. URL segment. The last part of the page's address. Use lowercase letters, numbers and hyphens only, for example spring-checking-exercise . Keep it short and use the words people would search for. Title. The main heading of the page. On a content page you can change it later. Select Create page . A content or wiki page opens in the editor, ready for you to write. A folder takes you back to the list. If the page cannot be created Message What to do A page already exists at that path. Another page under the same parent uses that URL segment. Choose a different one. 'x' is a reserved path segment and cannot be used for content pages. A top-level page cannot be called admin , dev or healthcheck . Choose a different segment. 'x' conflicts with an existing application route and cannot be used for content pages. A top-level page cannot use an address that belongs to a built-in page of the service. Choose a different segment. Path may only contain lowercase letters, digits, hyphens, and forward slashes (e.g. 'my-page' or 'section/sub-page'). Remove spaces, capital letters and punctuation from the URL segment. Start from a page that already exists If a new page will look like an existing one, copy it. On the Pages screen, select the Copy icon on the page's row. The copy is added after the last page at the same level, with -copy added to its address and - Copy to its title. A copy of a content page opens on its Properties tab with the message Copied. Change the segment and title to something meaningful before publishing. ! Warning The copy keeps every version of the original, including its publishing dates. A copy of a published page is published too, at the -copy address, straight away. If you do not want that, open its Versions tab and select Unpublish . The pages beneath the original are not copied, and the copy starts with no search keywords. Edit a wiki page A wiki page opens in a simpler editor: one box for the text, with Save page to keep a draft, Publish to save and publish in one step, and Unpublish . Its versions are listed under the box, with the same publishing dates and actions as a content page. See Drafts, publishing and versions . What to do next Your page exists but it is empty and unpublished. Next, build it from regions and widgets ." } @@ -78,7 +78,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A content page is a stack of regions. A region is a row that sets the layout: one column, two, three or four. Inside each column you place widgets, which hold the content.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The editor\"},\"anchor\":\"the-editor\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Open a page in the editor from the Edit button on the page itself, or from the pencil icon on the Pages screen.

\\\"The
The editor. Regions have a pale orange background so you can see the layout.

At the top:

Each widget shows how it will look, with a label saying what kind of widget it is.

If a warning under the title says This page is supplied with the service, the page is one the service imports by itself, such as a page of this guide. Changes you make to it will be overwritten when the service is updated. See How to use the CMS.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Add a region or a widget\"},\"anchor\":\"add-a-region-or-a-widget\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select Add content here at the place you want the new content. The link appears in every empty column and after every item.

\\\"The
Add content here offers a region on the left and a widget on the right.

To add a region, choose a layout and select Add region.

LayoutColumns
SingleOne column, the full width of the page
Halves2 equal columns
Thirds3 equal columns
Quarters4 equal columns
OneThirdTwoThirdsA narrow column on the left and a wide one on the right
TwoThirdsOneThirdA wide column on the left and a narrow one on the right

To add a widget, choose its type and select Add widget. See Widgets: what each one does for the full list.

A new page has no regions. Add a region first, then add widgets inside it. For a page of text, TwoThirdsOneThird with the text in the wide column gives a comfortable line length and leaves room for a contents list.

On a phone, the columns of a region stack one above the other, left column first.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Edit a widget\"},\"anchor\":\"edit-a-widget\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Under each widget's preview is an Edit link, such as Edit rich text. Select it to open the widget's settings, make your change and select Save.

\\\"A
Each widget has its own Save button.
!WarningEach widget saves on its own. If you change two widgets and select Save on one, the change to the other is lost. Save each widget before you open the next.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Write in the text editor\"},\"anchor\":\"write-in-the-text-editor\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The Rich text widget has a toolbar like a word processor. The Styles list on the left is the most useful part: it applies GOV.UK styles so your page matches the rest of the service.

StyleUse it for
Lead paragraphOne opening paragraph in larger text, at the top of a page
Heading 2 (section), Heading 3 (sub-section), Heading 4 (minor)Headings inside a block of text
Inset text (grey)A note that needs to stand apart from the text around it
Information callout (blue)Something important that everyone should read
Published / review callout (blue)When the page was last reviewed

The Warning button in the toolbar adds a GOV.UK warning: an exclamation mark with bold text beside it. Use it only for consequences that are serious or cannot be undone.

You can paste from Word. The formatting is kept, so check the result and remove anything that does not look like the rest of the page.

To add a picture, use the image button. The picture is stored inside the page, so it travels with the page when you export it. Always fill in the description. Keep pictures small: a large picture makes the page slow for everyone.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Move content\"},\"anchor\":\"move-content\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

There are 2 ways.

Arrows. Each region and widget has Move up and Move down arrows in its top left corner. They move the item one place within its column.

Dragging. Take hold of an item by its grey label, such as Rich text or Region — Single, and drag it. A blue line shows where it will land. You can drag a widget into a different column or a different region.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Remove content\"},\"anchor\":\"remove-content\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select the bin icon in the top right corner of a region or widget, then confirm.

!WarningDeleting a region deletes every widget inside it, and there is no undo. If you delete something by mistake, do not publish: visitors still see the last published version. Open it with View on the Versions tab and copy back what you need.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Save and publish\"},\"anchor\":\"save-and-publish\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Adding, moving, deleting and saving a widget all update your draft straight away. Visitors do not see any of it.

\\\"The
The buttons under the content.
ButtonWhat it does
SaveYou do not need this. Your draft is already saved each time you add, move, delete or save a widget.
Publish draftMakes your draft the live page, now.
UnpublishTakes the live version off the site. Shown only when the page is published.

To publish at a future date instead, see Drafts, publishing and versions.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"How the finished page looks\"},\"anchor\":\"how-the-finished-page-looks\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

This is the example page from the screenshots above, as a visitor sees it. The wide column holds the text, a search box, a summary list and headings. Two cards sit side by side in a Halves region at the bottom.

\\\"The
One page using most of the widgets.
\"}}]]}]", "bodyPlainText": "A content page is a stack of regions . A region is a row that sets the layout: one column, two, three or four. Inside each column you place widgets , which hold the content. The editor Open a page in the editor from the Edit button on the page itself, or from the pencil icon on the Pages screen. The editor. Regions have a pale orange background so you can see the layout. At the top: View page opens the page as visitors see it, in a new tab. If the page is published, that is the live version, not your draft. The tags tell you what exists. A green Published tag means visitors can see a version. A grey Draft tag means there are changes that are not live yet. A page can have both. The tabs are Content , where you build the page, Properties and Versions . Each widget shows how it will look, with a label saying what kind of widget it is. If a warning under the title says This page is supplied with the service , the page is one the service imports by itself, such as a page of this guide. Changes you make to it will be overwritten when the service is updated. See How to use the CMS . Add a region or a widget Select Add content here at the place you want the new content. The link appears in every empty column and after every item. Add content here offers a region on the left and a widget on the right. To add a region, choose a layout and select Add region . Layout Columns Single One column, the full width of the page Halves 2 equal columns Thirds 3 equal columns Quarters 4 equal columns OneThirdTwoThirds A narrow column on the left and a wide one on the right TwoThirdsOneThird A wide column on the left and a narrow one on the right To add a widget, choose its type and select Add widget . See Widgets: what each one does for the full list. A new page has no regions. Add a region first, then add widgets inside it. For a page of text, TwoThirdsOneThird with the text in the wide column gives a comfortable line length and leaves room for a contents list. On a phone, the columns of a region stack one above the other, left column first. Edit a widget Under each widget's preview is an Edit link, such as Edit rich text . Select it to open the widget's settings, make your change and select Save . Each widget has its own Save button. ! Warning Each widget saves on its own. If you change two widgets and select Save on one, the change to the other is lost. Save each widget before you open the next. Write in the text editor The Rich text widget has a toolbar like a word processor. The Styles list on the left is the most useful part: it applies GOV.UK styles so your page matches the rest of the service. Style Use it for Lead paragraph One opening paragraph in larger text, at the top of a page Heading 2 (section), Heading 3 (sub-section), Heading 4 (minor) Headings inside a block of text Inset text (grey) A note that needs to stand apart from the text around it Information callout (blue) Something important that everyone should read Published / review callout (blue) When the page was last reviewed The Warning button in the toolbar adds a GOV.UK warning: an exclamation mark with bold text beside it. Use it only for consequences that are serious or cannot be undone. You can paste from Word. The formatting is kept, so check the result and remove anything that does not look like the rest of the page. To add a picture, use the image button. The picture is stored inside the page, so it travels with the page when you export it. Always fill in the description. Keep pictures small: a large picture makes the page slow for everyone. Move content There are 2 ways. Arrows. Each region and widget has Move up and Move down arrows in its top left corner. They move the item one place within its column. Dragging. Take hold of an item by its grey label, such as Rich text or Region — Single , and drag it. A blue line shows where it will land. You can drag a widget into a different column or a different region. Remove content Select the bin icon in the top right corner of a region or widget, then confirm. ! Warning Deleting a region deletes every widget inside it, and there is no undo. If you delete something by mistake, do not publish: visitors still see the last published version. Open it with View on the Versions tab and copy back what you need. Save and publish Adding, moving, deleting and saving a widget all update your draft straight away. Visitors do not see any of it. The buttons under the content. Button What it does Save You do not need this. Your draft is already saved each time you add, move, delete or save a widget. Publish draft Makes your draft the live page, now. Unpublish Takes the live version off the site. Shown only when the page is published. To publish at a future date instead, see Drafts, publishing and versions . How the finished page looks This is the example page from the screenshots above, as a visitor sees it. The wide column holds the text, a search box, a summary list and headings. Two cards sit side by side in a Halves region at the bottom. One page using most of the widgets." } @@ -98,7 +98,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

There are 9 widgets. This page describes each one in the order they appear in the Widget type list.

WidgetIn one line
CardA boxed link to another page
DividerA line between sections
HeadingA section heading that also feeds the contents list
Page navigationA contents list, or a menu of the pages beneath a page
Published calloutA blue banner for review dates
Rich textFormatted text, lists, tables, links and pictures
SearchA search box
Search resultsThe list of results for a search
Summary listPairs of labels and values, such as key dates
\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Card\"},\"anchor\":\"card\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A box with a heading and a short description. If you give it a link, the heading becomes the link.

SettingWhat to enter
TitleThe heading of the card. Keep it to a few words.
BodyOne or two sentences saying what the reader will find.
Link (optional)Where the card goes, for example /guidance/ks4-checking.

Put cards in a Halves, Thirds or Quarters region, one card to a column. Cards in the same row are made the same height automatically. Use them on landing pages to send people to the right section. A card cannot hold a picture.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Divider\"},\"anchor\":\"divider\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A horizontal line that separates one part of a page from the next, with space above and below it. It has no settings. Screen readers ignore it, so never rely on it to carry meaning: use a heading as well.

Inside a column, the line is as wide as the column. For a line across the whole page, put the Divider in a Single region of its own. This guide has a Divider before each section.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Heading\"},\"anchor\":\"heading\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A heading on its own, from Heading 1 to Heading 6.

\\\"A
The Heading widget has a level and its text.

Use a Heading widget rather than a heading typed inside Rich text when the heading starts a main section of the page. Heading widgets are what the Page navigation widget lists, and each one gets its own link so that other pages can point straight to it.

A page already shows its title as Heading 1. Start your own headings at Heading 2. If you add a Heading 1 widget, it replaces the automatic title and subtitle, so use it only when you want to lay the top of the page out yourself.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Page navigation\"},\"anchor\":\"page-navigation\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A menu in the style of a contents list. It works in 2 ways, chosen with Show.

\\\"A
Page navigation set to list this page's headings.

Page headings lists the headings on this page, so readers can jump to a section. Tick the heading levels to include, from H1 to H6. H2 and H3 are ticked to begin with. If the page uses H2 and H4 but no H3, tick only the levels it uses.

Child pages lists the pages beneath a page, so readers can move around a section.

SettingWhat to enter
Parent path for childrenThe path of the page whose children to list, for example help. Leave it blank to list the pages beneath this one.
Show a search box above the listTick to add a search box.
Search labelThe label of that search box.
Search scope pathLimits that search to one section, for example help. Leave it blank to search the whole site.

When you enter a parent path, the list leaves out folders, pages that are not published, and pages with Show in menu turned off. Each page is listed by its Page name if it has one, otherwise by its title.

If you leave the parent path blank, every page beneath this one is listed by its title, including folders, unpublished pages and pages hidden from menus. To leave those out, enter this page's own path.

Put this widget in the narrow column of a OneThirdTwoThirds or TwoThirdsOneThird region. The menu on the left of this guide is a Page navigation widget set to Child pages.

For a search box above a menu, a separate Search widget gives you more control than Show a search box above the list: it can suggest matches as people type, and it can put its button below the box so that the box stays wide enough to type in.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Published callout\"},\"anchor\":\"published-callout\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A blue banner headed Published. It has one setting, Message. Use it to say when a page was last reviewed and when it is due for review, for example Last reviewed 1 September. Next review due 1 March.

The banner does not update itself. Change the message whenever you review the page.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Rich text\"},\"anchor\":\"rich-text\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The widget you will use most. It holds formatted text: paragraphs, headings, lists, links, tables and pictures. Build a page from regions and widgets explains the text editor and its styles.

Anything unsafe, such as scripts, is removed before the page is shown.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Search\"},\"anchor\":\"search\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A search box. It can search the whole site, a group of sections you choose, or only the page it sits on. It can also show matches while the visitor is still typing. Search explains how to set it up and when to use each option.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Search results\"},\"anchor\":\"search-results\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The list of results for a search, with page numbers when there are more than fit on one page. Put it on a page of its own and point a Search widget at that page.

SettingWhat to enter
Pages to show results from (optional)Tick sections to limit the results to them. Leave everything unticked to show results from the whole site.
Empty-state textWhat to say when nothing matches. It starts as No results found.

The number of results on each page is set by an administrator. See Search.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Summary list\"},\"anchor\":\"summary-list\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Pairs of labels and values in 2 columns. Use it for facts people look up, such as dates, contact details or deadlines.

\\\"A
One row to a line, with a vertical bar between the label and the value.

Type one row to a line, with a vertical bar between the label and the value:

Exercise opens|Monday 14 September, 9am

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Which widget should I use?\"},\"anchor\":\"which-widget-should-i-use\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
I want to showUse
Paragraphs, lists, a table or a pictureRich text
The start of a main sectionHeading
Dates, deadlines or contact detailsSummary list
Links to the main parts of a sectionCards in a Halves or Thirds region
A contents list for a long pagePage navigation, set to Page headings
A menu of the pages in a sectionPage navigation, set to Child pages
A way to find something on a long pageSearch, set to This page
When the page was last checkedPublished callout
\"}}]]}]", "bodyPlainText": "There are 9 widgets. This page describes each one in the order they appear in the Widget type list. Widget In one line Card A boxed link to another page Divider A line between sections Heading A section heading that also feeds the contents list Page navigation A contents list, or a menu of the pages beneath a page Published callout A blue banner for review dates Rich text Formatted text, lists, tables, links and pictures Search A search box Search results The list of results for a search Summary list Pairs of labels and values, such as key dates Card A box with a heading and a short description. If you give it a link, the heading becomes the link. Setting What to enter Title The heading of the card. Keep it to a few words. Body One or two sentences saying what the reader will find. Link (optional) Where the card goes, for example /guidance/ks4-checking . Put cards in a Halves , Thirds or Quarters region, one card to a column. Cards in the same row are made the same height automatically. Use them on landing pages to send people to the right section. A card cannot hold a picture. Divider A horizontal line that separates one part of a page from the next, with space above and below it. It has no settings. Screen readers ignore it, so never rely on it to carry meaning: use a heading as well. Inside a column, the line is as wide as the column. For a line across the whole page, put the Divider in a Single region of its own. This guide has a Divider before each section. Heading A heading on its own, from Heading 1 to Heading 6. The Heading widget has a level and its text. Use a Heading widget rather than a heading typed inside Rich text when the heading starts a main section of the page. Heading widgets are what the Page navigation widget lists, and each one gets its own link so that other pages can point straight to it. A page already shows its title as Heading 1. Start your own headings at Heading 2. If you add a Heading 1 widget, it replaces the automatic title and subtitle, so use it only when you want to lay the top of the page out yourself. Page navigation A menu in the style of a contents list. It works in 2 ways, chosen with Show . Page navigation set to list this page's headings. Page headings lists the headings on this page, so readers can jump to a section. Tick the heading levels to include, from H1 to H6. H2 and H3 are ticked to begin with. If the page uses H2 and H4 but no H3, tick only the levels it uses. Child pages lists the pages beneath a page, so readers can move around a section. Setting What to enter Parent path for children The path of the page whose children to list, for example help . Leave it blank to list the pages beneath this one. Show a search box above the list Tick to add a search box. Search label The label of that search box. Search scope path Limits that search to one section, for example help . Leave it blank to search the whole site. When you enter a parent path, the list leaves out folders, pages that are not published, and pages with Show in menu turned off. Each page is listed by its Page name if it has one, otherwise by its title. If you leave the parent path blank, every page beneath this one is listed by its title, including folders, unpublished pages and pages hidden from menus. To leave those out, enter this page's own path. Put this widget in the narrow column of a OneThirdTwoThirds or TwoThirdsOneThird region. The menu on the left of this guide is a Page navigation widget set to Child pages . For a search box above a menu, a separate Search widget gives you more control than Show a search box above the list : it can suggest matches as people type, and it can put its button below the box so that the box stays wide enough to type in. Published callout A blue banner headed Published . It has one setting, Message . Use it to say when a page was last reviewed and when it is due for review, for example Last reviewed 1 September. Next review due 1 March. The banner does not update itself. Change the message whenever you review the page. Rich text The widget you will use most. It holds formatted text: paragraphs, headings, lists, links, tables and pictures. Build a page from regions and widgets explains the text editor and its styles. Anything unsafe, such as scripts, is removed before the page is shown. Search A search box. It can search the whole site, a group of sections you choose, or only the page it sits on. It can also show matches while the visitor is still typing. Search explains how to set it up and when to use each option. Search results The list of results for a search, with page numbers when there are more than fit on one page. Put it on a page of its own and point a Search widget at that page. Setting What to enter Pages to show results from (optional) Tick sections to limit the results to them. Leave everything unticked to show results from the whole site. Empty-state text What to say when nothing matches. It starts as No results found. The number of results on each page is set by an administrator. See Search . Summary list Pairs of labels and values in 2 columns. Use it for facts people look up, such as dates, contact details or deadlines. One row to a line, with a vertical bar between the label and the value. Type one row to a line, with a vertical bar between the label and the value: Exercise opens|Monday 14 September, 9am Which widget should I use? I want to show Use Paragraphs, lists, a table or a picture Rich text The start of a main section Heading Dates, deadlines or contact details Summary list Links to the main parts of a section Cards in a Halves or Thirds region A contents list for a long page Page navigation, set to Page headings A menu of the pages in a section Page navigation, set to Child pages A way to find something on a long page Search, set to This page When the page was last checked Published callout" } @@ -118,7 +118,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The Properties tab of the editor holds everything about a content page that is not its content. Wiki pages and folders do not have one: their title and address are fixed when they are created.

\\\"The
The Properties tab.

Make your changes and select Save details. A Page details message confirms with Saved.

Properties are not part of a draft. A change here takes effect as soon as you save it, on the published page as well.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"What each property does\"},\"anchor\":\"what-each-property-does\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
PropertyWhat it does
TitleThe main heading of the page. Also what search results show, and what menus show unless you give a page name.
SubtitleAn optional line shown above the title in lighter text. Leave it blank to show none.
Page nameA shorter name for menus, used in the admin menu and in Page navigation widgets. Leave it blank to use the title.
URL segmentThe last part of the page's address. Lowercase letters, numbers and single hyphens. Capital letters are changed to lowercase when you save.
Show in menuUntick to leave the page out of Page navigation menus that list a named section. The page still works for anyone with the link. A folder's own list of its pages, and the menu beside a wiki page, still show it.
Appear in searchUntick to leave the page out of search results. The page still works for anyone with the link.
Search keywordsExtra words the page should be found for. See below.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Help people find the page: search keywords\"},\"anchor\":\"help-people-find-the-page-search-keywords\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

People do not always search for the words you wrote. A page called Contact the helpline will not be found by someone who types phone number unless those words are on the page.

Search keywords fixes that. Type the extra words, separated by spaces, for example helpdesk phone email. A keyword counts for more than the title, so a page comes near the top for its keywords.

Good keywords are:

Administrators can see what people search for and do not find. Ask them for the list: it tells you which keywords to add. See Search analytics and feedback.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Hide a page without unpublishing it\"},\"anchor\":\"hide-a-page-without-unpublishing-it\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Show in menu and Appear in search are separate, so you can choose how hidden a page is.

You wantShow in menuAppear in search
A normal pageTickedTicked
A page people reach only by searchingUntickedTicked
A page in the menu that should not clutter search resultsTickedUnticked
A page only for people you send the link toUntickedUnticked

Neither setting is security. Anyone with the address can read a published page.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Change a page's address\"},\"anchor\":\"change-a-pages-address\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Changing the URL segment changes the address of the page and of every page beneath it. Links and bookmarks to the old addresses stop working, so the CMS asks you to confirm.

\\\"The
You must confirm before an address changes.
!WarningThe old address is not redirected. Before you change the address of a published page, search the site for links to it and be ready to update them.
!WarningConfirming a change of address saves the title, subtitle, page name and URL segment only. The page's Search keywords are cleared, and a change to Show in menu or Appear in search made at the same time is lost. Change the address on its own, then come back to this tab and set the rest.

Search boxes you have limited to chosen pages keep working after a rename or a move. They remember the page itself, not its address.

MessageWhat it means
URL segment can only contain lowercase letters, numbers and single hyphens, for example my-page.Use only those characters, with no spaces or slashes, and no hyphen at the start or end.
Another page already uses that URL.A page beside this one already has that segment.

To move a page to a different part of the site, rather than rename it, see Organise the page tree.

\"}}]]}]", "bodyPlainText": "The Properties tab of the editor holds everything about a content page that is not its content. Wiki pages and folders do not have one: their title and address are fixed when they are created. The Properties tab. Make your changes and select Save details . A Page details message confirms with Saved. Properties are not part of a draft. A change here takes effect as soon as you save it, on the published page as well. What each property does Property What it does Title The main heading of the page. Also what search results show, and what menus show unless you give a page name. Subtitle An optional line shown above the title in lighter text. Leave it blank to show none. Page name A shorter name for menus, used in the admin menu and in Page navigation widgets. Leave it blank to use the title. URL segment The last part of the page's address. Lowercase letters, numbers and single hyphens. Capital letters are changed to lowercase when you save. Show in menu Untick to leave the page out of Page navigation menus that list a named section. The page still works for anyone with the link. A folder's own list of its pages, and the menu beside a wiki page, still show it. Appear in search Untick to leave the page out of search results. The page still works for anyone with the link. Search keywords Extra words the page should be found for. See below. Help people find the page: search keywords People do not always search for the words you wrote. A page called Contact the helpline will not be found by someone who types phone number unless those words are on the page. Search keywords fixes that. Type the extra words, separated by spaces, for example helpdesk phone email . A keyword counts for more than the title, so a page comes near the top for its keywords. Good keywords are: other names for the same thing, such as KS4 for key stage 4 words people use that you would not, such as login for sign in common misspellings Administrators can see what people search for and do not find. Ask them for the list: it tells you which keywords to add. See Search analytics and feedback . Hide a page without unpublishing it Show in menu and Appear in search are separate, so you can choose how hidden a page is. You want Show in menu Appear in search A normal page Ticked Ticked A page people reach only by searching Unticked Ticked A page in the menu that should not clutter search results Ticked Unticked A page only for people you send the link to Unticked Unticked Neither setting is security. Anyone with the address can read a published page. Change a page's address Changing the URL segment changes the address of the page and of every page beneath it. Links and bookmarks to the old addresses stop working, so the CMS asks you to confirm. You must confirm before an address changes. ! Warning The old address is not redirected. Before you change the address of a published page, search the site for links to it and be ready to update them. ! Warning Confirming a change of address saves the title, subtitle, page name and URL segment only. The page's Search keywords are cleared, and a change to Show in menu or Appear in search made at the same time is lost. Change the address on its own, then come back to this tab and set the rest. Search boxes you have limited to chosen pages keep working after a rename or a move. They remember the page itself, not its address. Message What it means URL segment can only contain lowercase letters, numbers and single hyphens, for example my-page. Use only those characters, with no spaces or slashes, and no hyphen at the start or end. Another page already uses that URL. A page beside this one already has that segment. To move a page to a different part of the site, rather than rename it, see Organise the page tree ." } @@ -138,7 +138,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The CMS keeps every version of a page. One version at most is live, meaning visitors can see it. You can work on a draft for as long as you like without changing the live page.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Draft and live\"},\"anchor\":\"draft-and-live\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

When you edit a published page, the CMS starts a draft. From then on the page has 2 versions that matter:

The tags at the top of the editor show both, for example Published — version 2 and Draft — version 3. A draft is numbered with the version it will become when you publish it.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Publish now\"},\"anchor\":\"publish-now\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select Publish draft under the content. Your draft becomes the live page straight away and the previous live version is kept in the history.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Check a page before you publish it\"},\"anchor\":\"check-a-page-before-you-publish-it\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Open the Versions tab and select View on your draft's row. It opens that version in a new tab.

View page, at the top of the editor, opens the page's address. That shows the live version while there is one, so it is the way to check what visitors see, not what you have just changed.

If a page has no live version, its address shows your draft to content editors with a Preview banner. Everyone else sees the Page not found page.

\\\"A
What an editor sees at the address of an unpublished page.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The Versions tab\"},\"anchor\":\"the-versions-tab\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The Versions tab lists every version, newest first, with who changed it and when.

\\\"The
A page with a draft, a scheduled version, the live version and a past one.
StatusWhat it means
LiveThe version visitors see now.
ScheduledHas a Publish from date in the future.
PastHas been published and is not the live version now. Kept so that you can go back to it.
DraftHas no publishing dates. It has never been published, or it has been unpublished.

The statuses are worked out when someone publishes, unpublishes or edits the page. They do not change by themselves when a date passes. See Publish at a future date below.

Each version has these actions.

ActionWhat it does
SaveSaves the Publish from and Publish to dates you have entered for that version.
PublishMakes that version live now, with no end date. It ignores the date fields.
UnpublishShown on the live version. Takes it off the site.
ViewOpens that version in a new tab so you can read it.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Publish at a future date\"},\"anchor\":\"publish-at-a-future-date\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
  1. Finish your draft. Every change you make in the editor is saved as you make it.
  2. Open the Versions tab.
  3. On your draft's row, enter the date and time in Publish from.
  4. Select Save on that row. Its status changes to Scheduled.

From that time, anyone who goes to the page's address sees the new version. You do not need to be signed in.

The rest of the service does not catch up by itself. Until someone next publishes or edits the page, the Versions tab still shows the old version as Live, and search still finds the page by its old text. A page that had no live version before stays out of search and menus. Once the time has passed, open the Versions tab and select Publish on the new version to bring everything into line.

!WarningDo not select Publish on a version you mean to schedule. Publish always means now, whatever dates are in the fields.

Times are in UTC, not UK time. From late March to late October the UK is one hour ahead of UTC, so for a page to go live at 9am UK time in summer, enter 08:00. In winter the two are the same.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Take a page down at a set time\"},\"anchor\":\"take-a-page-down-at-a-set-time\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Enter a date and time in Publish to on the live version's row and select Save. From that time, the page's address stops showing that version.

What visitors see instead depends on the other versions. If an earlier version was published and has no Publish to date, that version is shown again. If there is none, visitors see the Page not found page.

Use this for content with an end date, such as a notice about a checking exercise.

As with scheduling, the rest of the service does not catch up by itself. After the time has passed, the page is still listed in menus and search, and the Versions tab still shows the version as Live. Select Unpublish to finish the job.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Take a page down now\"},\"anchor\":\"take-a-page-down-now\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select Unpublish, either under the content or on the live version's row. That version comes off the site at once. Nothing is deleted: every version is still on the Versions tab and you can publish again at any time.

!WarningUnpublishing removes one version, not the page. If an earlier version was published and has no Publish to date, it becomes the live version again. Look at the Versions tab afterwards. If a version is still Live, select Unpublish on it too, and repeat until none is.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Go back to an earlier version\"},\"anchor\":\"go-back-to-an-earlier-version\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Find the version you want on the Versions tab, check it with View, then select Publish on its row. It becomes the live page again. The version it replaces stays in the history, so you can change your mind.

Going back changes what visitors see. It does not change what the editor holds: the Content tab still shows your newest content, and your next change starts from that.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Good to know\"},\"anchor\":\"good-to-know\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"\"}}]]}]", "bodyPlainText": "The CMS keeps every version of a page. One version at most is live , meaning visitors can see it. You can work on a draft for as long as you like without changing the live page. Draft and live When you edit a published page, the CMS starts a draft. From then on the page has 2 versions that matter: the live version, which visitors see your draft , which only editors see The tags at the top of the editor show both, for example Published — version 2 and Draft — version 3 . A draft is numbered with the version it will become when you publish it. Publish now Select Publish draft under the content. Your draft becomes the live page straight away and the previous live version is kept in the history. Check a page before you publish it Open the Versions tab and select View on your draft's row. It opens that version in a new tab. View page , at the top of the editor, opens the page's address. That shows the live version while there is one, so it is the way to check what visitors see, not what you have just changed. If a page has no live version, its address shows your draft to content editors with a Preview banner. Everyone else sees the Page not found page. What an editor sees at the address of an unpublished page. The Versions tab The Versions tab lists every version, newest first, with who changed it and when. A page with a draft, a scheduled version, the live version and a past one. Status What it means Live The version visitors see now. Scheduled Has a Publish from date in the future. Past Has been published and is not the live version now. Kept so that you can go back to it. Draft Has no publishing dates. It has never been published, or it has been unpublished. The statuses are worked out when someone publishes, unpublishes or edits the page. They do not change by themselves when a date passes. See Publish at a future date below. Each version has these actions. Action What it does Save Saves the Publish from and Publish to dates you have entered for that version. Publish Makes that version live now, with no end date. It ignores the date fields. Unpublish Shown on the live version. Takes it off the site. View Opens that version in a new tab so you can read it. Publish at a future date Finish your draft. Every change you make in the editor is saved as you make it. Open the Versions tab. On your draft's row, enter the date and time in Publish from . Select Save on that row. Its status changes to Scheduled . From that time, anyone who goes to the page's address sees the new version. You do not need to be signed in. The rest of the service does not catch up by itself. Until someone next publishes or edits the page, the Versions tab still shows the old version as Live , and search still finds the page by its old text. A page that had no live version before stays out of search and menus. Once the time has passed, open the Versions tab and select Publish on the new version to bring everything into line. ! Warning Do not select Publish on a version you mean to schedule. Publish always means now, whatever dates are in the fields. Times are in UTC, not UK time. From late March to late October the UK is one hour ahead of UTC, so for a page to go live at 9am UK time in summer, enter 08:00. In winter the two are the same. Take a page down at a set time Enter a date and time in Publish to on the live version's row and select Save . From that time, the page's address stops showing that version. What visitors see instead depends on the other versions. If an earlier version was published and has no Publish to date, that version is shown again. If there is none, visitors see the Page not found page. Use this for content with an end date, such as a notice about a checking exercise. As with scheduling, the rest of the service does not catch up by itself. After the time has passed, the page is still listed in menus and search, and the Versions tab still shows the version as Live . Select Unpublish to finish the job. Take a page down now Select Unpublish , either under the content or on the live version's row. That version comes off the site at once. Nothing is deleted: every version is still on the Versions tab and you can publish again at any time. ! Warning Unpublishing removes one version, not the page. If an earlier version was published and has no Publish to date, it becomes the live version again. Look at the Versions tab afterwards. If a version is still Live , select Unpublish on it too, and repeat until none is. Go back to an earlier version Find the version you want on the Versions tab, check it with View , then select Publish on its row. It becomes the live page again. The version it replaces stays in the history, so you can change your mind. Going back changes what visitors see. It does not change what the editor holds: the Content tab still shows your newest content, and your next change starts from that. Good to know You cannot compare two versions side by side. Open each with View in its own tab. Version numbers are whole numbers and only ever go up. A page with no live version is never in search results. A draft cannot be thrown away. To abandon one, leave it unpublished and edit it back to what you want. Every change to a version is recorded in the audit log, with who made it." } @@ -158,7 +158,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Some pages of the service are not CMS pages. The home page, the contact page, the footer and the pages of the request journey are built into the service, and their layout is fixed. The words on them are held in content blocks, which you can edit.

A content block is one piece of text with a name, called its key. For example, home-content is the main text of the home page.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Blocks you are likely to edit\"},\"anchor\":\"blocks-you-are-likely-to-edit\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
KeyWhere it appears
home-title, home-contentThe home page
contact-title, contact-intro, contact-highlightThe Contact us page. The highlight is hidden from visitors while it is empty.
privacyThe Privacy page
accessibilityThe Accessibility statement
footer-support-and-guidance-v2The Support and guidance text in the footer of every public page

The pages of the request journey have blocks of their own. The Content blocks screen lists them all.

!WarningA content block has no draft. When you select Save, the change is live at once, on every page that shows the block. Read it through before you save.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Edit a block on the page where it appears\"},\"anchor\":\"edit-a-block-on-the-page-where-it-appears\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

This is the quickest way, because you see the text in place.

  1. Sign in as an editor and go to the page.
  2. Move your pointer over the text. A small pencil appears beside each block.
  3. Select the pencil. The block opens for editing where it sits.
  4. Make your change and select Save.
\\\"The
The pencil beside a content block on the home page.
\\\"The
Editing the block without leaving the page.

The pencils are shown to people with the content editor role. If you cannot see them, use the Content blocks screen instead.

!WarningSaving a block with the pencil clears its Search keywords and ticks Appear in search again. If the block has either set, edit it from the Content blocks screen instead, or set them again there afterwards.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Edit a block from the Content blocks screen\"},\"anchor\":\"edit-a-block-from-the-content-blocks-screen\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, then Content blocks. Use this when you want to find a block by its words, or change several blocks in one sitting.

\\\"The
The Content blocks screen.

Select Edit on a block's row. The form opens in the list.

\\\"A
Editing a block in the list.

As well as the text, you can set:

Select Save, or Cancel to leave the block as it was.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Go back to an earlier version of a block\"},\"anchor\":\"go-back-to-an-earlier-version-of-a-block\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Every save is kept. Select Version history in a block's edit form.

\\\"The
The version history of a block.

Select a row to read that version. Select Revert on the one you want and confirm with Yes, revert. That version becomes the live text straight away. A revert is saved as a new version, so you can undo it in the same way.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Where blocks come from\"},\"anchor\":\"where-blocks-come-from\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

You cannot create or delete a content block. Each one is made by the service the first time someone visits the page it belongs to, starting with the default text. After a release that adds a new block, it appears in the list once its page has been visited.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Content block or page?\"},\"anchor\":\"content-block-or-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
Use a content block whenUse a page when
The text is on a page built into the service, such as the home pageYou are adding guidance, help or reference content
A pencil appears beside itYou want to control the layout
The same text shows on every page, like the footerYou want to work on a draft, or publish on a date
\"}}]]}]", "bodyPlainText": "Some pages of the service are not CMS pages. The home page, the contact page, the footer and the pages of the request journey are built into the service, and their layout is fixed. The words on them are held in content blocks , which you can edit. A content block is one piece of text with a name, called its key . For example, home-content is the main text of the home page. Blocks you are likely to edit Key Where it appears home-title , home-content The home page contact-title , contact-intro , contact-highlight The Contact us page. The highlight is hidden from visitors while it is empty. privacy The Privacy page accessibility The Accessibility statement footer-support-and-guidance-v2 The Support and guidance text in the footer of every public page The pages of the request journey have blocks of their own. The Content blocks screen lists them all. ! Warning A content block has no draft. When you select Save , the change is live at once, on every page that shows the block. Read it through before you save. Edit a block on the page where it appears This is the quickest way, because you see the text in place. Sign in as an editor and go to the page. Move your pointer over the text. A small pencil appears beside each block. Select the pencil. The block opens for editing where it sits. Make your change and select Save . The pencil beside a content block on the home page. Editing the block without leaving the page. The pencils are shown to people with the content editor role. If you cannot see them, use the Content blocks screen instead. ! Warning Saving a block with the pencil clears its Search keywords and ticks Appear in search again. If the block has either set, edit it from the Content blocks screen instead, or set them again there afterwards. Edit a block from the Content blocks screen Go to Admin , then Content blocks . Use this when you want to find a block by its words, or change several blocks in one sitting. The Content blocks screen. Type in Filter to search by key, page or the words in the block. Select a column heading to sort by it. The On page column shows where the block was last displayed. Not seen yet means nobody has visited its page since the block was added. To see only the blocks on one page, choose that page in the menu on the left. Select Edit on a block's row. The form opens in the list. Editing a block in the list. As well as the text, you can set: Appear in search : untick to keep the block out of search results. It still shows on its page. Search keywords : extra words the block should be found for, separated by spaces. Select Save , or Cancel to leave the block as it was. Go back to an earlier version of a block Every save is kept. Select Version history in a block's edit form. The version history of a block. Select a row to read that version. Select Revert on the one you want and confirm with Yes, revert . That version becomes the live text straight away. A revert is saved as a new version, so you can undo it in the same way. Where blocks come from You cannot create or delete a content block. Each one is made by the service the first time someone visits the page it belongs to, starting with the default text. After a release that adds a new block, it appears in the list once its page has been visited. Content block or page? Use a content block when Use a page when The text is on a page built into the service, such as the home page You are adding guidance, help or reference content A pencil appears beside it You want to control the layout The same text shows on every page, like the footer You want to work on a draft, or publish on a date" } @@ -178,7 +178,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The start page can show one or more blue Important banners above its heading, for news\\nsuch as new rules, a known problem or an extended deadline. You manage them from\\nCMS administration > Home page banners.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Create a banner\"},\"anchor\":\"create-a-banner\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
  1. Select Create a banner.
  2. Enter a heading (plain text, up to 200 characters) and the banner text. Links and\\nlists are allowed. Keep it to a sentence or two.
  3. Tick Show this banner when it is ready. Leave it unticked while you draft.
  4. Optionally enter Show from and Show until dates and times, in UK time. Leave a\\ndate blank for no limit.
  5. Select Save banner.

A banner is on the start page only while it is ticked and within its dates. "Show from"\\nincludes the minute you enter; "Show until" does not.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Order, status and preview\"},\"anchor\":\"order-status-and-preview\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The list shows banners in the order they appear on the start page. Use Move up and\\nMove down to change it. Each banner shows a status: Live, Scheduled (not yet\\ndue), Expired (past its end) or Off. Preview shows a banner as schools will\\nsee it, whatever its status.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Versions\"},\"anchor\":\"versions\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Every save makes a new version. Open Version history to see them and to Restore an\\nearlier one. Restoring makes a copy of that version the newest; nothing is lost.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Delete a banner\"},\"anchor\":\"delete-a-banner\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Delete asks you to confirm and cannot be undone. To hide a banner for a while, untick\\nShow this banner instead.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Moving banners between environments\"},\"anchor\":\"moving-banners-between-environments\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Banners go in the content staging export and import with their versions, under\\nHome page banners on the selection page.

\"}}]]}]", "bodyPlainText": "The start page can show one or more blue Important banners above its heading, for news such as new rules, a known problem or an extended deadline. You manage them from CMS administration > Home page banners . Create a banner Select Create a banner . Enter a heading (plain text, up to 200 characters) and the banner text . Links and lists are allowed. Keep it to a sentence or two. Tick Show this banner when it is ready. Leave it unticked while you draft. Optionally enter Show from and Show until dates and times, in UK time. Leave a date blank for no limit. Select Save banner . A banner is on the start page only while it is ticked and within its dates. \"Show from\" includes the minute you enter; \"Show until\" does not. Order, status and preview The list shows banners in the order they appear on the start page. Use Move up and Move down to change it. Each banner shows a status: Live , Scheduled (not yet due), Expired (past its end) or Off . Preview shows a banner as schools will see it, whatever its status. Versions Every save makes a new version. Open Version history to see them and to Restore an earlier one. Restoring makes a copy of that version the newest; nothing is lost. Delete a banner Delete asks you to confirm and cannot be undone. To hide a banner for a while, untick Show this banner instead. Moving banners between environments Banners go in the content staging export and import with their versions, under Home page banners on the selection page." } @@ -198,9 +198,9 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", - "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Visitors can search every published page, and the content blocks on the home page, the Check your pupil data page, Guidance and CMS pages. As an editor you control 2 things: where search boxes appear and what they search, and how easily your own pages are found.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"How search works\"},\"anchor\":\"how-search-works\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The search page is at /search. It looks through pages and content blocks together and lists the best matches first.

\\\"The
Search results. The words searched for are highlighted.

What decides the order, strongest first:

  1. the page's Search keywords
  2. its title
  3. its subtitle
  4. the text of the page

Search understands word endings, so check also finds checking and checked. It ignores very common words such as the and of.

Search leaves out:

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Tips to pass on to visitors\"},\"anchor\":\"tips-to-pass-on-to-visitors\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
To findType
Pages with any of these words. Pages with more of them come first.autumn exercise
An exact phrase"checking exercise" in double quotation marks
Either of two wordsamend OR change
One word but not anotherexercise -autumn

A search needs at least 2 characters.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Add a search box to a page\"},\"anchor\":\"add-a-search-box-to-a-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Add a Search widget, then choose what it searches with Search in.

\\\"A
The Search widget, set to search chosen pages.
Search inWhat it searchesUse it for
The whole siteEverythingA general search box, for example on a landing page
Chosen pagesThe pages you tick, and every page beneath each oneSearching one section, or several sections together
This pageOnly the page the box is onHelping people find a section of one long page

With Chosen pages, tick the pages under Pages to search. Ticking a page includes everything beneath it, so tick Guidance to search all the guidance. Tick several to search them as a group.

The box remembers the pages themselves, not their addresses. If someone later renames or moves a page you ticked, the search box keeps working.

The other settings:

SettingWhat it does
LabelThe text above the box. Say what it searches, such as Search the guidance.
Placeholder (optional)Pale example text inside the box.
Button textThe text on the button.
Put the button below the search boxTick this when the box is in a narrow column. A button beside the box would leave little room to type.
Form action URLThe page that shows the results. Leave it as /search unless you have built a results page of your own.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Show matches as people type: instant search\"},\"anchor\":\"show-matches-as-people-type-instant-search\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Tick Instant search and the box suggests matches while the visitor is still typing. Choosing a suggestion takes them straight there.

\\\"A
Instant search on one page: the suggestions are the page's own sections.

What a suggestion does depends on Search in:

Two more settings appear when Instant search is ticked.

SettingWhat it does
Show search buttonUntick to show the box alone. Visitors then press Enter to see the full list of results.
No-results textWhat the list says when nothing matches. It starts as No results found.

Instant search needs JavaScript. Without it the box still works as an ordinary search box, so nobody is locked out. A box set to This page then searches the page and the pages beneath it.

The search box at the top of this guide is a Search widget set to Chosen pages, with this guide ticked and Instant search on. The one in the left-hand column of this page is the same, with Put the button below the search box ticked.

\\\"The
Instant search of chosen pages: the suggestions are pages.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Build your own results page\"},\"anchor\":\"build-your-own-results-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

For most pages the standard results page is all you need. Build your own when you want results to appear inside a section, with that section's menu and wording around them.

  1. Create a page, for example guidance/search.
  2. Add a Search results widget. Tick the sections it should show results from, or leave everything unticked for the whole site.
  3. On the page with the search box, set the Search widget's Form action URL to the address of your results page, for example /guidance/search.

The number of results on a page is 20 unless an administrator changes the CMS:PageLength setting.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Make your page easy to find\"},\"anchor\":\"make-your-page-easy-to-find\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"When someone cannot find what they need\"},\"anchor\":\"when-someone-cannot-find-what-they-need\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Under the results on the search page at /search is the link Not the results you were expecting? Send us a note. A results page you have built yourself does not have it. It opens a short form that asks what the person was looking for and what they got instead.

\\\"The
The form a visitor fills in when search lets them down.

The notes go to administrators, along with figures for every search that found nothing. Both are a list of content waiting to be written. See Search analytics and feedback.

\"}}]]}]", - "bodyPlainText": "Visitors can search every published page, and the content blocks on the home page, the Check your pupil data page, Guidance and CMS pages. As an editor you control 2 things: where search boxes appear and what they search, and how easily your own pages are found. How search works The search page is at /search . It looks through pages and content blocks together and lists the best matches first. Search results. The words searched for are highlighted. What decides the order, strongest first: the page's Search keywords its title its subtitle the text of the page Search understands word endings, so check also finds checking and checked . It ignores very common words such as the and of . Search leaves out: pages that are not published folders pages and content blocks with Appear in search unticked Tips to pass on to visitors To find Type Pages with any of these words. Pages with more of them come first. autumn exercise An exact phrase \"checking exercise\" in double quotation marks Either of two words amend OR change One word but not another exercise -autumn A search needs at least 2 characters. Add a search box to a page Add a Search widget, then choose what it searches with Search in . The Search widget, set to search chosen pages. Search in What it searches Use it for The whole site Everything A general search box, for example on a landing page Chosen pages The pages you tick, and every page beneath each one Searching one section, or several sections together This page Only the page the box is on Helping people find a section of one long page With Chosen pages , tick the pages under Pages to search . Ticking a page includes everything beneath it, so tick Guidance to search all the guidance. Tick several to search them as a group. The box remembers the pages themselves, not their addresses. If someone later renames or moves a page you ticked, the search box keeps working. The other settings: Setting What it does Label The text above the box. Say what it searches, such as Search the guidance . Placeholder (optional) Pale example text inside the box. Button text The text on the button. Put the button below the search box Tick this when the box is in a narrow column. A button beside the box would leave little room to type. Form action URL The page that shows the results. Leave it as /search unless you have built a results page of your own. Show matches as people type: instant search Tick Instant search and the box suggests matches while the visitor is still typing. Choosing a suggestion takes them straight there. Instant search on one page: the suggestions are the page's own sections. What a suggestion does depends on Search in : This page : the suggestions are sections of the page. Choosing one jumps to that section and highlights the words searched for. The whole site or Chosen pages : the suggestions are pages, up to 10. Choosing one opens that page. Two more settings appear when Instant search is ticked. Setting What it does Show search button Untick to show the box alone. Visitors then press Enter to see the full list of results. No-results text What the list says when nothing matches. It starts as No results found . Instant search needs JavaScript. Without it the box still works as an ordinary search box, so nobody is locked out. A box set to This page then searches the page and the pages beneath it. The search box at the top of this guide is a Search widget set to Chosen pages , with this guide ticked and Instant search on. The one in the left-hand column of this page is the same, with Put the button below the search box ticked. Instant search of chosen pages: the suggestions are pages. Build your own results page For most pages the standard results page is all you need. Build your own when you want results to appear inside a section, with that section's menu and wording around them. Create a page, for example guidance/search . Add a Search results widget. Tick the sections it should show results from, or leave everything unticked for the whole site. On the page with the search box, set the Search widget's Form action URL to the address of your results page, for example /guidance/search . The number of results on a page is 20 unless an administrator changes the CMS:PageLength setting. Make your page easy to find Put the words people use in the title. The title counts for more than the text. Add search keywords for other names, abbreviations and common misspellings. See Page properties . Use headings. They let instant search take people to the right part of a long page. Check it. Search for the words you expect people to type. If your page is not near the top, add keywords. When someone cannot find what they need Under the results on the search page at /search is the link Not the results you were expecting? Send us a note . A results page you have built yourself does not have it. It opens a short form that asks what the person was looking for and what they got instead. The form a visitor fills in when search lets them down. The notes go to administrators, along with figures for every search that found nothing. Both are a list of content waiting to be written. See Search analytics and feedback ." + "publishFrom": "2026-10-19T11:41:50Z", + "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-editors\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For editors

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Visitors can search every published page, and the content blocks on the home page, the Check your pupil data page, Guidance and CMS pages. As an editor you control 2 things: where search boxes appear and what they search, and how easily your own pages are found.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"How search works\"},\"anchor\":\"how-search-works\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The search page is at /search. It looks through pages and content blocks together and lists the best matches first.

\\\"The
Search results. The words searched for are highlighted.

What decides the order, strongest first:

  1. the page's Search keywords
  2. its title
  3. its subtitle
  4. the text of the page

Search understands word endings, so check also finds checking and checked. It ignores very common words such as the and of.

Search leaves out:

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Tips to pass on to visitors\"},\"anchor\":\"tips-to-pass-on-to-visitors\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
To findType
Pages with any of these words. Pages with more of them come first.autumn exercise
An exact phrase"checking exercise" in double quotation marks
Either of two wordsamend OR change
One word but not anotherexercise -autumn

A search needs at least 2 characters.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Add a search box to a page\"},\"anchor\":\"add-a-search-box-to-a-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Add a Search widget, then choose what it searches with Search in.

\\\"A
The Search widget, set to search chosen pages.
Search inWhat it searchesUse it for
The whole siteEverythingA general search box, for example on a landing page
Chosen pagesThe pages you tick, and every page beneath each oneSearching one section, or several sections together
This pageOnly the page the box is onHelping people find a section of one long page

With Chosen pages, tick the pages under Pages to search. Ticking a page includes everything beneath it, so tick Guidance to search all the guidance. Tick several to search them as a group.

The box remembers the pages themselves, not their addresses. If someone later renames or moves a page you ticked, the search box keeps working.

The other settings:

SettingWhat it does
LabelThe text above the box. Say what it searches, such as Search the guidance.
Placeholder (optional)Pale example text inside the box.
Button textThe text on the button.
Put the button below the search boxTick this when the box is in a narrow column. A button beside the box would leave little room to type.
Show a clear button in the search boxAdds a cross at the end of the box. It appears once the visitor has typed something, and pressing it empties the box so they can start again.
Form action URLThe page that shows the results. Leave it as /search unless you have built a results page of your own.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Show matches as people type: instant search\"},\"anchor\":\"show-matches-as-people-type-instant-search\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Tick Instant search and the box suggests matches while the visitor is still typing. Choosing a suggestion takes them straight there.

\\\"A
Instant search on one page: the suggestions are the page's own sections.

What a suggestion does depends on Search in:

Two more settings appear when Instant search is ticked.

SettingWhat it does
Show search buttonUntick to show the box alone. Visitors then press Enter to see the full list of results.
No-results textWhat the list says when nothing matches. It starts as No results found.

Instant search needs JavaScript. Without it the box still works as an ordinary search box, so nobody is locked out. A box set to This page then searches the page and the pages beneath it.

The search box at the top of this guide is a Search widget set to Chosen pages, with this guide ticked and Instant search on. The one in the left-hand column of this page is the same, with Put the button below the search box ticked.

\\\"The
Instant search of chosen pages: the suggestions are pages.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Build your own results page\"},\"anchor\":\"build-your-own-results-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

For most pages the standard results page is all you need. Build your own when you want results to appear inside a section, with that section's menu and wording around them.

  1. Create a page, for example guidance/search.
  2. Add a Search results widget. Tick the sections it should show results from, or leave everything unticked for the whole site.
  3. On the page with the search box, set the Search widget's Form action URL to the address of your results page, for example /guidance/search.

The number of results on a page is 20 unless an administrator changes the CMS:PageLength setting.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Make your page easy to find\"},\"anchor\":\"make-your-page-easy-to-find\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"When someone cannot find what they need\"},\"anchor\":\"when-someone-cannot-find-what-they-need\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Under the results on the search page at /search is the link Not the results you were expecting? Send us a note. A results page you have built yourself does not have it. It opens a short form that asks what the person was looking for and what they got instead.

\\\"The
The form a visitor fills in when search lets them down.

The notes go to administrators, along with figures for every search that found nothing. Both are a list of content waiting to be written. See Search analytics and feedback.

\"}}]]}]", + "bodyPlainText": "Visitors can search every published page, and the content blocks on the home page, the Check your pupil data page, Guidance and CMS pages. As an editor you control 2 things: where search boxes appear and what they search, and how easily your own pages are found. How search works The search page is at /search . It looks through pages and content blocks together and lists the best matches first. Search results. The words searched for are highlighted. What decides the order, strongest first: the page's Search keywords its title its subtitle the text of the page Search understands word endings, so check also finds checking and checked . It ignores very common words such as the and of . Search leaves out: pages that are not published folders pages and content blocks with Appear in search unticked Tips to pass on to visitors To find Type Pages with any of these words. Pages with more of them come first. autumn exercise An exact phrase \"checking exercise\" in double quotation marks Either of two words amend OR change One word but not another exercise -autumn A search needs at least 2 characters. Add a search box to a page Add a Search widget, then choose what it searches with Search in . The Search widget, set to search chosen pages. Search in What it searches Use it for The whole site Everything A general search box, for example on a landing page Chosen pages The pages you tick, and every page beneath each one Searching one section, or several sections together This page Only the page the box is on Helping people find a section of one long page With Chosen pages , tick the pages under Pages to search . Ticking a page includes everything beneath it, so tick Guidance to search all the guidance. Tick several to search them as a group. The box remembers the pages themselves, not their addresses. If someone later renames or moves a page you ticked, the search box keeps working. The other settings: Setting What it does Label The text above the box. Say what it searches, such as Search the guidance . Placeholder (optional) Pale example text inside the box. Button text The text on the button. Put the button below the search box Tick this when the box is in a narrow column. A button beside the box would leave little room to type. Show a clear button in the search box Adds a cross at the end of the box. It appears once the visitor has typed something, and pressing it empties the box so they can start again. Form action URL The page that shows the results. Leave it as /search unless you have built a results page of your own. Show matches as people type: instant search Tick Instant search and the box suggests matches while the visitor is still typing. Choosing a suggestion takes them straight there. Instant search on one page: the suggestions are the page's own sections. What a suggestion does depends on Search in : This page : the suggestions are sections of the page. Choosing one jumps to that section and highlights the words searched for. The whole site or Chosen pages : the suggestions are pages, up to 10. Choosing one opens that page. Two more settings appear when Instant search is ticked. Setting What it does Show search button Untick to show the box alone. Visitors then press Enter to see the full list of results. No-results text What the list says when nothing matches. It starts as No results found . Instant search needs JavaScript. Without it the box still works as an ordinary search box, so nobody is locked out. A box set to This page then searches the page and the pages beneath it. The search box at the top of this guide is a Search widget set to Chosen pages , with this guide ticked and Instant search on. The one in the left-hand column of this page is the same, with Put the button below the search box ticked. Instant search of chosen pages: the suggestions are pages. Build your own results page For most pages the standard results page is all you need. Build your own when you want results to appear inside a section, with that section's menu and wording around them. Create a page, for example guidance/search . Add a Search results widget. Tick the sections it should show results from, or leave everything unticked for the whole site. On the page with the search box, set the Search widget's Form action URL to the address of your results page, for example /guidance/search . The number of results on a page is 20 unless an administrator changes the CMS:PageLength setting. Make your page easy to find Put the words people use in the title. The title counts for more than the text. Add search keywords for other names, abbreviations and common misspellings. See Page properties . Use headings. They let instant search take people to the right part of a long page. Check it. Search for the words you expect people to type. If your page is not near the top, add keywords. When someone cannot find what they need Under the results on the search page at /search is the link Not the results you were expecting? Send us a note . A results page you have built yourself does not have it. It opens a short form that asks what the person was looking for and what they got instead. The form a visitor fills in when search lets them down. The notes go to administrators, along with figures for every search that found nothing. Both are a list of content waiting to be written. See Search analytics and feedback ." } ] }, @@ -218,7 +218,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to How to use the CMS

\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Administrators can use every tool an editor can. These pages cover the rest: the shape of the site, moving content between environments, what people search for, and who has access.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The Administration page\"},\"anchor\":\"the-administration-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select Admin in the header. The Administration page lists every tool your role can use, in groups. The same groups are in the menu on the left of every admin screen.

The CMS tools are in the CMS administration group.

ToolWhat it is forEditors have it
PagesCreate, edit, move, copy and delete pagesYes
Content blocksEdit the text of the fixed pagesYes
Deleted pagesRestore a page that was deletedYes
Content staging import/exportMove content between environmentsYes
Search analyticsSee what people search for and cannot findNo

Other tools that affect the CMS are in other groups: System settings, Role settings, Site CSS and JavaScript and View logs under System administration, Search feedback under Messages, and the Audit log.

"Editors have it" is the starting position. You can change it on the Role settings screen.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"In this section\"},\"anchor\":\"in-this-section\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
PageWhat it covers
Organise the page treeMoving, reordering, copying, deleting and restoring pages
Move content between environmentsExporting and importing with Content staging
Search analytics and feedbackWhat people search for, what they cannot find, and what they tell you
Roles and accessWho can use which part of the admin area
CMS settings and site stylingSettings that change how the CMS behaves, and custom CSS and JavaScript
Logs and the audit logFinding out what happened and who did it
The full admin user guideEverything in the admin area that is not the CMS
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"A routine worth keeping\"},\"anchor\":\"a-routine-worth-keeping\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Once a month, or after any busy period:

  1. Open Search analytics and read the top searches that found nothing. Each one is a page to write or a keyword to add.
  2. Read new Search feedback and mark each note as read once someone has dealt with it.
  3. Look through Deleted pages for anything deleted by mistake.
  4. Check Role settings still matches who should have access.
\"}}]]}]", "bodyPlainText": "Administrators can use every tool an editor can. These pages cover the rest: the shape of the site, moving content between environments, what people search for, and who has access. The Administration page Select Admin in the header. The Administration page lists every tool your role can use, in groups. The same groups are in the menu on the left of every admin screen. The CMS tools are in the CMS administration group. Tool What it is for Editors have it Pages Create, edit, move, copy and delete pages Yes Content blocks Edit the text of the fixed pages Yes Deleted pages Restore a page that was deleted Yes Content staging import/export Move content between environments Yes Search analytics See what people search for and cannot find No Other tools that affect the CMS are in other groups: System settings , Role settings , Site CSS and JavaScript and View logs under System administration , Search feedback under Messages , and the Audit log . \"Editors have it\" is the starting position. You can change it on the Role settings screen. In this section Page What it covers Organise the page tree Moving, reordering, copying, deleting and restoring pages Move content between environments Exporting and importing with Content staging Search analytics and feedback What people search for, what they cannot find, and what they tell you Roles and access Who can use which part of the admin area CMS settings and site styling Settings that change how the CMS behaves, and custom CSS and JavaScript Logs and the audit log Finding out what happened and who did it The full admin user guide Everything in the admin area that is not the CMS A routine worth keeping Once a month, or after any busy period: Open Search analytics and read the top searches that found nothing. Each one is a page to write or a keyword to add. Read new Search feedback and mark each note as read once someone has dealt with it. Look through Deleted pages for anything deleted by mistake. Check Role settings still matches who should have access." } @@ -238,7 +238,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The pages of the site form a tree. Where a page sits in the tree decides its address and where it appears in menus. Editors and administrators can both reorganise it.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The Pages screen\"},\"anchor\":\"the-pages-screen\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, then Pages. The screen shows the pages at one level. Select a title to go down a level, and use the breadcrumb at the top to come back up.

\\\"The
Each row has the same icon buttons. Hold your pointer over one to see its name.

The icons, from left to right:

IconNameWhat it does
PencilEditOpens the page in the editor
ClockVersionsOpens the page in the editor. Select the Versions tab.
PlusAdd child pageCreates a page beneath this one
Up arrowMove upMoves the page one place earlier among the pages beside it
Down arrowMove downMoves it one place later
Two sheetsCopyMakes a copy beside the original
BinDeleteOpens the delete confirmation
Arrow leaving a boxViewOpens the page as visitors see it

To find a page at the level you are on, type part of its title or URL segment in Search pages in this section and select Search.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The tree in the menu\"},\"anchor\":\"the-tree-in-the-menu\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On every admin screen, the Pages entry in the menu on the left opens into the whole site as a tree. Select the plus beside a page to open it. The tree opens by itself to the page you are working on.

\\\"The
The site tree in the admin menu.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Move a page by dragging\"},\"anchor\":\"move-a-page-by-dragging\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

In the tree, drag a page to its new place. A green slot opens to show where it will land.

\\\"A
The green slot shows where the page will go.

When you let go, the page moves at once and the screen shows it in its new place.

!WarningMoving a page beneath a different parent changes its address, and the address of every page beneath it. Links to the old addresses stop working and are not redirected. Reordering pages under the same parent changes nothing but the order.
MessageWhat it means
Cannot move a page under itself.You dropped a page onto one of the pages beneath it.
Another page already exists at the target URL.The new parent already has a page with the same URL segment. Rename one of them first.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The right-click menu\"},\"anchor\":\"the-right-click-menu\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Press the right mouse button on any page in the tree for the same actions as the icons.

\\\"The
The right-click menu.

Press Esc to close the menu. Dragging and the right-click menu need JavaScript. Without it, use the icons on the Pages screen.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Change the order of pages\"},\"anchor\":\"change-the-order-of-pages\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The order of pages in the tree is the order they appear in menus on the public site. Change it with Move up and Move down, or by dragging.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Copy a page\"},\"anchor\":\"copy-a-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select Copy. The copy is added after the last page at the same level, with -copy added to its address. A copy of a content page opens on its Properties tab so that you can give it a proper title and address.

A copy takes every version of the original with it, publishing dates included, so a copy of a published page is published at once. Open its Versions tab and select Unpublish if it should not be. The pages beneath the original are not copied.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Delete a page\"},\"anchor\":\"delete-a-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Select Delete and confirm with Delete page.

\\\"The
The delete confirmation.

The page disappears from the site, from menus and from search.

You cannot delete a page that has pages beneath it. The screen says This page has child pages. Remove or move the child pages before deleting this page. Move or delete those first.

The confirmation says This action cannot be undone. In fact the page is kept, with all its versions, on the Deleted pages screen. Treat that as a safety net, not as a place to keep things.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Restore a deleted page\"},\"anchor\":\"restore-a-deleted-page\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, then Deleted pages.

\\\"The
The Deleted pages screen.

Each deleted page is listed with its path, who deleted it and when. Select Restore to bring the page back at the address it had, with its content and versions. The screen confirms with Page restored. Check first that the page it sat beneath still exists and that nothing new has been created at its address.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The sections the service creates\"},\"anchor\":\"the-sections-the-service-creates\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Support, Wiki, Help and Guidance are created by the service when it starts, along with the Page not found page at /help/not-found. If you delete one by mistake, restore it from Deleted pages.

The Page not found page is an ordinary page. Edit it to change what visitors see when they follow a link that goes nowhere.

\"}}]]}]", "bodyPlainText": "The pages of the site form a tree. Where a page sits in the tree decides its address and where it appears in menus. Editors and administrators can both reorganise it. The Pages screen Go to Admin , then Pages . The screen shows the pages at one level. Select a title to go down a level, and use the breadcrumb at the top to come back up. Each row has the same icon buttons. Hold your pointer over one to see its name. The icons, from left to right: Icon Name What it does Pencil Edit Opens the page in the editor Clock Versions Opens the page in the editor. Select the Versions tab. Plus Add child page Creates a page beneath this one Up arrow Move up Moves the page one place earlier among the pages beside it Down arrow Move down Moves it one place later Two sheets Copy Makes a copy beside the original Bin Delete Opens the delete confirmation Arrow leaving a box View Opens the page as visitors see it To find a page at the level you are on, type part of its title or URL segment in Search pages in this section and select Search . The tree in the menu On every admin screen, the Pages entry in the menu on the left opens into the whole site as a tree. Select the plus beside a page to open it. The tree opens by itself to the page you are working on. The site tree in the admin menu. Move a page by dragging In the tree, drag a page to its new place. A green slot opens to show where it will land. The green slot shows where the page will go. Drop it above or below another page to put it beside that page. Drop it onto another page to put it beneath that page. When you let go, the page moves at once and the screen shows it in its new place. ! Warning Moving a page beneath a different parent changes its address, and the address of every page beneath it. Links to the old addresses stop working and are not redirected. Reordering pages under the same parent changes nothing but the order. Message What it means Cannot move a page under itself. You dropped a page onto one of the pages beneath it. Another page already exists at the target URL. The new parent already has a page with the same URL segment. Rename one of them first. The right-click menu Press the right mouse button on any page in the tree for the same actions as the icons. The right-click menu. Press Esc to close the menu. Dragging and the right-click menu need JavaScript. Without it, use the icons on the Pages screen. Change the order of pages The order of pages in the tree is the order they appear in menus on the public site. Change it with Move up and Move down , or by dragging. Copy a page Select Copy . The copy is added after the last page at the same level, with -copy added to its address. A copy of a content page opens on its Properties tab so that you can give it a proper title and address. A copy takes every version of the original with it, publishing dates included, so a copy of a published page is published at once. Open its Versions tab and select Unpublish if it should not be. The pages beneath the original are not copied. Delete a page Select Delete and confirm with Delete page . The delete confirmation. The page disappears from the site, from menus and from search. You cannot delete a page that has pages beneath it. The screen says This page has child pages. Remove or move the child pages before deleting this page. Move or delete those first. The confirmation says This action cannot be undone . In fact the page is kept, with all its versions, on the Deleted pages screen. Treat that as a safety net, not as a place to keep things. Restore a deleted page Go to Admin , then Deleted pages . The Deleted pages screen. Each deleted page is listed with its path, who deleted it and when. Select Restore to bring the page back at the address it had, with its content and versions. The screen confirms with Page restored. Check first that the page it sat beneath still exists and that nothing new has been created at its address. The sections the service creates Support, Wiki, Help and Guidance are created by the service when it starts, along with the Page not found page at /help/not-found . If you delete one by mistake, restore it from Deleted pages . The Page not found page is an ordinary page. Edit it to change what visitors see when they follow a link that goes nowhere." } @@ -258,7 +258,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Content staging copies pages, content blocks and home page banners from one environment to another. The usual use is to write and check content in a test environment, then bring it into production.

You export a file from the first environment and import it into the second. Go to Admin, then Content staging import/export.

\\\"The
The Content staging screen: export at the top, import below.
\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Export\"},\"anchor\":\"export\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Export everything downloads every page, content block and home page banner as one zip file.

Choose what to export lets you pick. Tick the pages, content blocks and home page banners you want, then select Export selected.

\\\"The
Filter the list, then tick what you want.

Each page is exported with its live version and its 5 most recent versions. Tick Include full version history to export every version. Only do this when you are moving a whole environment: the file can be many times larger.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Import\"},\"anchor\":\"import\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

An import has 2 steps, and the first changes nothing.

  1. Under Content bundle file, choose the zip file you exported.
  2. Select Preview import.
\\\"The
The Review import screen. Nothing has changed yet.

The Review import screen tells you how many items are new, how many are already in this environment, and how many cannot be imported. Now decide what happens to each.

Default for new items

ChoiceWhat happens
IncludeNew pages and blocks are added.
SkipThey are left out, unless you choose Include for an item yourself.

Default for items already in this environment

ChoiceWhat happens
SkipWhat is here is kept. The version in the file is ignored.
OverwriteWhat is here is replaced by the version in the file.
FailThe import stops if anything in the file is already here.

Each item in the tables below also has its own choice, which starts as Use default. Change it to treat that one item differently.

  1. Select Confirm import, or Cancel to leave without importing.
\\\"A
The summary after an import.
!WarningOverwrite replaces a page's content and its whole version history with what is in the file. Anything written in this environment since the export is lost. If in doubt, export this environment first, so you have a copy to go back to.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"How items are matched\"},\"anchor\":\"how-items-are-matched\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Every page and block carries a hidden identity that stays the same in every environment. An import matches on that, not on the title or address. So if a page was renamed in the first environment, importing it updates the same page here instead of adding a second one.

If nothing matches by identity, the import looks for a page at the same address, or a block with the same key, and treats that as the match.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Items that cannot be imported\"},\"anchor\":\"items-that-cannot-be-imported\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The Review import screen lists these under These items cannot be imported, each with the reason. The rest of the file is still imported. An item cannot be imported when:

The summary after the import lists the same items again.

A URL segment with capital letters is the one mistake the import puts right. It imports the page with the segment in lowercase, and says so on the Review import screen and in the summary. If the lowercase address is already used by another page, the page is not imported.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Safety\"},\"anchor\":\"safety\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"A safe way to release content\"},\"anchor\":\"a-safe-way-to-release-content\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
  1. Write and publish the content in the test environment and check it there.
  2. Export only what you changed, with Choose what to export.
  3. In production, export what is there first and keep the file.
  4. Import with Overwrite only for the pages you mean to replace. Leave the default as Skip.
  5. Check the pages in production.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Pages the service imports by itself\"},\"anchor\":\"pages-the-service-imports-by-itself\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Some pages are supplied with the service and imported automatically when it starts, with no one using this screen. This guide is one example. A newer release overwrites them, so changes made to them in an environment do not last.

You can tell them apart in the editor: a warning under the page title says This page is supplied with the service. To change one for good, ask the development team, so that every environment gets the change.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Clear all CMS content\"},\"anchor\":\"clear-all-cms-content\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Development environments can show a Clear all CMS content button on this screen. It deletes every page, content block and home page banner and cannot be undone. It is for resetting a test environment.

It appears only when an administrator has turned on the CMS:ShowDeleteAllButton setting, and never in QA, preproduction or production, whatever the setting says.

\"}}]]}]", "bodyPlainText": "Content staging copies pages, content blocks and home page banners from one environment to another. The usual use is to write and check content in a test environment, then bring it into production. You export a file from the first environment and import it into the second. Go to Admin , then Content staging import/export . The Content staging screen: export at the top, import below. Export Export everything downloads every page, content block and home page banner as one zip file. Choose what to export lets you pick. Tick the pages, content blocks and home page banners you want, then select Export selected . Filter the list, then tick what you want. Type in Filter to narrow both lists by title, key or page. When you tick a page, the pages above it are included automatically, so it has somewhere to go in the other environment. Each page is exported with its live version and its 5 most recent versions. Tick Include full version history to export every version. Only do this when you are moving a whole environment: the file can be many times larger. Import An import has 2 steps, and the first changes nothing. Under Content bundle file , choose the zip file you exported. Select Preview import . The Review import screen. Nothing has changed yet. The Review import screen tells you how many items are new, how many are already in this environment, and how many cannot be imported. Now decide what happens to each. Default for new items Choice What happens Include New pages and blocks are added. Skip They are left out, unless you choose Include for an item yourself. Default for items already in this environment Choice What happens Skip What is here is kept. The version in the file is ignored. Overwrite What is here is replaced by the version in the file. Fail The import stops if anything in the file is already here. Each item in the tables below also has its own choice, which starts as Use default . Change it to treat that one item differently. Select Confirm import , or Cancel to leave without importing. The summary after an import. ! Warning Overwrite replaces a page's content and its whole version history with what is in the file. Anything written in this environment since the export is lost. If in doubt, export this environment first, so you have a copy to go back to. How items are matched Every page and block carries a hidden identity that stays the same in every environment. An import matches on that, not on the title or address. So if a page was renamed in the first environment, importing it updates the same page here instead of adding a second one. If nothing matches by identity, the import looks for a page at the same address, or a block with the same key, and treats that as the match. Items that cannot be imported The Review import screen lists these under These items cannot be imported , each with the reason. The rest of the file is still imported. An item cannot be imported when: a page's parent is not in this environment and not in the file. The import never invents an empty parent for it. To fix it, go back to the first environment and export again with the parent ticked. a page, block or banner breaks a rule, such as a URL segment with a space in it. Pages beneath a page that cannot be imported cannot be imported either. To fix it, correct the item in the first environment and export again. The summary after the import lists the same items again. A URL segment with capital letters is the one mistake the import puts right. It imports the page with the segment in lowercase, and says so on the Review import screen and in the summary. If the lowercase address is already used by another page, the page is not imported. Safety Imported content goes through the same checks as content typed into the editor. Anything unsafe, such as scripts, is removed, and the summary tells you if that happened. Every import is recorded in the audit log. If you wait too long on the Review import screen, you will see The import session expired. Upload the file again. Nothing has been changed. Start again. A safe way to release content Write and publish the content in the test environment and check it there. Export only what you changed, with Choose what to export . In production, export what is there first and keep the file. Import with Overwrite only for the pages you mean to replace. Leave the default as Skip . Check the pages in production. Pages the service imports by itself Some pages are supplied with the service and imported automatically when it starts, with no one using this screen. This guide is one example. A newer release overwrites them, so changes made to them in an environment do not last. You can tell them apart in the editor: a warning under the page title says This page is supplied with the service . To change one for good, ask the development team, so that every environment gets the change. Clear all CMS content Development environments can show a Clear all CMS content button on this screen. It deletes every page, content block and home page banner and cannot be undone. It is for resetting a test environment. It appears only when an administrator has turned on the CMS:ShowDeleteAllButton setting, and never in QA, preproduction or production, whatever the setting says." } @@ -278,7 +278,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Every search on the service is counted. Search analytics turns those counts into a picture of what people want from the site, and the feedback inbox holds the notes they send when search lets them down.

No personal data is stored with a search. Searches are grouped by an anonymous session, not by person.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Open Search analytics\"},\"anchor\":\"open-search-analytics\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, CMS administration, then Search analytics. Only administrators have it to begin with.

\\\"The
The four headline figures and search volume over time. Figures here are sample data.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The four headline figures\"},\"anchor\":\"the-four-headline-figures\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
TileWhat it tells you
SearchesHow many searches were made.
Unique usersHow many separate sessions made them.
Zero-result rateThe share of searches that found nothing. This is the one to watch.
P95 latencyHow long the slower searches took. 95 in every 100 were faster than this.

Under a figure, a small label compares it with the period before when it has changed by a tenth or more. Select a tile to see that figure charted over time.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Choose what the figures cover\"},\"anchor\":\"choose-what-the-figures-cover\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The filters at the top of the screen apply to everything below them. Select Apply filters after changing them.

FilterWhat it does
Time windowLast 24 hours, 7 days, 30 days or 90 days, or a range of your own. Dates are in UTC.
Chart bucket sizeHow finely the charts are divided, from 15 minutes to 1 month.
Aggregate to a typical weekFolds the period into one average week, to show the weekly pattern.
Search surfaceWhich kinds of search to count: searches someone submitted, instant searches of the site or a section, and instant searches of a single page.

Reset to last 7 days puts the filters back.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Find the gaps in your content\"},\"anchor\":\"find-the-gaps-in-your-content\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Scroll down to Top zero-result queries and select View all zero-result queries. This is the most useful screen in the CMS for deciding what to write next.

\\\"The
Searches that found nothing, most frequent first. Figures here are sample data.

Each line is something people looked for and did not find. For each one, ask:

Select a query to run the same search on the live site and see what the visitor saw.

The Zero-result outcomes panel shows what people did next: tried different words, sent a note, or gave up. A high share giving up is the strongest sign that content is missing.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"See when people search\"},\"anchor\":\"see-when-people-search\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

When people search is a grid of the days of the week against the hours of the day. Darker squares mean more searches.

\\\"The
Darker squares are busier hours. Times are in UTC.

Use it to choose when to publish changes, and to see whether a checking exercise is driving people to the help pages. Select a square to list the searches made in that hour.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The other panels\"},\"anchor\":\"the-other-panels\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
PanelWhat it shows
Top queriesWhat people search for most. Make sure the best page comes first for each.
Single-page searchSearches made with a search box set to This page.
Top pagesThe pages that appear most often in results.
Top content blocksThe content blocks that appear most often in results.

Every panel has a View all link to a full list, with a box to filter the rows.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Read the notes people send\"},\"anchor\":\"read-the-notes-people-send\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, Messages, then Search feedback. The number beside Messages in the header counts the notes nobody has read yet, together with any messages in the dead letter queue.

\\\"The
The Search feedback inbox. The notes here are sample data.

Select a note to read it. You see what the person was looking for, what they got instead, and the last search they made. View this session's searches lists everything they searched for in that visit, which often shows the words they tried before giving up.

Select Mark as read once someone has dealt with the note.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"How long the figures are kept\"},\"anchor\":\"how-long-the-figures-are-kept\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Searches are kept for 90 days and feedback notes for 365 days, then deleted automatically. An administrator can change both under CMS settings and site styling.

To delete one visitor's data sooner, open their session from a note, or from an hour on the When people search grid, and select Delete this session's data. It deletes their searches and any notes they sent. The deletion is recorded in the audit log.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Try the screens with sample data\"},\"anchor\":\"try-the-screens-with-sample-data\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

A new environment has no searches to show. In development and test environments, Seed sample search data, under System administration then Test data, fills the screens with made-up searches so you can see how they work. The same screen removes them again. It is available in development, review and QA environments only.

\"}}]]}]", "bodyPlainText": "Every search on the service is counted. Search analytics turns those counts into a picture of what people want from the site, and the feedback inbox holds the notes they send when search lets them down. No personal data is stored with a search. Searches are grouped by an anonymous session, not by person. Open Search analytics Go to Admin , CMS administration , then Search analytics . Only administrators have it to begin with. The four headline figures and search volume over time. Figures here are sample data. The four headline figures Tile What it tells you Searches How many searches were made. Unique users How many separate sessions made them. Zero-result rate The share of searches that found nothing. This is the one to watch. P95 latency How long the slower searches took. 95 in every 100 were faster than this. Under a figure, a small label compares it with the period before when it has changed by a tenth or more. Select a tile to see that figure charted over time. Choose what the figures cover The filters at the top of the screen apply to everything below them. Select Apply filters after changing them. Filter What it does Time window Last 24 hours, 7 days, 30 days or 90 days, or a range of your own. Dates are in UTC. Chart bucket size How finely the charts are divided, from 15 minutes to 1 month. Aggregate to a typical week Folds the period into one average week, to show the weekly pattern. Search surface Which kinds of search to count: searches someone submitted, instant searches of the site or a section, and instant searches of a single page. Reset to last 7 days puts the filters back. Find the gaps in your content Scroll down to Top zero-result queries and select View all zero-result queries . This is the most useful screen in the CMS for deciding what to write next. Searches that found nothing, most frequent first. Figures here are sample data. Each line is something people looked for and did not find. For each one, ask: Is the content there under another name? Add the word people used to that page's Search keywords . See Page properties . Is the content missing? That is a page to write. Is it something this service does not cover? Consider a short page that says so and points people to the right place. Select a query to run the same search on the live site and see what the visitor saw. The Zero-result outcomes panel shows what people did next: tried different words, sent a note, or gave up. A high share giving up is the strongest sign that content is missing. See when people search When people search is a grid of the days of the week against the hours of the day. Darker squares mean more searches. Darker squares are busier hours. Times are in UTC. Use it to choose when to publish changes, and to see whether a checking exercise is driving people to the help pages. Select a square to list the searches made in that hour. The other panels Panel What it shows Top queries What people search for most. Make sure the best page comes first for each. Single-page search Searches made with a search box set to This page . Top pages The pages that appear most often in results. Top content blocks The content blocks that appear most often in results. Every panel has a View all link to a full list, with a box to filter the rows. Read the notes people send Go to Admin , Messages , then Search feedback . The number beside Messages in the header counts the notes nobody has read yet, together with any messages in the dead letter queue. The Search feedback inbox. The notes here are sample data. Select a note to read it. You see what the person was looking for, what they got instead, and the last search they made. View this session's searches lists everything they searched for in that visit, which often shows the words they tried before giving up. Select Mark as read once someone has dealt with the note. How long the figures are kept Searches are kept for 90 days and feedback notes for 365 days, then deleted automatically. An administrator can change both under CMS settings and site styling . To delete one visitor's data sooner, open their session from a note, or from an hour on the When people search grid, and select Delete this session's data . It deletes their searches and any notes they sent. The deletion is recorded in the audit log. Try the screens with sample data A new environment has no searches to show. In development and test environments, Seed sample search data , under System administration then Test data , fills the screens with made-up searches so you can see how they work. The same screen removes them again. It is available in development, review and QA environments only." } @@ -298,7 +298,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Access to the admin area is decided in 2 places. DfE Sign-in decides which role a person has. Role settings, in this service, decides what each role can use.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The two roles\"},\"anchor\":\"the-two-roles\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
RoleIts name in DfE Sign-inWhat it is for
Administratorcypmd_adminRuns the service. Can use every part of the admin area.
Content editorcypmd_content_access_userWrites and publishes content.

There is no list of users in this service. To give someone access, or take it away, change their role in DfE Sign-in.

Someone without a role that grants a section does not see it in the menu. If they go to its address, they get the Page not found page.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"What a content editor can use to begin with\"},\"anchor\":\"what-a-content-editor-can-use-to-begin-with\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Everything else is for administrators only until you grant it.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Change what a role can use\"},\"anchor\":\"change-what-a-role-can-use\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, System administration, then Role settings.

\\\"The
Role settings. Each row is a section of the admin area and each column is a role.

Each row is a section of the admin area. Each column is a role. Tick a box to let that role use that section, then select Save role access. The screen confirms with Role access saved. The change takes effect within a minute.

The administrator column is ticked throughout and cannot be changed, so an administrator can never lock themselves out.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Two things Role settings does not control\"},\"anchor\":\"two-things-role-settings-does-not-control\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The preview of an unpublished page at its own address, and the pencils beside content blocks on public pages, are shown to people with the content editor role itself. Ticking boxes here does not change that.

An administrator who writes content should be given both roles in DfE Sign-in. Without the content editor role they can still do everything from the admin area.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Sections that matter for the CMS\"},\"anchor\":\"sections-that-matter-for-the-cms\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
SectionWhat it opens
content-pagesPages: create, edit, publish, move, copy and delete
content-blocksContent blocks
deleted-pagesDeleted pages, and restoring them
content-stagingContent staging import/export
search-analyticsSearch analytics
messages-inboxSearch feedback
system-settingsSystem settings
site-assetsSite CSS and JavaScript. Administrators only, even if you tick it for another role.
role-settingsThis screen
app-logsView logs
audit-logAudit log
seed-sample-pagesThe Seed sample CMS pages tool

A common change is to tick search-analytics and messages-inbox for content editors, so the people who write the content can see what readers cannot find.

!WarningThink before granting content-staging. An import can overwrite any page in the environment, so anyone with it can replace the whole site's content.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Add another role\"},\"anchor\":\"add-another-role\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

If your organisation uses a role that is not in the grid, add it under Register a new role. Type the role's name exactly as it appears in DfE Sign-in and save. It gets a column with nothing ticked. Tick the sections it should have and select Save role access.

The Admin link in the header is shown to administrators and content editors only. People with a role you have added reach the admin area by going to /admin.

\"}}]]}]", "bodyPlainText": "Access to the admin area is decided in 2 places. DfE Sign-in decides which role a person has. Role settings , in this service, decides what each role can use. The two roles Role Its name in DfE Sign-in What it is for Administrator cypmd_admin Runs the service. Can use every part of the admin area. Content editor cypmd_content_access_user Writes and publishes content. There is no list of users in this service. To give someone access, or take it away, change their role in DfE Sign-in. Someone without a role that grants a section does not see it in the menu. If they go to its address, they get the Page not found page. What a content editor can use to begin with Pages Content blocks Deleted pages Content staging import/export Seed sample CMS pages Everything else is for administrators only until you grant it. Change what a role can use Go to Admin , System administration , then Role settings . Role settings. Each row is a section of the admin area and each column is a role. Each row is a section of the admin area. Each column is a role. Tick a box to let that role use that section, then select Save role access . The screen confirms with Role access saved. The change takes effect within a minute. The administrator column is ticked throughout and cannot be changed, so an administrator can never lock themselves out. Two things Role settings does not control The preview of an unpublished page at its own address, and the pencils beside content blocks on public pages, are shown to people with the content editor role itself. Ticking boxes here does not change that. An administrator who writes content should be given both roles in DfE Sign-in. Without the content editor role they can still do everything from the admin area. Sections that matter for the CMS Section What it opens content-pages Pages: create, edit, publish, move, copy and delete content-blocks Content blocks deleted-pages Deleted pages, and restoring them content-staging Content staging import/export search-analytics Search analytics messages-inbox Search feedback system-settings System settings site-assets Site CSS and JavaScript. Administrators only, even if you tick it for another role. role-settings This screen app-logs View logs audit-log Audit log seed-sample-pages The Seed sample CMS pages tool A common change is to tick search-analytics and messages-inbox for content editors, so the people who write the content can see what readers cannot find. ! Warning Think before granting content-staging . An import can overwrite any page in the environment, so anyone with it can replace the whole site's content. Add another role If your organisation uses a role that is not in the grid, add it under Register a new role . Type the role's name exactly as it appears in DfE Sign-in and save. It gets a column with nothing ticked. Tick the sections it should have and select Save role access . The Admin link in the header is shown to administrators and content editors only. People with a role you have added reach the admin area by going to /admin ." } @@ -318,7 +318,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Two screens under System administration change how the CMS behaves for everyone. Both are for administrators.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"System settings\"},\"anchor\":\"system-settings\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, System administration, then System settings. Type CMS: in Filter settings to see the CMS ones.

\\\"The
The CMS settings. Each one has its own Save button.

Each setting has its own Save button and takes effect when you select it. To go back to the default, clear the value and save.

SettingWhat it doesDefault
CMS:PageLengthHow many rows a list shows before it splits into pages. This covers search results and the lists in the admin area.20
CMS:SearchDebugOnRecords why each search result was ranked where it was. Turn it on while you investigate why a page is not being found, then turn it off again.Off
CMS:ShowDeleteAllButtonShows the Clear all CMS content button on the Content staging screen. Works in development environments only.Off

Type SearchAnalytics: in the filter for the settings behind Search analytics and feedback.

SettingWhat it doesDefault
SearchAnalytics:RetentionDaysHow long searches are kept before they are deleted.90
SearchAnalytics:MessageRetentionDaysHow long feedback notes are kept.365

The other SearchAnalytics: settings are technical: how long a session lasts, how often old data is cleared, and aids for the development team. Leave them alone unless the development team asks you to change them.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Site CSS and JavaScript\"},\"anchor\":\"site-css-and-javascript\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, System administration, then Site CSS and JavaScript. This screen adds your own styles and scripts to every page of the service, including the admin area.

\\\"The
The Site CSS and JavaScript screen.

Select Save. The change reaches every visitor within about 30 seconds.

!WarningJavaScript added here runs for every visitor on every page. A mistake can break the whole service. Ask a developer to check anything you add, and try it in a test environment first.

Only administrators can use this screen. Ticking it for another role on the Role settings screen does not open it.

If a change breaks the site

This screen never loads the custom CSS or JavaScript, so you can always get back to it.

  1. Go straight to /admin/site-assets.
  2. Untick Apply the custom CSS to the site or Apply the custom JavaScript to the site.
  3. Select Save.

To open any other page without the custom CSS and JavaScript, add ?siteAssets=off to the end of its address, for example /admin?siteAssets=off.

When to use it, and when not to

Use it for small, temporary adjustments that cannot wait for a release, such as hiding a banner. For anything lasting, ask the development team to make the change in the service itself, where it is tested and reviewed.

\"}}]]}]", "bodyPlainText": "Two screens under System administration change how the CMS behaves for everyone. Both are for administrators. System settings Go to Admin , System administration , then System settings . Type CMS: in Filter settings to see the CMS ones. The CMS settings. Each one has its own Save button. Each setting has its own Save button and takes effect when you select it. To go back to the default, clear the value and save. Setting What it does Default CMS:PageLength How many rows a list shows before it splits into pages. This covers search results and the lists in the admin area. 20 CMS:SearchDebugOn Records why each search result was ranked where it was. Turn it on while you investigate why a page is not being found, then turn it off again. Off CMS:ShowDeleteAllButton Shows the Clear all CMS content button on the Content staging screen. Works in development environments only. Off Type SearchAnalytics: in the filter for the settings behind Search analytics and feedback . Setting What it does Default SearchAnalytics:RetentionDays How long searches are kept before they are deleted. 90 SearchAnalytics:MessageRetentionDays How long feedback notes are kept. 365 The other SearchAnalytics: settings are technical: how long a session lasts, how often old data is cleared, and aids for the development team. Leave them alone unless the development team asks you to change them. Site CSS and JavaScript Go to Admin , System administration , then Site CSS and JavaScript . This screen adds your own styles and scripts to every page of the service, including the admin area. The Site CSS and JavaScript screen. Custom CSS is loaded after the service's own styles, so your rules win. Custom JavaScript runs on every page once it has loaded. Each has an Apply tick box. Untick it to switch your CSS or JavaScript off without deleting it. Select Save . The change reaches every visitor within about 30 seconds. ! Warning JavaScript added here runs for every visitor on every page. A mistake can break the whole service. Ask a developer to check anything you add, and try it in a test environment first. Only administrators can use this screen. Ticking it for another role on the Role settings screen does not open it. If a change breaks the site This screen never loads the custom CSS or JavaScript, so you can always get back to it. Go straight to /admin/site-assets . Untick Apply the custom CSS to the site or Apply the custom JavaScript to the site . Select Save . To open any other page without the custom CSS and JavaScript, add ?siteAssets=off to the end of its address, for example /admin?siteAssets=off . When to use it, and when not to Use it for small, temporary adjustments that cannot wait for a release, such as hiding a banner. For anything lasting, ask the development team to make the change in the service itself, where it is tested and reviewed." } @@ -338,7 +338,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The service keeps 2 records. The audit log records what people did. The application log records what the service did. Start with the audit log: it answers most questions about content.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The audit log: who changed what\"},\"anchor\":\"the-audit-log-who-changed-what\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, then Audit log.

\\\"The
The audit log, filtered to changes to page versions.

Each row shows who did something, the kind of thing it was, whether it was an insert, an update or a delete, and when. It does not name the page or say what changed, so use it to answer "who was working on content at that time?" and then ask them.

Choose a kind of activity in Filter by activity and select Apply filters. Leave Filter by status on All statuses: status belongs to data egress and checking windows, and choosing one hides every CMS row. Select Export log as CSV to open the list in a spreadsheet.

The kinds of activity that come from the CMS are:

ActivityRecorded when
Content pageA page is created, renamed, moved, copied, deleted or restored, or its properties change. A delete and a move both show as an update.
Content page versionA version is created, changed, published, scheduled or unpublished. Every change to a widget is recorded.
Content blockA block is created or edited, or is shown on a different page for the first time.
Content block versionA block is saved or reverted.
Content importA file is imported through Content staging.
Content staging sessionA file is uploaded for review before an import.
Feedback messageA visitor sends a search feedback note, or someone reads or deletes one.

Questions the audit log answers

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The application log: what the service did\"},\"anchor\":\"the-application-log-what-the-service-did\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Go to Admin, System administration, then View logs.

\\\"The
The application log.

This is a technical record, mostly of use to the development team. You are most likely to open it because they have asked you to, or to look for errors around the time something went wrong.

FilterWhat it does
LevelHow serious the entry is. Choose Warning or Error to see only problems.
CategoryWhich part of the service wrote the entry.
From and ToThe period to look at. Times are in UTC.
SearchWords to look for in the entries.

You can download what you have filtered, to send to the development team.

!WarningThe screen can also clear the whole log. That removes the evidence the development team needs to investigate a problem. Do not clear it unless they ask you to.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"When to use which\"},\"anchor\":\"when-to-use-which\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
You want to knowLook in
Who was changing content, and whenAudit log
Whether an import happenedAudit log
Why a page shows an errorView logs
What a visitor searched forSearch analytics and feedback
\"}}]]}]", "bodyPlainText": "The service keeps 2 records. The audit log records what people did. The application log records what the service did. Start with the audit log: it answers most questions about content. The audit log: who changed what Go to Admin , then Audit log . The audit log, filtered to changes to page versions. Each row shows who did something, the kind of thing it was, whether it was an insert, an update or a delete, and when. It does not name the page or say what changed, so use it to answer \"who was working on content at that time?\" and then ask them. Choose a kind of activity in Filter by activity and select Apply filters . Leave Filter by status on All statuses : status belongs to data egress and checking windows, and choosing one hides every CMS row. Select Export log as CSV to open the list in a spreadsheet. The kinds of activity that come from the CMS are: Activity Recorded when Content page A page is created, renamed, moved, copied, deleted or restored, or its properties change. A delete and a move both show as an update. Content page version A version is created, changed, published, scheduled or unpublished. Every change to a widget is recorded. Content block A block is created or edited, or is shown on a different page for the first time. Content block version A block is saved or reverted. Content import A file is imported through Content staging. Content staging session A file is uploaded for review before an import. Feedback message A visitor sends a search feedback note, or someone reads or deletes one. Questions the audit log answers Who was changing pages yesterday afternoon? Filter by Content page version and look at the times. Why has a lot of content changed at once? Look for a Content import . An import that overwrites can change many pages together. Was a page deleted? Filter by Content page around the time it went missing, then look in Deleted pages , where it can be restored . The application log: what the service did Go to Admin , System administration , then View logs . The application log. This is a technical record, mostly of use to the development team. You are most likely to open it because they have asked you to, or to look for errors around the time something went wrong. Filter What it does Level How serious the entry is. Choose Warning or Error to see only problems. Category Which part of the service wrote the entry. From and To The period to look at. Times are in UTC. Search Words to look for in the entries. You can download what you have filtered, to send to the development team. ! Warning The screen can also clear the whole log. That removes the evidence the development team needs to investigate a problem. Do not clear it unless they ask you to. When to use which You want to know Look in Who was changing content, and when Audit log Whether an import happened Audit log Why a page shows an error View logs What a visitor searched for Search analytics and feedback" } @@ -358,7 +358,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms/for-administrators\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to For administrators

\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The CMS is one group of tools on the Administration page. The others are Dashboard, System administration, Messages, Window administration, Data egress, Audit log and Danger zone.

The admin user guide (PDF) explains every group and how to use each screen. It is kept in the service's code repository and updated with the service.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"What the other groups do\"},\"anchor\":\"what-the-other-groups-do\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Where the two guides meet\"},\"anchor\":\"where-the-two-guides-meet\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
TopicThis guideAdmin user guide
Writing and publishing pagesIn fullIn outline
Content blocks, content stagingIn fullIn outline
Search analytics and search feedbackIn fullIn full
System settings, role settings, logsThe parts that affect the CMSIn full
Checking windows, data egress, the rules engineNot coveredIn full
\"}}]]}]", "bodyPlainText": "The CMS is one group of tools on the Administration page. The others are Dashboard, System administration, Messages, Window administration, Data egress, Audit log and Danger zone. The admin user guide (PDF) explains every group and how to use each screen. It is kept in the service's code repository and updated with the service. What the other groups do Dashboard : school engagement and amendment request figures for an open checking window. System administration : the rules engine (pipeline dashboard, queues, decision rules), system settings, application logs and role settings. Messages : search feedback from users and the dead-letter queue. Window administration : create and manage checking windows, load and validate pupil data, close exercises and review requests. Data egress : pull approved decisions from Zendesk, prepare them and transfer them to LDS. Audit log : a record of administrative activity with CSV export. Danger zone : reset seed data (not in production) and the blob storage browser. Where the two guides meet Topic This guide Admin user guide Writing and publishing pages In full In outline Content blocks, content staging In full In outline Search analytics and search feedback In full In full System settings, role settings, logs The parts that affect the CMS In full Checking windows, data egress, the rules engine Not covered In full" } @@ -378,7 +378,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to How to use the CMS

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Most problems in the CMS have one of a few causes. Find what you are seeing below.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"My change is not showing on the site\"},\"anchor\":\"my-change-is-not-showing-on-the-site\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
CheckWhat to do
Did you publish?Your changes are kept as a draft. Open the page in the editor: a grey Draft tag means there are changes that are not live. Select Publish draft.
Did you save the widget?Each widget has its own Save button. A change typed into a widget is lost if you leave without saving it.
Is a later version scheduled or live?Open the Versions tab and check which version is Live.
Is your browser showing an old copy?Reload the page.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Visitors get \\\"Page not found\\\"\"},\"anchor\":\"visitors-get-page-not-found\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
CheckWhat to do
Is the page published?Editors see a preview of an unpublished page, so it can look fine to you. Open the Versions tab: if no version is Live, publish one.
Has a Publish to date passed?On the Versions tab, look for a version with a Publish to date in the past. It may still be marked Live. Select Publish on the version you want.
Has the address changed?Renaming a page, or moving it under a different parent, changes its address. Old links are not redirected.
Was it deleted?Look in Deleted pages and restore it.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"A page does not come up in search\"},\"anchor\":\"a-page-does-not-come-up-in-search\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
CheckWhat to do
Is it published?Unpublished pages are never in search.
Is Appear in search ticked?Check the Properties tab.
Is it a folder?Folders are never in search.
Do the words people type appear on the page?Add them to Search keywords on the Properties tab.
Is the search box limited to certain pages?A box set to Chosen pages only finds pages under the ones ticked.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"A page is missing from a menu\"},\"anchor\":\"a-page-is-missing-from-a-menu\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
CheckWhat to do
Is it published?A Page navigation widget with a parent path leaves out unpublished pages.
Is Show in menu ticked?Check the Properties tab.
Is it a folder?A Page navigation widget with a parent path does not list folders.
Is the menu looking in the right place?Open the Page navigation widget and check Parent path for children.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"I cannot see something I expect to\"},\"anchor\":\"i-cannot-see-something-i-expect-to\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
What is missingWhy
The Admin link, or a tool in the admin areaYour role does not include it. Ask an administrator to check Roles and access.
The Edit button on a pageYou are not signed in as an editor, or the page is not a content page. Wiki pages are edited from Admin, then Pages. Fixed pages are edited through content blocks.
The pencil beside a content block, or the preview of an unpublished pageBoth need the content editor role itself. Use Admin, then Content blocks or Pages, or ask for that role as well.
A new content block in the listA block appears after someone has visited the page it is on. Visit the page, then look again.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"I cannot do something\"},\"anchor\":\"i-cannot-do-something\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
MessageWhat it means
A page already exists at that path.Another page under the same parent has that URL segment.
Cannot delete: remove or move its child pages first.Delete or move the pages beneath it, then try again.
Cannot move a page under itself.You dropped a page onto one of the pages beneath it.
Another page already uses that URL.Choose a different URL segment.
The import session expired. Upload the file again.You waited too long on the Review import screen. Nothing was changed.
Search is temporarily unavailableA fault in the service. Try again in a few minutes, then tell the development team.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"I made a mistake\"},\"anchor\":\"i-made-a-mistake\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
What happenedHow to undo it
Published something too earlyOpen the Versions tab and select Publish on the previous version.
Deleted a widget or regionDo not publish. The live version is untouched: open it with View on the Versions tab and copy back what you need. If you already published, publish the previous version again.
Deleted a pageRestore it from Deleted pages.
Saved a content block with a mistakeOpen its Version history and select Revert on the version before.
Imported the wrong fileImport the copy you exported beforehand, choosing Overwrite. Without that copy, the versions an overwrite replaced cannot be recovered.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"A page comes back after I unpublish it\"},\"anchor\":\"a-page-comes-back-after-i-unpublish-it\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

An earlier version was published with no end date, so it became the live version again. Open the Versions tab and select Unpublish on each version marked Live until none is.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"A scheduled page is live but search shows the old words\"},\"anchor\":\"a-scheduled-page-is-live-but-search-shows-the-old-words\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Search, menus and the Versions tab catch up the next time someone publishes or edits the page. Open the Versions tab and select Publish on the version that should be live.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"My changes to a page have gone\"},\"anchor\":\"my-changes-to-a-page-have-gone\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

If the editor shows the warning This page is supplied with the service on that page, the service imported a newer version of it and overwrote yours. That is expected for the pages of this guide and any others the service supplies. Ask the development team to make the change in the service.

If there is no warning, an administrator can check the audit log for a Content import.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"The page publishes at the wrong time\"},\"anchor\":\"the-page-publishes-at-the-wrong-time\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Publishing dates are in UTC. In summer the UK is one hour ahead, so a page set to 09:00 goes live at 10am UK time. Enter a time one hour earlier. See Drafts, publishing and versions.

\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Still stuck\"},\"anchor\":\"still-stuck\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Tell the development team:

An administrator can add what the audit log shows for that page.

\"}}]]}]", "bodyPlainText": "Most problems in the CMS have one of a few causes. Find what you are seeing below. My change is not showing on the site Check What to do Did you publish? Your changes are kept as a draft. Open the page in the editor: a grey Draft tag means there are changes that are not live. Select Publish draft . Did you save the widget? Each widget has its own Save button. A change typed into a widget is lost if you leave without saving it. Is a later version scheduled or live? Open the Versions tab and check which version is Live . Is your browser showing an old copy? Reload the page. Visitors get \"Page not found\" Check What to do Is the page published? Editors see a preview of an unpublished page, so it can look fine to you. Open the Versions tab: if no version is Live , publish one. Has a Publish to date passed? On the Versions tab, look for a version with a Publish to date in the past. It may still be marked Live . Select Publish on the version you want. Has the address changed? Renaming a page, or moving it under a different parent, changes its address. Old links are not redirected. Was it deleted? Look in Deleted pages and restore it. A page does not come up in search Check What to do Is it published? Unpublished pages are never in search. Is Appear in search ticked? Check the Properties tab. Is it a folder? Folders are never in search. Do the words people type appear on the page? Add them to Search keywords on the Properties tab. Is the search box limited to certain pages? A box set to Chosen pages only finds pages under the ones ticked. A page is missing from a menu Check What to do Is it published? A Page navigation widget with a parent path leaves out unpublished pages. Is Show in menu ticked? Check the Properties tab. Is it a folder? A Page navigation widget with a parent path does not list folders. Is the menu looking in the right place? Open the Page navigation widget and check Parent path for children . I cannot see something I expect to What is missing Why The Admin link, or a tool in the admin area Your role does not include it. Ask an administrator to check Roles and access . The Edit button on a page You are not signed in as an editor, or the page is not a content page. Wiki pages are edited from Admin , then Pages . Fixed pages are edited through content blocks . The pencil beside a content block, or the preview of an unpublished page Both need the content editor role itself. Use Admin , then Content blocks or Pages , or ask for that role as well. A new content block in the list A block appears after someone has visited the page it is on. Visit the page, then look again. I cannot do something Message What it means A page already exists at that path. Another page under the same parent has that URL segment. Cannot delete: remove or move its child pages first. Delete or move the pages beneath it, then try again. Cannot move a page under itself. You dropped a page onto one of the pages beneath it. Another page already uses that URL. Choose a different URL segment. The import session expired. Upload the file again. You waited too long on the Review import screen. Nothing was changed. Search is temporarily unavailable A fault in the service. Try again in a few minutes, then tell the development team. I made a mistake What happened How to undo it Published something too early Open the Versions tab and select Publish on the previous version. Deleted a widget or region Do not publish. The live version is untouched: open it with View on the Versions tab and copy back what you need. If you already published, publish the previous version again. Deleted a page Restore it from Deleted pages . Saved a content block with a mistake Open its Version history and select Revert on the version before. Imported the wrong file Import the copy you exported beforehand, choosing Overwrite . Without that copy, the versions an overwrite replaced cannot be recovered. A page comes back after I unpublish it An earlier version was published with no end date, so it became the live version again. Open the Versions tab and select Unpublish on each version marked Live until none is. A scheduled page is live but search shows the old words Search, menus and the Versions tab catch up the next time someone publishes or edits the page. Open the Versions tab and select Publish on the version that should be live. My changes to a page have gone If the editor shows the warning This page is supplied with the service on that page, the service imported a newer version of it and overwrote yours. That is expected for the pages of this guide and any others the service supplies. Ask the development team to make the change in the service. If there is no warning, an administrator can check the audit log for a Content import . The page publishes at the wrong time Publishing dates are in UTC. In summer the UK is one hour ahead, so a page set to 09:00 goes live at 10am UK time. Enter a time one hour earlier. See Drafts, publishing and versions . Still stuck Tell the development team: the address of the page what you expected and what happened instead the time it happened An administrator can add what the audit log shows for that page." } @@ -398,7 +398,7 @@ { "versionId": 1, "minorVersion": 0, - "publishFrom": "2026-10-16T09:27:18Z", + "publishFrom": "2026-10-19T11:41:50Z", "content": "[{\"kind\":\"region\",\"layout\":\"one-third-two-thirds\",\"columns\":[[{\"kind\":\"widget\",\"type\":\"search\",\"props\":{\"label\":\"Search this guide\",\"placeholder\":\"\",\"action\":\"/search\",\"buttonText\":\"Search\",\"scope\":\"\",\"scopePageIds\":\"a969611f-33ad-518d-9ce5-dcd82a9b2656\",\"searchIn\":\"path\",\"instant\":\"true\",\"showButton\":\"true\",\"buttonBelow\":\"true\",\"noResultsText\":\"Nothing in this guide matches\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"children\",\"childrenParentPath\":\"help/how-to-use-the-cms\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"true\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

Back to How to use the CMS

\"}},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

On this page

\"}},{\"kind\":\"widget\",\"type\":\"pagenav\",\"props\":{\"mode\":\"headings\",\"childrenParentPath\":\"\",\"showSearch\":false,\"searchPath\":\"\",\"searchLabel\":\"Search\",\"h1\":\"false\",\"h2\":\"true\",\"h3\":\"false\",\"h4\":\"false\",\"h5\":\"false\",\"h6\":\"false\"}}],[{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"

The words you will meet in the CMS and in this guide.

\"}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Pages and their parts\"},\"anchor\":\"pages-and-their-parts\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
WordWhat it means
PageSomething with an address on the public site that you create and manage in the CMS.
Content pageA page built from widgets. The usual kind.
Wiki pageA simpler page that holds one block of text and nothing else.
FolderA container for pages. It has no content of its own.
Page treeAll the pages of the site, arranged by which page sits beneath which.
Parent, childA page directly above another in the tree is its parent. The page beneath is its child.
SectionOne of the 4 top-level pages the service creates: Support, Wiki, Help and Guidance.
URL segmentThe last part of a page's address. In /guidance/ks4-checking it is ks4-checking.
PathA page's whole address after the site name, such as guidance/ks4-checking.
RegionA row of a content page that sets how many columns it has.
WidgetOne piece of content in a region, such as a heading, some text or a search box.
Content blockA piece of text on a page that is built into the service, such as the home page or the footer.
KeyThe name of a content block, such as home-content.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Publishing\"},\"anchor\":\"publishing\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
WordWhat it means
DraftA version nobody outside the CMS can see yet.
Live, publishedThe version visitors see.
ScheduledA version with a Publish from date in the future.
PastA version that has been published and is not the live one now.
VersionA saved state of a page or content block. Every version is kept.
Publish from, Publish toThe start and end of the time a version is live.
UnpublishTake the live version of a page off the public site without deleting it.
RevertMake an earlier version of a content block the live one again.
UTCThe time standard the service uses. The same as UK time in winter, and one hour behind it in summer.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Search\"},\"anchor\":\"search\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
WordWhat it means
Search keywordsExtra words you give a page so that it is found by them.
Instant searchA search box that suggests matches while you type.
ScopeThe part of the site a search box looks in.
Zero-result searchA search that found nothing.
SessionOne visit to the site. Searches are grouped by session, not by person.
\"}},{\"kind\":\"widget\",\"type\":\"divider\",\"props\":{}},{\"kind\":\"widget\",\"type\":\"heading\",\"props\":{\"level\":2,\"text\":\"Administration\"},\"anchor\":\"administration\"},{\"kind\":\"widget\",\"type\":\"richtext\",\"props\":{\"html\":\"
WordWhat it means
RoleWhat kind of user you are. It is set in DfE Sign-in and decides what you can use.
Section (of the admin area)One tool or group of tools that a role can be given access to.
EnvironmentOne copy of the service. There are separate ones for development, testing and the real thing, which is called production.
Content stagingThe tool for copying content from one environment to another.
BundleThe zip file that Content staging exports and imports.
Audit logThe record of what people did in the admin area.
\"}}]]}]", "bodyPlainText": "The words you will meet in the CMS and in this guide. Pages and their parts Word What it means Page Something with an address on the public site that you create and manage in the CMS. Content page A page built from widgets. The usual kind. Wiki page A simpler page that holds one block of text and nothing else. Folder A container for pages. It has no content of its own. Page tree All the pages of the site, arranged by which page sits beneath which. Parent, child A page directly above another in the tree is its parent. The page beneath is its child. Section One of the 4 top-level pages the service creates: Support, Wiki, Help and Guidance. URL segment The last part of a page's address. In /guidance/ks4-checking it is ks4-checking . Path A page's whole address after the site name, such as guidance/ks4-checking . Region A row of a content page that sets how many columns it has. Widget One piece of content in a region, such as a heading, some text or a search box. Content block A piece of text on a page that is built into the service, such as the home page or the footer. Key The name of a content block, such as home-content . Publishing Word What it means Draft A version nobody outside the CMS can see yet. Live, published The version visitors see. Scheduled A version with a Publish from date in the future. Past A version that has been published and is not the live one now. Version A saved state of a page or content block. Every version is kept. Publish from, Publish to The start and end of the time a version is live. Unpublish Take the live version of a page off the public site without deleting it. Revert Make an earlier version of a content block the live one again. UTC The time standard the service uses. The same as UK time in winter, and one hour behind it in summer. Search Word What it means Search keywords Extra words you give a page so that it is found by them. Instant search A search box that suggests matches while you type. Scope The part of the site a search box looks in. Zero-result search A search that found nothing. Session One visit to the site. Searches are grouped by session, not by person. Administration Word What it means Role What kind of user you are. It is set in DfE Sign-in and decides what you can use. Section (of the admin area) One tool or group of tools that a role can be given access to. Environment One copy of the service. There are separate ones for development, testing and the real thing, which is called production. Content staging The tool for copying content from one environment to another. Bundle The zip file that Content staging exports and imports. Audit log The record of what people did in the admin area." } diff --git a/src/DfE.CheckPerformanceData.Web/Views/Shared/ContentPages/Widgets/_Search.cshtml b/src/DfE.CheckPerformanceData.Web/Views/Shared/ContentPages/Widgets/_Search.cshtml index d7c61883..cf902f67 100644 --- a/src/DfE.CheckPerformanceData.Web/Views/Shared/ContentPages/Widgets/_Search.cshtml +++ b/src/DfE.CheckPerformanceData.Web/Views/Shared/ContentPages/Widgets/_Search.cshtml @@ -45,6 +45,9 @@ // the author can ask for the button underneath. A widget saved before the option existed has // no value and keeps the button beside the box. var buttonBelow = Model.GetBool("buttonBelow") ?? false; + // A button at the end of the box that empties it. A widget saved before the option existed has + // no value and no clear button. + var clearButton = Model.GetBool("clearButton") ?? false; // Two search widgets on one page must not share an input id: the label's `for` keys off it, // and so do the listbox and status ids accessible-autocomplete derives from it — duplicates // would point a screen reader at the wrong menu. Counted per request; the first widget keeps @@ -72,8 +75,22 @@
- +
+ + @* A reset button empties the box without JavaScript. With it, search-clear.js hides + the button while the box is empty and puts the visitor back in the box. *@ + @if (clearButton) + { + + } +
@if (showButton) {
diff --git a/src/DfE.CheckPerformanceData.Web/wwwroot/css/site.css b/src/DfE.CheckPerformanceData.Web/wwwroot/css/site.css index b8e5385e..df5a872f 100644 --- a/src/DfE.CheckPerformanceData.Web/wwwroot/css/site.css +++ b/src/DfE.CheckPerformanceData.Web/wwwroot/css/site.css @@ -1750,12 +1750,49 @@ body.js-enabled .rules-condition__apply { .cypmd-search { margin: 20px 0 30px; } .cypmd-search__row { display: flex; gap: 20px; max-width: 45em; } .cypmd-search__input { flex: 1 1 auto; margin-bottom: 0; } +/* The box sits in a wrapper so an optional clear button can sit inside its right-hand end. The + wrapper is the flex child, so it takes the sizing the box used to have. */ +.cypmd-search__field { position: relative; flex: 1 1 auto; min-width: 0; } /* accessible-autocomplete replaces the input with its own wrapper, so the flex sizing has to move to the element that actually becomes the flex child. */ .cypmd-search__row .cypmd-search__autocomplete, .cypmd-search__row .autocomplete__wrapper { flex: 1 1 auto; min-width: 0; } .cypmd-search__button { flex: 0 0 auto; margin: 0; } +/* The author's choice of a clear button: a cross inside the end of the box. The box keeps room + for it so text does not run underneath, and the browser's own clear cross is hidden so there + are never two. */ +.cypmd-search__field:has(.cypmd-search__clear) .cypmd-search__input { padding-right: 40px; } +.cypmd-search__field:has(.cypmd-search__clear) .cypmd-search__input::-webkit-search-cancel-button { + -webkit-appearance: none; + appearance: none; +} +.cypmd-search__clear { + position: absolute; + top: 2px; + right: 2px; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + margin: 0; + padding: 0; + border: 0; + background: none; + color: #505a5f; + cursor: pointer; +} +.cypmd-search__clear[hidden] { display: none; } +.cypmd-search__clear:hover { color: #0b0c0c; background-color: #f3f2f1; } +.cypmd-search__clear:focus { + outline: 3px solid transparent; + color: #0b0c0c; + background-color: #ffdd00; + box-shadow: inset 0 -4px 0 #0b0c0c; +} + /* A Card widget keeps clear of whatever follows it. Without this, a second row of cards sits flush against the first and a heading after the cards touches them. */ .cpb-card { diff --git a/src/DfE.CheckPerformanceData.Web/wwwroot/js/search-clear.js b/src/DfE.CheckPerformanceData.Web/wwwroot/js/search-clear.js new file mode 100644 index 00000000..4aed371c --- /dev/null +++ b/src/DfE.CheckPerformanceData.Web/wwwroot/js/search-clear.js @@ -0,0 +1,46 @@ +// The search widget's optional clear button. Without JavaScript it is a reset button, which empties +// the box on its own. With it, the button is hidden while there is nothing to clear, and clearing +// puts the visitor back in the box. +(function () { + 'use strict'; + + function bind(form) { + var button = form.querySelector('[data-cypmd-search-clear]'); + if (!button || button.getAttribute('data-cypmd-clear-ready')) return; + button.setAttribute('data-cypmd-clear-ready', 'true'); + + // Instant search swaps the box for its own, so the box is looked up each time. + function box() { return form.querySelector('input[name="q"]'); } + + function update() { + var field = box(); + button.hidden = !field || field.value === ''; + } + + form.addEventListener('input', update); + + button.addEventListener('click', function (event) { + event.preventDefault(); + var field = box(); + if (!field) return; + field.value = ''; + // Instant search keeps its own copy of the text and closes its suggestions when told + // the box has changed. + field.dispatchEvent(new Event('input', { bubbles: true })); + field.focus(); + update(); + }); + + update(); + } + + function init() { + Array.prototype.forEach.call(document.querySelectorAll('form.cypmd-search'), bind); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } +})(); diff --git a/tests/DfE.CheckPerformanceData.E2ETests/ContentPages/InstantSearchWidgetE2ETests.cs b/tests/DfE.CheckPerformanceData.E2ETests/ContentPages/InstantSearchWidgetE2ETests.cs index df83d49c..4b25d599 100644 --- a/tests/DfE.CheckPerformanceData.E2ETests/ContentPages/InstantSearchWidgetE2ETests.cs +++ b/tests/DfE.CheckPerformanceData.E2ETests/ContentPages/InstantSearchWidgetE2ETests.cs @@ -86,7 +86,7 @@ private async Task AddAndSetAsync(Guid pageId, string path, string widgetType, D private static Dictionary SearchProps( string searchIn, bool instant, string scope = "", string noResults = "Nothing on this page", - string? showButton = null, string? buttonBelow = null) + string? showButton = null, string? buttonBelow = null, string? clearButton = null) { var props = new Dictionary { @@ -102,6 +102,7 @@ private static Dictionary SearchProps( if (instant) props["instant"] = "true"; if (showButton is not null) props["showButton"] = showButton; if (buttonBelow is not null) props["buttonBelow"] = buttonBelow; + if (clearButton is not null) props["clearButton"] = clearButton; return props; } @@ -385,7 +386,20 @@ public async Task WithoutJavaScript_ThePlainFormStillRendersAndSubmits() { var (url, _) = await SeedPageWithSectionsAsync(SearchProps("page", instant: true)); - await using var context = await Browser.NewContextAsync(new BrowserNewContextOptions + await using var context = await NewContextWithoutJavaScriptAsync(); + var page = await context.NewPageAsync(); + await page.GotoAsync($"{Fixture.BaseUrl}{url}"); + + await page.Locator("input[name='q']").FillAsync("evidence"); + await page.Locator("button[type='submit']").ClickAsync(); + + await page.WaitForURLAsync(new Regex(@"/search\?")); + Assert.Contains("scope=", page.Url, StringComparison.Ordinal); + } + + private async Task NewContextWithoutJavaScriptAsync() + { + var context = await Browser.NewContextAsync(new BrowserNewContextOptions { JavaScriptEnabled = false, }); @@ -400,15 +414,7 @@ await context.AddCookiesAsync([new Cookie Url = Fixture.BaseUrl, }]); } - - var page = await context.NewPageAsync(); - await page.GotoAsync($"{Fixture.BaseUrl}{url}"); - - await page.Locator("input[name='q']").FillAsync("evidence"); - await page.Locator("button[type='submit']").ClickAsync(); - - await page.WaitForURLAsync(new Regex(@"/search\?")); - Assert.Contains("scope=", page.Url, StringComparison.Ordinal); + return context; } // ============================================================ @@ -492,7 +498,102 @@ public async Task WithoutButtonBelow_TheButtonStaysBesideTheBox() } // ============================================================ - // 6b. Two instant widgets on one page each get their own input and their own menu. + // 6b. The author can add a clear button at the end of the box. It shows once there is + // something to clear, empties the box and puts the visitor back in it. + // ============================================================ + private ILocator ClearButton => + WidgetForm.GetByRole(AriaRole.Button, new() { Name = "Clear search" }); + + [Fact] + public async Task ClearButton_EmptiesTheBox_AndPutsTheVisitorBackInIt() + { + var (url, _) = await SeedPageWithSectionsAsync(SearchProps("site", instant: false, clearButton: "true")); + + await Page.GotoAsync($"{Fixture.BaseUrl}{url}"); + var box = WidgetForm.Locator("input[name='q']"); + + // Nothing to clear yet. + await Expect(ClearButton).ToBeHiddenAsync(); + + await box.FillAsync("evidence"); + await Expect(ClearButton).ToBeVisibleAsync(); + + // The button sits at the end of the box, inside it. + var boxBounds = await box.BoundingBoxAsync(); + var buttonBounds = await ClearButton.BoundingBoxAsync(); + Assert.NotNull(boxBounds); + Assert.NotNull(buttonBounds); + Assert.True(buttonBounds.X + buttonBounds.Width <= boxBounds.X + boxBounds.Width + 1 + && buttonBounds.X > boxBounds.X + boxBounds.Width / 2, + "the clear button is not at the end of the box"); + Assert.True(buttonBounds.Y >= boxBounds.Y - 1 + && buttonBounds.Y + buttonBounds.Height <= boxBounds.Y + boxBounds.Height + 1, + "the clear button is not inside the box"); + + await ClearButton.ClickAsync(); + + await Expect(box).ToHaveValueAsync(""); + await Expect(box).ToBeFocusedAsync(); + await Expect(ClearButton).ToBeHiddenAsync(); + // Clearing is not a search. + Assert.DoesNotContain("/search", Page.Url, StringComparison.Ordinal); + } + + [Fact] + public async Task ClearButton_OnInstantSearch_EmptiesTheBoxAndClosesTheSuggestions() + { + var (url, _) = await SeedPageWithSectionsAsync(SearchProps("page", instant: true, clearButton: "true")); + + await Page.GotoAsync($"{Fixture.BaseUrl}{url}"); + await Expect(Page.Locator("input.autocomplete__input")).ToBeVisibleAsync(); + await Expect(ClearButton).ToBeHiddenAsync(); + + await TypeAsync("evidence"); + await Expect(Options.First).ToBeVisibleAsync(); + await Expect(ClearButton).ToBeVisibleAsync(); + + await ClearButton.ClickAsync(); + + var box = Page.Locator("input.autocomplete__input"); + await Expect(box).ToHaveValueAsync(""); + await Expect(box).ToBeFocusedAsync(); + await Expect(Menu).ToBeHiddenAsync(); + await Expect(ClearButton).ToBeHiddenAsync(); + + // The box still searches after it has been cleared. + await box.FillAsync("uploading"); + await Expect(Options.First).ToContainTextAsync("Uploading files"); + } + + [Fact] + public async Task ClearButton_WorksWithoutJavaScript() + { + var (url, _) = await SeedPageWithSectionsAsync(SearchProps("site", instant: false, clearButton: "true")); + + await using var context = await NewContextWithoutJavaScriptAsync(); + var page = await context.NewPageAsync(); + await page.GotoAsync($"{Fixture.BaseUrl}{url}"); + + var box = page.Locator("input[name='q']"); + await box.FillAsync("evidence"); + await page.GetByRole(AriaRole.Button, new() { Name = "Clear search" }).ClickAsync(); + + await Expect(box).ToHaveValueAsync(""); + } + + [Fact] + public async Task WithNoClearButtonChoiceSaved_ThereIsNoClearButton() + { + var (url, _) = await SeedPageWithSectionsAsync(SearchProps("site", instant: false)); + + await Page.GotoAsync($"{Fixture.BaseUrl}{url}"); + await WidgetForm.Locator("input[name='q']").FillAsync("evidence"); + + await Expect(ClearButton).ToHaveCountAsync(0); + } + + // ============================================================ + // 6c. Two instant widgets on one page each get their own input and their own menu. // ============================================================ [Fact] public async Task TwoWidgetsOnOnePage_DoNotShareAnInputId() @@ -528,7 +629,7 @@ await AddAndSetAsync(id, "0.1", "heading", [Fact] public async Task EnhancedWidget_HasNoAxeViolations() { - var (url, _) = await SeedPageWithSectionsAsync(SearchProps("page", instant: true)); + var (url, _) = await SeedPageWithSectionsAsync(SearchProps("page", instant: true, clearButton: "true")); await Page.GotoAsync($"{Fixture.BaseUrl}{url}"); await Expect(Page.Locator("input.autocomplete__input")).ToBeVisibleAsync(); diff --git a/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/SearchWidgetRenderContractTests.cs b/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/SearchWidgetRenderContractTests.cs index 1263ebde..090237da 100644 --- a/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/SearchWidgetRenderContractTests.cs +++ b/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/SearchWidgetRenderContractTests.cs @@ -214,6 +214,37 @@ public void TheStackedRow_PutsTheButtonOnItsOwnLine() Assert.Contains("flex-direction: column;", css[rule..css.IndexOf('}', rule)]); } + // ----- Clear button ----- + + // Only when the author asks for it; a widget with no stored value has none. + [Fact] + public void ShowsTheClearButton_OnlyWhenAsked() + { + var view = View; + var guard = view.IndexOf("@if (clearButton)", StringComparison.Ordinal); + var clear = view.IndexOf("cypmd-search__clear", guard < 0 ? 0 : guard, StringComparison.Ordinal); + + Assert.Contains("var clearButton = Model.GetBool(\"clearButton\") ?? false;", view); + Assert.True(guard >= 0, "Search view does not guard the clear button on clearButton."); + Assert.True(clear > guard, "The clear button must sit inside the clearButton guard."); + } + + // A reset button empties the box with no JavaScript at all. It comes after the box, so the tab + // order is box, clear, search, and it is named for a screen reader rather than by its icon. + [Fact] + public void TheClearButton_IsAResetButtonAfterTheBox_NamedClearSearch() + { + var view = View; + var input = view.IndexOf("name=\"q\"", StringComparison.Ordinal); + var clear = view.IndexOf("cypmd-search__clear", StringComparison.Ordinal); + var submit = view.IndexOf("type=\"submit\"", StringComparison.Ordinal); + var tag = view[view.LastIndexOf("", clear, StringComparison.Ordinal)]; + + Assert.True(input < clear && clear < submit, "The clear button must sit between the box and the search button."); + Assert.Contains("type=\"reset\"", tag); + Assert.Contains("Clear search", tag); + } + private static string ReadSearchView() { var solutionRoot = FindSolutionRoot(AppContext.BaseDirectory); diff --git a/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetEditorContractTests.cs b/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetEditorContractTests.cs index 0aa8e81c..058b1bf9 100644 --- a/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetEditorContractTests.cs +++ b/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetEditorContractTests.cs @@ -113,6 +113,26 @@ public void Search_EditorOffersTheButtonBelowTheBox() Assert.Contains("GetBool(\"buttonBelow\") ?? false", b); } + // A clear button is useful with or without instant search, so the option sits outside the + // instant-search reveal too. A widget saved before the option existed has none. + [Fact] + public void Search_EditorOffersAClearButton() + { + var b = SearchBranch(); + var checkbox = b.IndexOf("name=\"props[clearButton]\" type=\"checkbox\"", StringComparison.Ordinal); + var label = b.IndexOf("Show a clear button in the search box", StringComparison.Ordinal); + var hidden = b.IndexOf("", StringComparison.Ordinal); + var instantFields = b.IndexOf("data-cpb-search-instantfields", StringComparison.Ordinal); + var instantFieldsEnd = b.IndexOf("props[noResultsText]", StringComparison.Ordinal); + + Assert.True(checkbox >= 0, "Search editor has no tick box for the clear button."); + Assert.True(label > checkbox, "The clear button tick box has no label after it."); + Assert.True(hidden > label, "Unticking would post nothing without a hidden false after the label."); + Assert.False(checkbox > instantFields && checkbox < instantFieldsEnd, + "The clear button tick box must not be hidden behind instant search."); + Assert.Contains("GetBool(\"clearButton\") ?? false", b); + } + [Fact] public void Search_EditorExposesNoResultsCopy() { diff --git a/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetPropsBuilderTests.cs b/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetPropsBuilderTests.cs index e9e229e3..515c044c 100644 --- a/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetPropsBuilderTests.cs +++ b/tests/DfE.CheckPerformanceData.UnitTests/ContentPages/WidgetPropsBuilderTests.cs @@ -166,6 +166,25 @@ public void Build_Search_TickedButtonBelow_IsStoredAsTrue() Assert.Equal("true", (string)props["buttonBelow"]!); } + // Widgets saved before the option existed have no stored value and no clear button, so the + // default is "false". + [Fact] + public void Build_Search_ClearButtonDefaultsToFalse_WhenNotPosted() + { + var props = WidgetPropsBuilder.Build("search", new Dictionary()); + + Assert.Equal("false", (string)props["clearButton"]!); + } + + [Fact] + public void Build_Search_TickedClearButton_IsStoredAsTrue() + { + var props = WidgetPropsBuilder.Build("search", + new Dictionary { ["clearButton"] = "true" }); + + Assert.Equal("true", (string)props["clearButton"]!); + } + // With instant search off the option is still stored as posted, but the widget ignores it and // always shows the button. [Fact]