---
title: Migrate hosting regions on CMS 12 or 13
slug: dxp/docs/migrate-hosting-regions-on-cms-12-or-13
docTags: 
createdAt: 2026-08-18T20:17:21.791Z
---

Use the **Project Migration** tab to move a CMS 12 or 13 project to a different hosting region without affecting your live site.

After you initiate the migration process with your Optimizely Customer Success representative, the **Project Migration** tab displays in your Developer portal project. This migration creates a project in your new region as the migration target.

![Screenshot of the Project Migration tab in the Developer portal where Start Migration provisions the target project](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/3NcQMvZbzeT7Q5p50BMnk-20260818-201850.png "Screenshot of the Project Migration tab in the Developer portal where Start Migration provisions the target project")

## VPN, certificates, SendGrid, and ADE environments

Review the following considerations before you start a migration:

- If a warning displays about certificates, Virtual Private Networks (VPN), or Advanced Delivery Environments (ADE), contact Optimizely Support to proceed.
- If your project uses the ADE environment, it does not display in **Project Migration**. Contact Optimizely Support to provision an ADE environment in your new project and migrate content.
- If you use a VPN in the current project, provision and configure a VPN for the target project. Optimizely deletes the old VPN connection when you complete the migration.
- Configure and link a SendGrid service to the new project. Contact Optimizely Support to proceed.

Click **Abort Migration** to delete the target project at any time if you no longer need it.

## Deploy and validate the target environment

1. [Generate API keys](docId:2zbogiRaPvgO24HKMj_9e) for your deployment tooling to deploy [code packages](docId:75Srln6lHX6dCnlzBAH3Q) and test them in the target environment.
2. Deploy the updated code to the environment and validate that it works. Add and configure the `EPiServer.CloudPlatform.Cms` package as described in [Deploy a CMS site](docId\:RIn0cobbPnEmEafa16av8). Start with the Integration environment, then continue with Preproduction and Production.

::Image[]{src="https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/RnX02_KgeIK82tWvqeM5r-20260818-201851.png" size="100" alt="Screenshot of the Project Migration copy-content controls where content is copied from the source project to the target project" caption="Screenshot of the Project Migration copy-content controls where content is copied from the source project to the target project" isUploading="false" width="1136" height="868" darkWidth="1136" darkHeight="868" showCaption="true" indent="1"}

:::Paragraph{indent="1"}
Consider the following options during deployment:
:::

:::Paragraph{listStyleType="disc" indent="2"}
Copy content from the source to the target project to verify compatibility with the same data. Any environment is valid as the source.
:::

:::Paragraph{listStyleType="disc" indent="2"}
Copy content during the go-live step to ensure you have the latest data when you finalize the migration.
:::

:::hint{type="info" indent="1"}
**Note**
The content copy process applies to BLOB data and the CMS database only. After the copy completes, sync content and content types to Graph by running the **Optimizely Graph Full Synchronization** job in CMS.
:::

3. Access tools and logs for [troubleshooting](docId\:sHz_NhPqe-m31fFySMtBy) in the [Azure portal](docId\:BNuzWffvzlfed0Yyu5u9l).
4. Copy hostnames to the target project to prepare for go-live. The system prepares the hostnames, but they remain inactive. Some older hostnames require DNS verification records to work in the project. Add these records during the following step.

::Image[]{src="https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/lUwe1mpUAvm0uc5gVNJNm-20260818-201851.png" size="100" alt="Screenshot of the Project Migration hostname controls where hostnames are copied to the target project" caption="Screenshot of the Project Migration hostname controls where hostnames are copied to the target project" isUploading="false" width="1083" height="707" darkWidth="1083" darkHeight="707" showCaption="true" indent="1"}

5. Click **Check DNS records** to verify the DNS record status after you add the records.

::Image[]{src="https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/NYXam9WYXJWD7M-uQzB3l-20260818-201851.png" size="100" alt="Screenshot of the prepare go-live step where Check DNS records verifies the DNS record status" caption="Screenshot of the prepare go-live step where Check DNS records verifies the DNS record status" isUploading="false" width="1087" height="747" darkWidth="1087" darkHeight="747" showCaption="true" indent="1"}

After DNS verification completes, migrate the whole project or migrate hostnames individually.

## Migrate the whole project

Sync content from the source to the target project before going live. Pause the environments in the source project during this final phase. Put each environment into maintenance mode to prevent data changes during the swap. After you enter maintenance mode, you cannot abort the migration until you cancel it.

:::hint{type="warning"}
**Important**
After you migrate the last environment and move all hostnames to the target project, CMS keeps the old environment for 14 days after the last go-live. To extend this period, click **Need More Time?** in the notification.
:::

![Screenshot of the Go live step for migrating the whole project to the target region](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/YwQblpCMSjabAh5iwtvwX-20260818-201851.png "Screenshot of the Go live step for migrating the whole project to the target region")

1. Activate maintenance mode through the **Maintenance Page** or by putting the source environment into **Read Only** mode. **Read Only** mode must be supported in the source project. Go to [Configure database mode](docId\:Bk-6MEAjaf82Rp236HuBX) for implementation details.
2. Click **Abort Maintenance Mode** if you encounter a problem. After you activate maintenance mode, the environment is ready for go-live.

:::hint{type="warning"}
**Important**
Test maintenance mode and go-live on Integration and Preproduction before proceeding to Production because downtime is possible.
:::

After you enter maintenance mode, follow these steps:

1. Click **Go Live** to make the environment live in the project.
2. (Optional) Click **Cancel Go Live** to reverse the operation if needed.

![Screenshot of the Go Live controls where the environment goes live in the target project](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/4sJ-TDcpHV7dohfsqCbgZ-20260818-201851.png "Screenshot of the Go Live controls where the environment goes live in the target project")

## Migrate hostnames individually

If you do not need data consistency between the two projects, migrate one hostname at a time. With this approach, both projects are live, but some hostnames target the previous project while others are active in the target project.

1. Click a hostname to preview it.

::Image[]{src="https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/Fv1wQJrM3H6SjCWJhq55I-20260818-201851.png" size="100" alt="Screenshot of an individual hostname preview in the Project Migration tab" caption="Screenshot of an individual hostname preview in the Project Migration tab" isUploading="false" width="1094" height="1133" darkWidth="1094" darkHeight="1133" showCaption="true" indent="1"}

2. Click **Ready for Go live** if the hostname renders as expected.

::Image[]{src="https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/A_bMhzZeeKMkHgoz2iUyS-20260818-201851.png" size="80" alt="Screenshot of the Ready for Go live control for an individual hostname" caption="Screenshot of the Ready for Go live control for an individual hostname" isUploading="false" width="666" height="577" darkWidth="666" darkHeight="577" showCaption="true" indent="1"}

3. Click **Go live** when all hostnames that should go live display **Ready for go live**.

::Image[]{src="https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/qxgf6-nWtxk4sVZfhJ-2v-20260818-201851.png" size="80" alt="Screenshot of the Go live control for hostnames marked Ready for go live" caption="Screenshot of the Go live control for hostnames marked Ready for go live" isUploading="false" width="482" height="184" darkWidth="482" darkHeight="184" showCaption="true" indent="1"}

4. Verify that the hostnames marked **Ready for go live** are live in the target project.
5. Click **Complete Migration** after the Integration, Preproduction, and Production environments are live. The system schedules resources in the source project for decommissioning.

When you migrate hostnames, complete one of the following actions:

- Migrate all hostnames from the previous project to your new project through the migration tool.

:::hint{type="info" indent="1"}
**Note**
Do not manually recreate hostnames you want to move from the old project. Use the migration tool to transfer them.
:::

- Delete unused hostnames from the old project that you do not want to move. All hostnames must be migrated or deleted to complete the migration.

For headless implementations (Optimizely-hosted or external), deploy to the front end after you complete the CMS migration steps. For Optimizely-hosted front ends, request a front-end environment through an Optimizely Support ticket. Deploy your front-end code and move the hostnames with Optimizely Support.

Click **Complete Migration** to finish. Optimizely keeps the source project for seven days before removing it. You cannot cancel **Complete Migration**.

:::hint{type="warning"}
**Important**
After you go live with the last environment and move all hostnames to the target project, CMS keeps the old environment for 14 days after the last go-live. To extend this period, click **Need More Time?** in the notification.

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/h1Ye-RVzPinzhWAkQz3-k-20260818-201851.png)
:::
