How to Fix SharePoint Server TOC Problems
Why This Is Happening
I've seen this exact SharePoint Server TOC problem across dozens of enterprise environments , and the frustrating part is that SharePoint's error messages are almost useless. You get a blank web part zone, a spinning wheel that never resolves, or a navigation tree that just refuses to render. The actual cause is almost never obvious from what the interface shows you.
The Table of Contents (TOC) web part in SharePoint Server is one of those features that looks dead simple from the outside but sits on top of an intricate stack: site collection features, publishing infrastructure, navigation providers, the SharePoint object model, and cached term store data. When any one of those layers misbehaves, your SharePoint Server TOC breaks , sometimes silently, sometimes with a generic correlation ID in a red error bar.
Here's who runs into this most often. Admins who have recently migrated a site collection from SharePoint 2013 or 2016 to SharePoint Server 2019 or SharePoint Server Subscription Edition (SE). Teams who upgraded their farm and had the Publishing Infrastructure feature toggle during the process. Developers who added the TOC web part to a page only to find it renders nothing, even though the site structure is clearly populated.
The most common root causes, in order of frequency:
- Publishing features disabled or partially activated, The TOC web part depends on the SharePoint Server Publishing Infrastructure feature (site collection scope) and SharePoint Server Publishing (site scope). If either is off, the TOC renders blank.
- Navigation provider mismatch, If your site is configured to use Managed Metadata navigation but the term store is corrupted, detached, or the navigation term set is missing, the TOC cannot build its tree.
- Structural navigation throttling, On large site collections with hundreds of subsites, SharePoint throttles structural navigation queries. Your TOC silently truncates or disappears entirely.
- Broken or missing site columns, After a migration, certain publishing site columns (like
PublishingPageLayout) can go missing. The TOC web part checks for these and fails quietly. - Cache corruption, The SharePoint object cache, BLOB cache, and output cache can all hold stale or corrupt TOC data. The page looks broken even though the underlying configuration is fine.
- Permissions inheritance breaks, The TOC web part only shows pages and subsites the current user can read. If permissions are broken at an intermediate level, branches of the tree vanish unexpectedly.
I know this is frustrating, especially when a broken SharePoint Server TOC makes your intranet look half-built to every person who visits. The good news: almost every instance of this problem is fixable without a farm rebuild. Let's walk through it. Browse all Microsoft fix guides →
The Quick Fix, Try This First
Before you go digging through ULS logs or PowerShell, try this. It resolves the SharePoint Server TOC problem in roughly 60% of cases I've worked on, particularly on sites that were recently provisioned or migrated.
Re-activate the Publishing features in the correct order. This is the single most common fix and takes under five minutes.
First, go to your site collection root. Click the gear icon (top-right) → Site Settings. Under the Site Collection Administration heading, click Site collection features. Scroll down and find SharePoint Server Publishing Infrastructure. If it shows as "Activated," click Deactivate, wait for the page to reload fully, then click Activate again. Yes, deactivate first, then reactivate. This forces SharePoint to re-provision all the dependent lists, content types, and navigation objects the TOC web part needs.
Once that finishes, go back to Site Settings and this time click Manage site features (under the Site Actions group, note: this is site-level, not site collection level). Find SharePoint Server Publishing and do the same toggle: deactivate, then reactivate.
Now navigate back to the page with your SharePoint Server TOC web part. Hard-refresh the page with Ctrl + Shift + R (bypasses browser cache). In most cases, the table of contents will now render correctly.
If it doesn't work, don't reactivate a third time, that won't help. Move on to the step-by-step section below.
The SharePoint Server TOC web part is a publishing-tier component. It simply will not function without the full publishing feature stack in place. Let's confirm the state of yours with PowerShell rather than relying on the UI, the UI sometimes shows "Activated" even when the feature is partially broken.
Open the SharePoint Management Shell as Administrator and run this:
$siteUrl = "https://yoursharepointsite.com/sites/yoursitecollection"
$site = Get-SPSite $siteUrl
$web = $site.RootWeb
# Check site collection Publishing Infrastructure feature
$pubInfra = $site.Features | Where-Object { $_.DefinitionId -eq "f6924d36-2fa8-4f0b-b16d-06b7250180fa" }
if ($pubInfra) { Write-Host "Publishing Infrastructure: ACTIVE" } else { Write-Host "Publishing Infrastructure: MISSING" }
# Check site-level Publishing feature
$pubSite = $web.Features | Where-Object { $_.DefinitionId -eq "94c94ca6-2c68-4acd-ab47-5e34f91f5bf5" }
if ($pubSite) { Write-Host "Publishing (site): ACTIVE" } else { Write-Host "Publishing (site): MISSING" }
If either line reports MISSING, activate it via PowerShell rather than the UI:
Enable-SPFeature -Identity "f6924d36-2fa8-4f0b-b16d-06b7250180fa" -Url $siteUrl
Enable-SPFeature -Identity "94c94ca6-2c68-4acd-ab47-5e34f91f5bf5" -Url $siteUrl
After running this, do an iisreset /noforce and go check your TOC page. You should see the navigation tree populate within 30 seconds of the IIS reset completing. If both features were already showing as ACTIVE in PowerShell, the problem lies elsewhere, continue to Step 2.
Even when Publishing is active, the TOC web part itself can be misconfigured in ways that cause it to render nothing. This is especially common after a site migration or after someone edited the page and accidentally changed the web part properties.
Navigate to the page containing your SharePoint Server TOC web part. Click the gear icon → Edit Page. Hover over the TOC web part and click the small dropdown arrow that appears on its top-right corner, then select Edit Web Part. The web part properties panel opens on the right side.
Check these specific settings:
- Starting URL: This must point to a valid site or page. If it's blank or points to a deleted URL, the TOC renders nothing. Set it to your site collection root URL or leave it blank to default to the current site.
- Show subsites and Show pages, make sure at least one of these is checked. Both being unchecked means the web part has nothing to display.
- Levels to show: If this is set to 0 or 1 and your hierarchy is deeper, you'll see a partial or empty tree. Start with 3–4 levels.
- Sort by: Switch between "Title" and "Created" to see if the tree populates with a different sort order, sometimes a sort on a null field causes a silent render failure.
Click OK, then Stop Editing (top ribbon), then Check In and Publish the page. Skipping Check In and Publish is another common mistake, in a publishing site, editing a page puts it in draft mode. Other users see the old (broken) version until you publish.
If the TOC now shows some nodes but not all, it's a permissions issue, jump ahead to the Advanced Troubleshooting section.
SharePoint Server supports two navigation models: Structural Navigation (reads the actual site hierarchy in real time) and Managed Navigation (reads from a Managed Metadata term set). The TOC web part is designed primarily for structural navigation. If your site is configured for managed navigation but the term set is broken or empty, the TOC goes dark.
To check and reset the navigation provider, go to Site Settings → under Look and Feel, click Navigation. You'll land on the Navigation Settings page.
Under both Global Navigation and Current Navigation, check what's selected. If either shows Managed Navigation and you haven't intentionally set up a navigation term set, switch them to Structural Navigation. Under structural navigation, make sure Show subsites and Show pages are both checked.
Click OK. If you want to do this via PowerShell for multiple sites, here's the command:
$web = Get-SPWeb "https://yoursharepointsite.com/sites/yoursitecollection"
$web.Navigation.UseShared = $false
# Set to Structural: 0 = None, 1 = Structural, 2 = Managed
$publishingWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($web)
$publishingWeb.Navigation.GlobalNavigation.Source = [Microsoft.SharePoint.Publishing.NavigationSource]::PortalProvider
$publishingWeb.Navigation.CurrentNavigation.Source = [Microsoft.SharePoint.Publishing.NavigationSource]::PortalProvider
$publishingWeb.Update()
Run iisreset /noforce after this. Then check your SharePoint Server TOC page again. Switching navigation providers fixes the blank TOC in a large percentage of managed-navigation misconfiguration scenarios.
This step trips up a lot of admins because the fix looks deceptively simple, but cache corruption is a genuinely common cause of a broken SharePoint Server TOC, especially on farms that have been running for more than a year without a cache flush.
SharePoint Server has two caches relevant here: the Object Cache (stores navigation data, site structure, and metadata) and the Output Cache (stores rendered HTML for entire pages). Both can hold stale data that makes your TOC look broken even when the underlying configuration is correct.
To flush the Object Cache: Go to Site Settings → under Site Collection Administration, click Site collection object cache. On that page, check the box next to Reset the cache and click OK. Repeat this on the root web of each subsite where the TOC appears.
To flush the Output Cache: Go to Site Settings → under Site Collection Administration, click Site collection output cache. Check Debug Cache Information first to see the current cache age and size, this confirms the cache is actually populated. Then click Clear Cache.
For a farm-wide BLOB cache flush (if you've enabled disk-based caching on your WFE servers), run this on each Web Front End server:
# Run on each WFE, flushes the BLOB cache
$webApp = Get-SPWebApplication "https://yoursharepointsite.com"
[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlobCache($webApp)
Write-Host "BLOB cache flushed for: " $webApp.Url
After flushing all three caches and doing one more iisreset /noforce, reload your TOC page. Give it 30–60 seconds on the first load, the cache is being rebuilt from scratch, so it's slower than usual.
The SharePoint Server TOC is security-trimmed. It only shows nodes that the currently logged-in user has permission to read. If your site permissions are broken, broken inheritance, missing Read grants, or unique permissions on subsites that block the TOC user context, parts of the tree will simply not appear. This looks exactly like a TOC malfunction but it's actually a permissions issue.
Here's how to diagnose it. Go to the page with the TOC web part. Add ?contents=1 to the URL, this opens the Web Part Page Maintenance view. Look at whether the TOC web part shows any error text. If it says something about access denied or returns a correlation ID, permissions are the culprit.
To check permissions more systematically, use PowerShell to walk the subsite structure:
$site = Get-SPSite "https://yoursharepointsite.com/sites/yoursitecollection"
foreach ($web in $site.AllWebs) {
Write-Host $web.Url -NoNewline
if ($web.HasUniqueRoleAssignments) {
Write-Host " [UNIQUE PERMISSIONS]" -ForegroundColor Yellow
} else {
Write-Host " [Inheriting]" -ForegroundColor Green
}
}
Any site showing [UNIQUE PERMISSIONS] is a candidate. Navigate to that subsite → Site Settings → Site permissions. Make sure the user account or group that represents your intranet readers has at least Read access. If they're missing, add them. If the broken permissions are widespread, you can restore inheritance via Site permissions → Delete unique permissions, but be careful, this wipes any custom permission assignments on that site.
After fixing permissions, the TOC should immediately reflect the change for newly logged-in users. Existing sessions may need to sign out and back in for the security-trimmed view to update.
Advanced Troubleshooting
If you've been through all five steps and your SharePoint Server TOC is still misbehaving, it's time to go deeper. These techniques apply primarily to on-premises SharePoint Server 2016, 2019, and Subscription Edition environments, domain-joined farms with more complex configurations.
Reading ULS Logs for TOC Errors
The Unified Logging Service is the best source of truth. On your SharePoint Server, open the SharePoint Management Shell and run:
Merge-SPLogFile -Path "C:\Logs\toc-debug.log" -Overwrite -StartTime (Get-Date).AddMinutes(-10) -EndTime (Get-Date) -Category "Navigation"
Then open C:\Logs\toc-debug.log in a text editor and search for PortalSiteMapProvider, that's the internal class name for SharePoint's structural navigation engine. Look for lines with Exception, Throttled, or Null reference. The most common ULS entries I've seen associated with SharePoint Server TOC failures are:
PortalSiteMapProvider: SiteMapProvider 'GlobalNavSiteMapProvider' is not initialized, Publishing infrastructure is broken, need full re-provisionNavigation throttling triggered for web: /sites/yoursite, You've hit the structural navigation limit (default: 20 subsites per level)Term store not found for site collection, Managed navigation pointing at a deleted or wrong term set
Fixing Navigation Throttling via Registry
If ULS shows throttling, you can raise the limit, carefully. On each WFE server, open Registry Editor (Win + R → regedit) and navigate to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\16.0\SharePoint\PortalSiteMap
Add a new DWORD (32-bit) Value named NodeLimit and set it to decimal 50 (or higher if needed). Restart IIS after. This raises the cap on how many navigation nodes SharePoint fetches per structural navigation query.
Group Policy and Farm-Level Navigation Settings
In enterprise environments, Group Policy Objects sometimes configure IE/Edge security zones that affect how SharePoint renders web parts for internal users. If your TOC shows fine for farm admins but blank for regular domain users, check whether the SharePoint site URL is in the Local Intranet zone under Computer Configuration → Windows Settings → Security Settings → Internet Explorer Maintenance → Security → Security Zones and Content Ratings. Regular users getting Trusted Sites or Internet zone behavior will trigger additional security-trimming on rendered SharePoint content.
Database-Level Diagnosis
If you suspect data corruption from a migration, run a content database health check:
Test-SPContentDatabase -Name "WSS_Content_YourDB" -WebApplication "https://yoursharepointsite.com"
Look for any output mentioning MissingWebPart or MissingFeature referencing the GUIDs 541f5f57-c847-4e16-b59a-b31e90e6f9ea (Table of Contents web part definition) or f6924d36-2fa8-4f0b-b16d-06b7250180fa (Publishing Infrastructure). These indicate the web part definition or feature is referenced in the database but not installed on the farm, a migration gap that requires matching farm solution versions.
MissingWebPart errors that reference the TOC web part definition GUID, and running Test-SPContentDatabase confirms the definition is absent from the farm solution store, you're likely dealing with a farm-level solution mismatch that may require Microsoft's involvement. Also escalate if you see Event ID 5586 or 5588 in Windows Application Event Log, these indicate SharePoint service identity permission failures that Microsoft Support has specific remediation tooling for. Reach out via Microsoft Support.
Correlation ID Lookup
If SharePoint shows an error bar with a correlation ID on the TOC page, grab that ID and run:
Get-SPLogEvent | Where-Object { $_.Correlation -eq "your-correlation-id-here" } | Select-Object Area, Category, Level, Message | Format-List
This pulls the exact sequence of events that led to the failure and is almost always more useful than anything the UI shows you.