What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
Architecture
One instance with several sitemaps, page folders, or several instances with a content hub: how to choose, and how the choice affects locales, permissions, API keys, webhooks, preview and data regions.
When one organization runs several sites, brands, regions or channels, the first architecture decision is how many Agility instances to use. This page helps you decide between one instance with several sitemaps and several instances, and explains how that choice interacts with locales, permissions, API keys, webhooks and preview.
Using Agility for Multiple Sites describes each option. This page is about choosing.
| Option | What it is | Typical fit |
|---|---|---|
| One instance, one sitemap | One site | A single website, even with several locales |
| One instance, several sitemaps | Each site is a sitemap with its own pages and domains, sharing models, components and content | Sub-brands, microsites or regional sites run by one team |
| One instance, page folders | Each site is a folder in one sitemap, on one domain and one codebase | Microsites under a main domain, such as /events or /careers |
| Several instances | Each site is fully separate in content, assets, editors, security and workflow | Brands or regions with separate teams, rules or data |
| Several instances plus a content hub | Separate site instances, plus one instance holding the content every site shares | Separate teams that still share products, locations or legal text |
Using a locale to represent a different site is possible, but locales are not designed for it. Use locales for languages and regions of the same site. See Choosing a Localization Strategy.
| One instance, several sitemaps | Several instances | |
|---|---|---|
| Models, components, page models | Shared | Defined per instance. Keep them in step yourself, for example with the CLI |
| Content | One pool, organized by folders and naming | Separate per instance |
| Reusing content across sites | Link to it directly | Read it from the other instance through its API, or copy it |
| Editors see | Every page and content list in the instance, though permissions limit what they can open or change | Only the instances they have access to |
| Permissions | Roles per instance, raised per page, content list and asset folder | Separate roles per instance |
| Workflow and approvals | Set per page and content list | Fully separate per instance |
| API keys | One set: a fetch key reads all published content in the instance | Separate keys per instance |
| Webhooks | One set for the instance; your endpoint works out which site is affected | Separate per instance |
| Domains | Mapped per sitemap | Per instance |
| Preview | A preview deployment per sitemap | Per instance |
| Data region | One region for all sites | Chosen per instance, so sites can live in different regions |
| Deployment | One codebase can serve every sitemap | A separate deployment per instance |
| Licensing | Additional sitemaps can be added to a subscription | Each instance needs its own subscription |
Licensing details change. Check the impact with Agility before you decide.
Work through these in order. The first "yes" that points to separate instances usually settles it.
If you chose separate instances but the sites still share content, add a content hub instance for that content. See Building a Content Hub.
Tenancy and localization are separate decisions that stack:
Choosing a Localization Strategy covers the field, page and instance levels in detail.
Roles are assigned per instance. In a shared instance, you separate sites with item-level permissions:
These controls limit what people can change, not what they can see listed. See Roles and Permissions Matrix and the "Regional and locale teams" recipe in Role Design Recipes.
pageID, which belongs to one sitemap. A content event carries a contentID and referenceName, and that item can appear on any site. Clear the item's cache on every site that can use it. See Webhook Events and Payload Reference.sitemap/flat/{channel}) and include the site in every cache key.sync command copies models and content from a source instance to a target. Synced items get new content IDs on the target, and a blank target is the reliable case. Plan for links and IDs to change. See CLI - CI/CD Integration Guide.