Fix “Another site or list is still using this content type. If you would still like to delete it, please remove the content type from all sites and lists and then try again” in SharePoint

Problem:
When trying to delete a content type from a list or site, received below error in SharePoint Online site:
Another site or list is still using this content type. If you would still like to delete it, please remove the content type from all sites and lists and then try again.

Another site or list is still using this content type. If you would still like to delete it, please remove the content type from all sites and lists and then try again.

Solution:

Find the references where a particular content type is being used and remove the content type association from the list. (You have to delete the items of the particular content type or change the content type of the items to remove the content type association from the list). Also, remove the items from the 1st stage (End-user) Recycle bin and the 2nd stage (Administrator) recycle bins!

PowerShell to Find a Content Type Usage in SharePoint Online:

This PowerShell script scans and exports content type references within a given site collection.

#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

Function Get-ContentTypeUsage()
{ 
    param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ContentTypeName,
        [Parameter(Mandatory=$true)] [string] $ReportFile        
    )

    Try {
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
        Write-host "Processing Site:"$SiteURL
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials
    
        #Get the content type from web
        $ContentTypeColl = $Ctx.Web.ContentTypes
        $Ctx.Load($ContentTypeColl)
        $Ctx.ExecuteQuery()
        
        #Array to hold result
        $Results = @()

        #Get all lists and libraries from the site
        $Ctx.Load($ctx.Web.Lists)
        $Ctx.Load($Ctx.Web.Webs)
        $Ctx.ExecuteQuery()

        Foreach($List in $Ctx.Web.Lists)
        {
            $Ctx.Load($List.ContentTypes)
            $Ctx.ExecuteQuery()
       
            #Check if the content type exists in the list        
            $ContentType = $List.ContentTypes | Where {$_.Name -eq $ContentTypeName}
            If($ContentType -ne $Null)
            { 
                $Results += New-Object PSObject -Property @{
                'Site' = $SiteURL
                'List Name' = $List.Title
                'URL'= $SiteURL+$List.DefaultViewURL
                }
                Write-host "Found Content Type Reference at '$($List.Title)' in site '$SiteURL'" -f Green
            }
        }
        #Export Results to CSV
        $Results | Export-Csv $ReportFile -Append -NoTypeInformation

        #Process subsites - Call the function recursively
        If($Ctx.Web.Webs.Count -gt 0)
        {
            Foreach ($web in $Ctx.Web.Webs)
            {
                Get-ContentTypeUsage -SiteURL $web.Url -ContentTypeName $ContentTypeName -ReportFile $ReportFile
            }
        }
  }
    Catch {
        write-host -f Red "Error Deleting Content Type!" $_.Exception.Message
    }
}

#Set parameter values
$SiteURL="https://crescent.sharepoint.com/"
$ContentTypeName="Project Template"
$ReportFile="C:\Temp\ContentTypeRef.csv"

#Delete the Output report file if exists
if (Test-Path $ReportFile) { Remove-Item $ReportFile }

#Call the function
Get-ContentTypeUsage -SiteURL $SiteURL -ContentTypeName $ContentTypeName -ReportFile $ReportFile

Here is a similar solution for SharePoint on-premises: How to resolve Content Type in Use Error in SharePoint?

Salaudeen Rajack

Salaudeen Rajack is a SharePoint Architect with Two decades of SharePoint Experience. He loves sharing his knowledge and experiences with the SharePoint community, through his real-world articles!

Leave a Reply

Your email address will not be published.