Pages

30 November, 2025

Sitecore XM to XM Cloud Migration to SitecoreAI Pathway

I have been talking about Sitecore XM to XM Cloud Migration tool this year. In the recent Sitecore Symposium 2025, Sitecore team was talking about SitecoreAI Pathway - a new solution to migrate to XM Cloud from legacy systems. Legacy system means that it is not just Sitecore XP but any content systems. 

About XM to XM Cloud Migration Tool: This was a technical utility focused on migrating existing Sitecore XP/XM content to XM Cloud. It was essentially a "Lift & Shift" tool for Sitecore customers only. It required developers to setup the tool, select the content and migrate to XM Cloud environment. 

There are many drawbacks of XM to XM Cloud migration tool. 

  • It only moves data, not the website
  • It perpetuates Monolithic content models
  • No support for component-first restructuring
  • It skips content modeling cleanup
With SitecoreAI Pathway, Sitecore promises that its AI feature can analyze the content whether it is on Sitecore XP or any other CMS like WordPress and transform the content model and import in the target XM Cloud. That is a promising feature to speed up the migration of legacy systems to XM Cloud. 

Sitecore has moved from a 'Lift & Shift' utility to a universal 'SaaS Extraction' service that cuts migration time by 70% and is included for free in your XM Cloud (SitecoreAI) subscription.

SitecoreAI Pathway: Key Strategy Shifts

  • Drastic Timeline Reduction (70% Faster): Historically, full migrations took 15 months (6 months for front-end, 9 for back-end). The new AI-driven approach slashes this entire timeline by 70%, turning year-long projects into quick sprints.
  • Front-End Acceleration (6 Months → 2 Months): The bottleneck of recreating the "look and feel" is solved by partner innovations and AI tools, reducing the design and implementation phase from half a year to just 8 weeks.
  • Generative AI for "Back-End" Heavy Lifting: Instead of manual database scripts, SitecoreAI Pathway uses Generative AI to automatically map, transform, and migrate thousands of pages. It handles the complexity of data mapping and workflow setup with high precision.
  • Universal Compatibility (Not Just for Sitecore): The tool is platform-agnostic. While it supports XP/XM migrations immediately, it effectively extracts content from competitors like Adobe, Optimizely, and Contentful, making it a universal "on-ramp" to Sitecore.
  • Simplified Access (Sitecore 360): There is no separate license fee for this capability. The tool is included directly in the Sitecore 360 subscription, removing procurement barriers and de-risking the decision to migrate.

Based on the Symposium announcements, I assume that this tool will follow this data migration pattern. 

  • Process the Site: The AI crawls your live public URL to analyze page structure and assets.
  • Generate the Blueprint: It automatically groups similar content pattern. 
  • Map Content Types: You visually link legacy page elements (like a "Title" header) to specific new XM Cloud components.
  • Migrate: The AI extracts, cleans, and restructures the content, effectively "re-platforming" it into the new headless architecture automatically.
Since SitecoreAI Pathway is not in GA, I am planning to explore this tool once it is available for Sitecore Partner. Will be sharing more in the upcoming blogs. 

20 November, 2025

Sitecore Scheduled Publish - Updated

Sitecore Scheduled Publish module helps the content authors to Schedule the publish of items in Sitecore. I maintain this repo with compatibility to latest Sitecore version. 

I updated the module with latest Sitecore version and created the package. Release in GitHub has been made. You can obtain the package for any on-prem or PaaS instance. 

Moreover, I maintain a list of Docker images for this module and it is being regularly pulled from the Docker Hub. I will publish new image to the Hub. Folks who are using Sitecore 10.4.1 can leverage this image for their Sitecore environment.  

You can download the package in the GitHub release. Sitecore_10.4.1 · nehemiahj/SCScheduledPublishing

Docker image will follow in a week. 

25 September, 2025

My Sitecore XM Cloud Cheat Sheet Just Hit 400 Downloads again! and Viewed 2500 times!

Recently, I received an email from Cheatography that my Sitecore XM Cloud Cheat Sheet has been downloaded by more than 400 times. 



Viewed 2500 times:




There are two set of cheat sheets related to XM Cloud CLI Commands. 

1. XM Cloud CLI Plugin Installation and Plugin Commands

In this sheet, you can get the instructions on how to install the plugin and various commands which are available in the plugin. 

2. XM Cloud CLI Command Samples

In this sheet, you will find CLI commands for common scenarios to use in your daily activities.

Want to grab it?

If you haven't seen it yet, or if you're tired of digging through documentation, you can get it for free right here: 



I plan to keep it updated as the CLI evolves. If you have any feedback or think a command is missing, message me on LinkedIn! Let’s make it even better together.

22 September, 2025

Resolution - Coveo for Sitecore - {"message":"Parameter 'viewEvent.referrer' is not a valid URI.","type":"InvalidParameter"}

In the previous blog post (Coveo for Sitecore - {"message":"Parameter 'viewEvent.referrer' is not a valid URI.","type":"InvalidParameter"}), I explained about a bad request error when Coveo Analytics requests were sent from Sitecore. 

As per Mozilla developer document, the HTTP Referer request header contains the absolute or partial address from which a resource has been requested. The Referer header allows a server to identify referring pages that people are visiting from or where requested resources are being used. This data can be used for analytics, logging, optimized caching, and morehttps://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referer

Even though, the android-app://com.google.android.googlequicksearchbox/ referrer is a valid URI, Coveo needs a URL. All URLs are URIs, but not all URIs are URLs; a URL is a subset of the broader URI category, which also includes URNs (Uniform Resource Names). Since Coveo support mentioned that they cannot change the logic at their side to accept the URI, we are left out with an option to override it in the source. 

As this is a Coveo Hive implementation, modifying the Coveo UA library script is not possible. When the View analytics is sent using UA library in Hive implementation, there is a section where we can override this value.


Before sending the view analytics data, we checked if the referrer is having problematic referrer, then we will just override it with custom value (like www.google.com as it is from Google app). Once this change is implemented, we were able to see success response instead of bad request from Coveo. 

Even Coveo support is left with only this option as the UA library cannot be updated. 

I hope it can be helpful for the folks in Coveo/Sitecore community. 

22 August, 2025

Coveo for Sitecore - {"message":"Parameter 'viewEvent.referrer' is not a valid URI.","type":"InvalidParameter"}

Recently, one of our client reported frequent error logs from Coveo. It was mostly for the Coveo view analytics request which returns bad request with the below error. 

View Request: /coveo/rest/ua/v15/analytics/view?visitor=

{"message":"Parameter 'viewEvent.referrer' is not a valid URI.","type":"InvalidParameter"}

We enabled the Coveo for Sitecore debug logs in \App_Config\Include\Coveo\Coveo.SearchProvider.Custom.config file. 


By enabling the debug log, it spit a huge amount of data to analyze. Upon checking one of the failure, we found the request header Referrer was having the URL with the correct format. 


We also found that user agent was always Android and that too version 9 or 10 which is pretty old. Either someone is using an old phone or someone is sending malicious requests using old user agents. 

When reaching out to Coveo support, they provided an assembly which can spit the payload also in the logs. After placing the assembly, we analyzed the payload and the referrer attribute was having Google App user agent. This referrer attribute which is in Coveo payload is different from the actual request. 

"referrer":"android-app://com.google.android.googlequicksearchbox/"

This is not having a right URL format so Coveo is responding with bad request. This Coveo payload referrer is injected by Coveo JavaScript framework. 

We do have Cloudflare as our edge layer but adding a rule to transform the referrer header may not work for Coveo payload. All the data is sent to Coveo support for further analysis. Waiting for their response. 

Regarding this referrer URL, Google provides the following information.

The android-app://com.google.android.googlequicksearchbox/ referrer indicates that a user has arrived on your site from the Google Search app on an Android device.
  • This happens when a user clicks a search result link from within the Google Search app, rather than from a standard web browser.

  • The android-app:// URI scheme identifies the referrer as an Android application.

  • com.google.android.googlequicksearchbox is the unique package name for the Google Search app on Android.

  • This traffic is essentially organic search traffic, and should be classified as such in your analytics.

25 April, 2025

XM to XM Cloud Migration tool - 2.1 - Using Command Line (CLI)

XM to XM Cloud Migration tool has two ways to use. GUI and CLI. In this blog post, we will go through CLI. 

CLI uses the same appsettings.json file which was created using GUI or it can be manually created for CLI usage. 

Content Command


Executing .\XMMigration.exe content will use the existing appsettings config and migrate the content.



Similarly, CLI can be used to migrate the users. In the below section, all the available commands and sub commands are listed.

Show help and usage information

 -?, -h, --help

Users Command


Retrieve domains from source instance. 
--retrieve-domains

Migrate users by passing domains (comma separated).
--migrate-userdomains <migrate-userdomains>

Username to Sitecore CM login of source instance.
--source-username <source-username>

Password to Sitecore CM login of source instance.
--source-password <source-password>

Show help and usage information.
-?, -h, --help


As a sample, to retrieve all the users under Sitecore domain, 

.\XMMigration.exe users --migrate-userdomains sitecore

Happy Migrating!!!

03 April, 2025

XM to XM Cloud Migration tool - 2.1 - Using GUI

XM to XM Cloud Migration tool has two ways to use. GUI and CLI. In this blog post, we will go through GUI. 

When we open the GUI app, it gives an option to choose Content and Media and/or Users. When users are selected to migrate, it will take the user email and invite them to the Sitecore Cloud Portal. 


In the next screen, we have the options to enter the Source CM Url, and an admin username and password. 


In the next screen, target XM Cloud details are provided. XM Cloud Environment ID, CM base URL, Client ID and Client Secret. In this screen, there is a clear instruction on where to get these details in XM Cloud application. Please note that credentials should be Organization credentials as it needs that level access to invite the users to the Cloud portal. 


If the source environment details are correct, then we will see the source content tree in the next screen. We can select the content, media, templates. Please avoid any items which are available out of the box in the target system. 

When we select Templates and Content, this tool automatically changes the order to migrate Templates first and then migrate the Content. 


In the next screen, if all the details are valid, we will get the success confirmation. If not, we will get failure to connect details.




Once we click on Migrate, tool will start doing the magic of extracting the content from the source environment as Protobuf method as it is a faster serialization mechanism, split it into small batches (RAIF) and migrate it to XM Cloud.


If everything goes well, we will get the success message and content will be migrated to the XM Cloud.


Appsettings.json

Whatever value which is entered via GUI are stored in Appsettings.json file. The same file can be used for migrating the content using CLI. We will discuss in another blog post on CLI. 

Happy Migrating!!!

19 February, 2025

XM to XM Cloud Migration tool - 2.1 - Overview of Application Configuration

This is a continuation of XM to XM Cloud Migration Tool blog posts. Previously I explained the installation process here. In this post, I will explain the application setting file. 

There is a file named appsettings.json created whenever we use this tool. When the tool is downloaded from Sitecore Developers portal, the archive extract does not have this configuration. It will be automatically created when we run the GUI or CLI version of this tool. 



When the json file is auto-created for the first time, it is loaded with default values. When we start using the GUI app, the values that are entered in the GUI app will be stored in this json file. 

Some of the mandatory fields are needed for the tool to work.

Source

  • SitecoreCmBaseUri - The URL to the Sitecore XM CM on-premise instance.
  • SitecoreCmUserName - The URL to the Sitecore XM CM on-premise instance.
  • SitecoreCmPassword - The password to login to the Sitecore XM CM on-premise instance.

Target

  • SitecoreXmCloudEnvironmentId - The environment ID of the XM Cloud instance.
  • SitecoreXmCloudCmBaseUri - The XM Cloud CM instance base url.
  • SitecoreXmCloudClientId - The XM Cloud Client ID.
  • SitecoreXmCloudClientSecret - The XM Cloud Client Secret.


Apart from these, we have a section where we can configure the content to be migrated to the target system. It is similar to SCS config or Unicorn. 


Name is an unique name for that section and Path is the Sitecore content tree path to be migrated to the target system. ContenTransferScope supports only one option at this time - ItemAndDescendants. This allows to migrate the item and its descendants under that folder or item to the target system. For MergeStrategy, there is only one option supported at this time – OverrideExistingItem which is going to overwrite it in the target system. 

As this tool supports the migration of content in batches, there are two additional settings by which we can control the transfer speed. By default, these settings are pre-populated with an optimal number. In case if you want to increase or decrease, we can make this change in the json file. 

RAIF Configuration - The Sitecore XM to XM Cloud Migration Tool transfers content and media via RAIFs (Batches). The settings below can be adjusted to better suit transfer needs. The default values have been set to provide a balanced transfer. Most customers will not need to adjust these values.

ItemsPerRaif define the amount of the transferred items. Too low setting of ItemsPerRaif can result in a large number of RAIF files being transferred, where too high of ItemsPerRaif can affect the transfer speed. ItemsPerRaif default is 10000 items per RAIF file. 

MediaSizeLimit - The media size limit per RAIF. User can set the value of the MediaSizeLimit property as needed. Assign only long value. No decimal or string. The default value is 104857600 which is 100MB. Example - A RAIF can contain maximum 100MB of media, if a media file exceeds the 100MB, the one media item will be in a single RAIF.



Additionally, the json configuration has settings related to inviting users to XM Cloud organization. This is used when we migrate the source Sitecore users to XM Cloud. 

Happy Migrating!!!
blockquote { margin: 0; } blockquote p { padding: 15px; background: #eee; border-radius: 5px; } blockquote p::before { content: '\201C'; } blockquote p::after { content: '\201D'; }