User Keywords
This page defines the user-extensible vocabulary for flexible content tagging and organization. User keywords are configuration-driven and defined in config/app-default-config.json under ngdpbase.userKeywords.
Vocabulary model note (2026-07): user keywords are the human tagging bucket — what a page is about, chosen by people. Two kinds of terms no longer belong here:
- Lifecycle state (
draft/review/published) now lives in the single-valuedstatus:frontmatter field, set via the Status select in the editor. Absentstatusmeans published. Legacy pages still carrying these as keywords are migrated automatically on save.capture(pages created by the capture bookmarklet) is machine provenance and now lives in System Keywords.
User Keywords is part of Page Metadata Documentation
"ngdpbase.maximum.user-keywords":
User Keywords (enabled=true)
User-defined keywords for content tagging and organization| Label | Description | Category | Enabled | Restrict Editing | Allowed Roles |
|---|---|---|---|---|---|
default |
Default keyword with no special restrictions | general | Yes | No | - |
"ngdpbase.maximum.user-keywords":
Configuration Structure
Showing Current User Keywords
User Keywords
User-defined keywords for content tagging and organization| Label | Description | Category | Enabled | Restrict Editing | Allowed Roles |
|---|---|---|---|---|---|
default |
Default keyword with no special restrictions | general | Yes | No | - |
Configuration Properties
Each user keyword has the following properties:
| Property | Type | Description |
|---|---|---|
label | string | The keyword value used in metadata user-keywords array |
description | string | Human-readable description of the keyword's purpose |
category | string | Grouping category (e.g., "general", "access", "status", "subject") |
enabled | boolean | Whether the keyword is active and available for use |
restrictEditing | boolean | If true, restricts who can edit pages with this keyword |
allowedRoles | array | Roles allowed to edit (only used if restrictEditing is true) |
schemaOrg | string | Optional schema.org type mapping for semantic web |
Usage in Page Metadata
User keywords are used in the user-keywords frontmatter field as an array:
---
title: Example Medical Research Page
system-category: documentation
status: review
user-keywords:
- medicine
- research
slug: medical-research-example
---
Metadata Rules
- Maximum Keywords: Up to 5 keywords per page (configurable via
ngdpbase.maximum.user-keywords) - Case Sensitivity: Keywords are case-insensitive
- Array Format: Must be YAML array format
- Validation: Warnings for keywords not in configuration (but still allowed)
User Keywords vs System Categories
| Aspect | System Categories | User Keywords |
|---|---|---|
| **Field** | system-category | user-keywords |
| **Format** | Single value (string) | Multiple values (array) |
| **Purpose** | Storage location control | Content tagging & classification |
| **Effect** | Determines /pages/ or /required-pages/ | No storage effect for most keywords — exception: private moves the page to a private location |
| **Configuration** | ngdpbase.systemCategories | ngdpbase.userKeywords |
| **Maximum** | 1 required | Up to 5 optional |
| **Extensibility** | Admin-controlled | User-extensible (Editor+ can propose) |
Example Usage
---
title: Introduction to Oceanography
system-category: documentation # ← Single category (WHERE to store)
user-keywords: # ← Multiple keywords (WHAT it's about)
- oceanography
- geology
slug: intro-oceanography
---
Backend Integration
UI Population
The backend reads ngdpbase.userKeywords configuration to:
- Populate keyword dropdown/autocomplete in the editor
- Validate keywords during page save
- Generate keyword suggestions based on content
- Enforce access control rules
Keyword Validation
The ValidationManager can validate user keywords:
- Check if keyword exists in configuration
- Warn about unknown keywords (but allow them)
- Enforce maximum keyword limit
- Validate access control restrictions
Proposing New Keywords
Users with Editor role or higher can propose new keywords:
- Identify Need: Determine if existing keywords don't fit
- Check Documentation: Review this page for existing keywords
- Create Proposal: Document the keyword purpose and usage
- Submit Request: Contact admin or create a ticket
- Admin Reviews: Admin adds to custom config if approved
Proposal Template
**Keyword**: astronomy
**Category**: subject
**Description**: Astronomy and space science content
**Reason**: We have 15 pages about astronomy with no appropriate keyword
**Schema.org Mapping**: (optional) AstronomicalObject
Keyword Usage Statistics
>
Note: Statistics tracking not yet implemented - Future Enhancement
Migration Notes
From Old System
If migrating from a different keyword system:
- Map Old → New: Create mapping of old keywords to new keywords
- Update Metadata: Batch update all pages with new keywords
- Add Custom Config: Add frequently-used old keywords to custom config
- Document Changes: Update this page with migration details
Related pages
- System Keywords - System category definitions
- System Keywords - System-level keywords
- ValidationManager Documentation
- Access Control Lists - ACL system overview
No comments yet.