The Term Store in SharePoint is a centralized metadata management system that helps organize content with consistent taxonomy. Itβs essential for:
β
Tagging documents & lists π·οΈ
β
Improving search & navigation π
β
Enforcing governance & compliance π‘οΈ
π What is the Term Store?
The Managed Metadata Service (MMS) stores terms (keywords) in term sets (groups). These can be:
- Enterprise-wide (global, managed by admins)
- Local (site-specific, managed by site owners)
Key Concepts:
| Term | A keyword/tag (e.g., “Finance”) |
|---|---|
| Term Set | A group of related terms (e.g., “Departments”) |
| Term Group | A container for term sets (e.g., “Corporate Taxonomy”) |
π οΈ How to Access the Term Store
For Admins (Global Term Store)
- Go to SharePoint Admin Center (admin.microsoft.com)
- Navigate to Term Store under Content Services
For Site Owners (Local Terms)
- Go to Site Settings βοΈ β Term Store Management
π Creating & Managing Term Sets
1οΈβ£ Create a Term Group
- Open Term Store
- Click + New Group
- Name it (e.g., “HR Taxonomy”)
- Assign contributors (who can edit terms)
2οΈβ£ Create a Term Set
- Select a Term Group
- Click + New Term Set
- Configure:
- Name (e.g., “Job Roles”)
- Description
- Owner (who manages it)
- Submission Policy (open or closed)
3οΈβ£ Add Terms
- Select a Term Set
- Click + New Term
- Add terms (e.g., “Manager,” “Analyst,” “Director”)
- (Optional) Add child terms (hierarchical structure)
βοΈ Advanced Term Store Settings
| Setting | Purpose |
|---|---|
| Term Set Properties | Define stakeholders, contact email, submission policy |
| Term Properties | Add custom descriptions, synonyms, translations |
| Pin Term Set | Reuse terms across sites (Enterprise Keywords) |
| Term-Driven Pages | Create dynamic pages based on terms |
π Using Term Sets in SharePoint
In Document Libraries/Lists
- Add a Managed Metadata column
- Choose a Term Set (e.g., “Departments”)
- Users can now tag items with approved terms
In Navigation & Search
- Metadata-based refiners (filter search results)
- Term-driven navigation (dynamic menus)
π Best Practices for Term Store Management
β Plan a Clear Hierarchy (e.g., Location > Country > City)
β Use Closed Term Sets (prevents random tags)
β Assign Term Owners (for governance)
β Avoid Too Many Nested Terms (keep it simple)
β Sync with Microsoft 365 Groups (for Teams/Outlook consistency)
π₯ Term Store vs. Enterprise Keywords
| Term Store | Enterprise Keywords |
|---|---|
| β Structured & controlled | β Free-form tagging |
| β Requires admin setup | β Anyone can add tags |
| β Great for compliance | β Good for ad-hoc collaboration |
π‘ Pro Tip: Use bothβTerm Sets for governed terms and Enterprise Keywords for flexibility.
π οΈ Troubleshooting Term Store Issues
β “Term Set Not Available”?
β Check if the Term Group is shared with the site
β “User Cannot Add Terms”?
β Verify permissions in Term Store
β “Changes Not Appearing”?
β Wait for metadata cache refresh (or force it via PowerShell)
Hereβs a practical example of Terms, Term Sets, and Groups in SharePointβs Term Store, structured for real-world use cases:
π Example Term Store Structure
Term Group: Corporate Taxonomy
(Managed by IT/Content Managers)
1οΈβ£ Term Set: Departments
(Used in document metadata, site navigation)
- Finance
- Accounting
- Budgeting
- Auditing
- HR
- Recruitment
- Training
- Benefits
- IT
- Support
- Development
- Security
2οΈβ£ Term Set: Project Status
(Used in lists, task tracking)
- Not Started
- In Progress
- On Hold
- Completed
- Archived
3οΈβ£ Term Set: Locations
(Hierarchical, for global sites)
- North America
- USA
- New York
- California
- Canada
- Europe
- Germany
- France
π Example Term Set: Document Types
Term Group: Marketing
(Managed by Marketing Team)
- Brochures
- Whitepapers
- Technical
- Business
- Social Media
π§ How to Apply These Examples
- Document Libraries:
- Add a Managed Metadata column “Department” β Link to Departments term set.
- Users can tag files with “Finance > Budgeting” or “HR > Training”.
- Lists (e.g., Projects):
- Add a “Status” column β Link to Project Status terms.
- Navigation:
- Create a term-driven menu using Locations (e.g.,
/sites/NYfor New York).
- Search Refinement:
- Users can filter results by “Document Type > Whitepapers > Technical”.
π‘ Best Practices for Your Terms
- Keep terms concise (e.g., “HR” instead of “Human Resources Department”).
- Use hierarchies sparingly (avoid more than 3 levels deep).
- Add synonyms (e.g., “IT” = “Information Technology”).
- Lock term sets (if terms shouldnβt be edited by end-users).
π Real-World Use Case
A Project Management Site might use:
- Term Set: “Client Industries”
- Healthcare
- Education
- Manufacturing
- Term Set: “Project Phases”
- Discovery
- Design
- Development
- Launch
Result: Documents tagged with Client Industries > Healthcare and Project Phases > Design are instantly filterable across sites.
π PowerShell Scripts for SharePoint Term Store Management
Here are practical PowerShell examples to create and manage terms in SharePoint’s Managed Metadata Service (Term Store):
Prerequisites
# Load SharePoint modules
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
# Connect to SharePoint Online (if using SPO)
Connect-PnPOnline -Url "https://yourtenant.sharepoint.com" -Interactive
1οΈβ£ Create Term Group, Term Set, and Terms
# Load the Taxonomy assembly
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Taxonomy.dll"
# Get the Taxonomy Session
$session = Get-SPTaxonomySession -Site "http://yourserver"
# Get the Term Store
$termStore = $session.TermStores["Managed Metadata Service"]
# Create a new Term Group
$group = $termStore.CreateGroup("Corporate Taxonomy", "GUID-IF-NEEDED")
# Create a Term Set under the group
$termSet = $group.CreateTermSet("Departments", "GUID-IF-NEEDED", 1033) # 1033 = English LCID
# Add terms to the Term Set
$financeTerm = $termSet.CreateTerm("Finance", 1033)
$hrTerm = $termSet.CreateTerm("HR", 1033)
$itTerm = $termSet.CreateTerm("IT", 1033)
# Add child terms
$financeTerm.CreateTerm("Accounting", 1033)
$financeTerm.CreateTerm("Budgeting", 1033)
$hrTerm.CreateTerm("Recruitment", 1033)
# Commit changes
$termStore.CommitAll()
2οΈβ£ Import Terms from CSV
# Sample CSV format (Path,Name,Description)
$terms = Import-Csv -Path "C:\terms.csv"
foreach ($term in $terms) {
$parent = $null
$pathParts = $term.Path.Split('\')
for ($i = 0; $i -lt $pathParts.Length; $i++) {
$currentTermName = $pathParts[$i]
if ($i -eq 0) {
# Check if term exists at root level
$existingTerm = $termSet.Terms | Where-Object { $_.Name -eq $currentTermName }
if ($null -eq $existingTerm) {
$parent = $termSet.CreateTerm($currentTermName, 1033)
} else {
$parent = $existingTerm
}
} else {
$existingChild = $parent.Terms | Where-Object { $_.Name -eq $currentTermName }
if ($null -eq $existingChild) {
$parent = $parent.CreateTerm($currentTermName, 1033)
} else {
$parent = $existingChild
}
}
}
if (-not [string]::IsNullOrEmpty($term.Description)) {
$parent.SetDescription($term.Description, 1033)
}
}
$termStore.CommitAll()
3οΈβ£ Get All Terms (Reporting)
$session = Get-SPTaxonomySession -Site "http://yourserver"
$termStore = $session.TermStores["Managed Metadata Service"]
$termStore.Groups | ForEach-Object {
$group = $_
Write-Host "Group: $($group.Name)"
$group.TermSets | ForEach-Object {
$termSet = $_
Write-Host " TermSet: $($termSet.Name)"
function Process-Terms($terms, $indent) {
$terms | ForEach-Object {
$term = $_
Write-Host "$indent- $($term.Name) (ID: $($term.Id))"
if ($term.Terms.Count -gt 0) {
Process-Terms $term.Terms "$indent "
}
}
}
Process-Terms $termSet.Terms " "
}
}
4οΈβ£ Delete Terms
$termStore = (Get-SPTaxonomySession -Site "http://yourserver").TermStores["Managed Metadata Service"]
$group = $termStore.Groups["Corporate Taxonomy"]
$termSet = $group.TermSets["Departments"]
# Delete specific term
$term = $termSet.Terms["OldTermName"]
$term.Delete()
# Delete entire term set (use with caution!)
$termSet.Delete()
$termStore.CommitAll()
5οΈβ£ SharePoint Online (PnP PowerShell)
# Create a new term group
New-PnPTermGroup -Name "Corporate Taxonomy"
# Create term set
New-PnPTermSet -Name "Departments" -TermGroup "Corporate Taxonomy"
# Add terms
$termSet = Get-PnPTermSet -Identity "Departments" -TermGroup "Corporate Taxonomy"
New-PnPTerm -TermSet $termSet -Name "Finance" -Lcid 1033
New-PnPTerm -TermSet $termSet -Name "HR" -Lcid 1033
# Add child terms
$financeTerm = Get-PnPTerm -Identity "Finance" -TermGroup "Corporate Taxonomy" -TermSet "Departments"
New-PnPTerm -TermSet $termSet -Name "Accounting" -Lcid 1033 -ParentTerm $financeTerm
Best Practices for PowerShell Management
- Always test scripts in a development environment first
- Use
-WhatIfparameter when available for destructive operations - Back up your term store before major changes
- Schedule large imports during off-hours
- Use error handling with
try/catchblocks
For more advanced scenarios, you can combine these with CSOM or REST API calls for maximum flexibility in your term management workflows.
π Learning Resources
- Microsoftβs Term Store Guide π
- PnP Taxonomy Best Practices π‘
- Term Store PowerShell Cmdlets β¨οΈ
π― Final Thoughts
A well-managed Term Store ensures consistent tagging, better search, and smoother compliance. Start small, define key term sets, and expand as needed!
π¬ Need help? Drop a question below! π

Leave a Reply
You must be logged in to post a comment.