Upgrading SXA sites from 9.3 to 10.2 fails due to missing "Redirects" item


Description

Upgrading SXA sites to 10.2 might fail with an error. The issue occurs due to the missing Redirects, /sitecore/templates/Feature/Experience Accelerator/Redirects/Redirect Maps template item under the Settings item of the site.

During the upgrade, the "Change Redirect Maps root item template" script tries to get and convert "Redirects" items from "Redirect Map Grouping" to "Redirect Maps" templates for each site and it fails.

Solution

To resolve the issue, upgrade your instance to SXA 10.3.0 or later.

Alternatively, you can use the following steps:

  1. Navigate to the /sitecore/system/Modules/PowerShell/Script Library/SXA/SXA - Upgrade/Functions/Upgrade Scripts/Change Redirect Maps root item template item.
  2. Click Evaluate session label.
  3. Put the following script in the Script body - Source code written in PowerShell [shared] field:
      Import-Function Get-UniqueItem
        Import-Function Select-SingleItemFromEachGroup
        Import-Function Get-AllSxaSite
        Import-Function Get-SettingsItem
        Import-Function Get-ItemByIdSafe
        Import-Function Invoke-SiteAction
        
        [Sitecore.Data.ID]$redirectMapsTemplateID = "{C2DC4690-AF44-48C7-BB21-90D1AD246732}"
        
        function ShouldRun () {
            [Item[]]$sites = Get-SitesWithoutInsertOption
            $sites.Length -gt 0
        }
        
        function Get-DialogParameters () {
        }
        
        function Get-SitesWithoutInsertOption() {
            Get-AllSxaSite | % {
                $settingsItem = Get-SettingsItem $_
                [Sitecore.Data.ID]$redirectMapGroupID = "{E1CF805E-7F49-4EC9-A25A-182DC798CB5F}"
                $redirectsRoot = $settingsItem.Children | ? { [Sitecore.Data.Managers.TemplateManager]::GetTemplate($_).InheritsFrom($redirectMapGroupID) } | Select-Object -First 1
                if($redirectsRoot){
                    $isNewTemplate = [Sitecore.Data.Managers.TemplateManager]::GetTemplate($redirectsRoot).InheritsFrom($redirectMapsTemplateID)
                    if($redirectsRoot -ne $null -and $isNewTemplate -eq $false){
                        $redirectsRoot
                    }
                }
            }
        }
        
        function Invoke-UpgradeStep {
            [CmdletBinding(SupportsShouldProcess = $true)]
            param(
                [Parameter(Mandatory = $true, Position = 0)]
                $arguments
            )
            
            process {
                $result = New-Object Sitecore.XA.Foundation.Upgrade.Model.UpgradeStepResult
                try {
                    Get-SitesWithoutInsertOption | % {
                        if ($pscmdlet.ShouldProcess("$($_.Name)", "Change template of Redirects item")) {
                            Write-Host "Changing Redirects item template for '$($_.Paths.Path)'"
                            $redirectMapsTemplate = Get-Item master: -ID $redirectMapsTemplateID
                            $_.ChangeTemplate($redirectMapsTemplate)
                        }
                    }
                    $result.Result = "Success"
                }
                catch {
                    $result.Result = "Error"
                    $result.Message = $Error[0]
                    $result.ErrorObject = $Error[0]
                }
                finally {
                    $result
                }
            }
        }
  4. Update the existing content as described in the SXA upgrade guide.