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
Content Architecture
How to build categories, tags and other taxonomies in Agility: Drop-down Lists vs terms lists vs structure, modeling a terms list, filtering by taxonomy, locales, and the governance rules that keep it clean.
A taxonomy is the set of labels you use to group and find content: categories, tags, topics, audiences, regions, product lines. Get it right and editors file content in seconds, your site can filter and build landing pages from it, and new channels can reuse it. Get it wrong and you end up with three spellings of every tag and filters that miss half the content.
In Agility you build a taxonomy from the same parts as the rest of your content model: Drop-down List fields, content lists, and Linked Content fields. This page shows how to choose between them and how to keep the result healthy as it grows.
Treat each way of grouping content (topic, audience, region, format) as its own dimension, and pick a tool per dimension.
| Tool | How it works | Who changes the terms | Best for |
|---|---|---|---|
| Drop-down List field | Fixed choices defined in the model; the API returns the selected choice's value | Developers or admins, by editing the model | Small, stable sets your code depends on: content type, layout variant, priority |
| Linked Content to a terms list, single (Dropdown List render type) | Each term is an item in a content list; the item stores one term's content ID | Editors, by adding items to the list | One category per item |
| Linked Content to a terms list, many (Search List Box render type) | As above, storing a comma-separated list of term IDs | Editors | Tags and topics, several per item |
| Structure (separate lists, sitemaps) | Where the content lives is the classification | Developers or admins | A dimension where every item belongs to exactly one value, such as a destination site |
Rules of thumb:
The basic setup is described in Tagging Content in Agility: a content model for the term, a content list built from it, and a Linked Content field on the content you want to classify. For a taxonomy that will grow, give the term model a few more fields than a title:
| Field | Type | Why |
|---|---|---|
Title | Text | The label editors and visitors see |
Slug | Text | A stable, URL-safe key for term pages and filters in URLs |
Description | Multi-Line Text | What belongs under this term, so editors file content consistently. It also helps search engines and AI agents |
Active | True/False (optional) | Retire a term without deleting it |
Then add the Linked Content field to each model that uses the taxonomy:
Tags_ValueField and Tags_TextFieldUse one terms list per dimension (Topics, Audiences, Regions) rather than one big Tags list with prefixes like audience- and region-. Separate lists keep each picker short and let you give each dimension its own fields and rules.
Most taxonomies only need one level. If you need two (for example Category > Subcategory), model each level as its own list, and give the lower level a Dropdown List link to its parent. Content then links to the most specific level, and your front end walks up to the parent. Avoid deeper trees unless you have a real navigation need: every extra level is more for editors to maintain and more for code to resolve.
The companion value field is the cheapest way to filter, because it stores plain content IDs and needs no expansion.
For a single category:
fields.category_ValueField[eq]"110"
For tags (a comma-separated list of IDs), use contains:
fields.tags_ValueField[contains]"32"
Test contains against your own data before you build on it, so you know exactly which items match. Operator details are in GraphQL & Rest API Filtering.
Other things to know:
take on every list request: the Content Fetch API returns 10 items by default and GraphQL lists return 50. The maximum per request is 250.contentID, so the IDs stored on your content still match. Translate the term's title per locale, and consider marking the Slug field Constant across all languages if your URLs use the same slug in every locale. See Choosing a Localization Strategy.Taxonomies decay through small, reasonable-looking additions. Decide these before launch:
Tags list doing four jobs. Split it by dimension.