Migrate a Production Site production-migration
Use this workflow to move an agreed list of pages to Edge Delivery Services, the Adobe Experience Manager service that delivers websites. Start with a sample page for each template, settle how its content and design map to the new site, and import more pages only once the samples work in the editor that your authors will use. If terms such as blocks, default content, or preview are new to you, see How Your Site Is Built and Updated and Shape the Content Structure.
For a few demonstration pages or a first evaluation, use the smaller demo and trial workflows. They don’t need the checks that a production site needs before release.
Agree Scope and Destinations scope
The migration lead and architect agree the scope and destinations. You need authorization to read the source, modify the target repository, and write content and assets to the destination. Agree who signs off the result and who authorizes release. If some pages require sign-in, set up protected site authentication with a dedicated read-only account. If the source blocks automated visitors, arrange access with its administrator before cataloging. See Source Sites with Bot Protection.
Record:
Page import copies each page’s content and design. Integrations and CMS features run on the source’s servers, such as search, form processing, personalization rules, and content inheritance, so import copies only their output on each page. List them under Behavior and decide how each works on the new site. See Limitations.
A console workspace works on one site at a time. In a program with several sites, agree their order, and push and upload each site’s work before you open the next one with Switch site.
Relaunch a Site That Runs on Experience Manager relaunch-aem-site
Once your team has decided on the relaunch, the workflow is the same as for any other source. These points are specific to an Experience Manager source:
- Your other sites: The agent reads the source site’s pages and doesn’t change the source. It writes only to the new site’s Git repository and to the content destination that you choose, so your organization’s other Experience Manager sites keep running as they are, and so does the source site until you switch its domain at release. With Experience Manager authoring, the upload writes pages under
/content/{site-name}and images under the site’s Assets folder, and replaces any page already at that path, so agree both with the author instance’s administrator. See Upload Content. - How the agent reads the source: The agent reads each page as a browser renders it, not the source’s components, templates, or repository. Components, experience fragments, and content inheritance therefore don’t carry over as such: their output appears on each page. Decide which shared content to keep once on the new site. See What Remains Project Work.
- Where content goes: The destination is your choice, as for any source; see Where Content Is Stored and How Authors Edit It. Experience Manager authoring needs an Experience Manager as a Cloud Service author instance, so an author instance that runs elsewhere can’t be the destination.
- Repositories: If your code is in a repository connected through Cloud Manager, the console works with it too. See Use Another Git Host.
- Decisions for your team: Languages, inheritance between markets, and approval workflows are your team’s decisions. Import gives you the pages at their source paths, not these structures. Record them with the other scope decisions before you catalog.
Prepare and Catalog prepare
- Follow shared console setup, or Experience Manager authoring setup if the content goes to Experience Manager authoring. Reuse an existing project’s configuration rather than recreate it.
- Ask the agent to catalog the authorized site:
Scope site https://www.example.com. The site catalog discovers pages and groups them into templates (pages that share a layout) and block variants. - Review the catalog in the Planning view. Correct template and block groupings and investigate failed URLs.
- Compare the discovered URLs with your agreed page list. Add pages that discovery missed, and decide explicitly about failed, skipped, duplicate, or excluded URLs.
- Pick a sample page for each template and important variant. Cover long content, unusual images, locales, and pages with a lot of interaction.
Cataloging reads the source and imports nothing. A run with the status complete can still have failed pages; see Results and Status. Before moving on, give every in-scope URL a template or an approved exclusion.
How the Agent Migrates at Scale migration-at-scale
The agent doesn’t send every page through the AI model. Interpreting each page separately wouldn’t scale to thousands of pages, and the model could treat similar pages slightly differently each time. Instead, the AI model works out the mapping on one sample page per template, and the agent turns that mapping into code that runs on the template’s other pages:
- Group pages into templates. The site catalog groups the source site’s pages into templates, which are pages that share a layout. If you migrate pages without a catalog, each page that you name starts a template of its own.
- Migrate a sample page. For each template, the agent first migrates one real page that shows the template’s typical layout and, ideally, most of its blocks and variants. The site catalog proposes one for each template. If another page of the template shows more of its blocks, choose that page instead: blocks that the sample page lacks are only added later, when an imported page needs them. The AI model maps the sample page’s content to default content and blocks, and creates the blocks that it needs or reuses existing ones.
- Generate an import script. The agent writes an import script for the template: one part, the parser, extracts each block’s content from the source HTML, and another, the transformer, cleans up the page as a whole. The scripts are JavaScript files in the project’s
tools/importer/folder, versioned in Git with the rest of your code. - Refine the pattern, not the page. When you ask for a correction, the agent changes the block or the import script that produced the result instead of editing one page’s output. The correction then applies to every page of the template, and later templates reuse the blocks that already exist.
- Import the remaining pages in bulk. The bulk import runs the import script on the template’s other pages without the AI model interpreting each one. The agent then compares the imported pages with their source pages, fixes the import script for pages that differ too much, and imports those pages again.
Validate a few pages of each template before you import all of them. See Import in Batches.
The same applies to changes in content structure, such as which content becomes a block or where a page splits into sections: change the import script. It is code, reviewed and merged like the rest, and the next import applies it to every page of the template. An edit to one imported page stays local, and importing the template again overwrites it.
To change the templates and blocks themselves, such as moving pages to another template or making one block a variant of another, use the Planning view or ask in chat. The agent follows these changes the next time it generates blocks or imports pages, and pages that you already imported don’t change. To consolidate the design, see Restyle Sites. To consolidate block code, see Refactor Without Changing the Outcome.
template page metadata, which adds a class to the page’s body element so that the project’s code can style those pages differently. To align the two, ask the agent to set the metadata in the import script, so that every page of the template gets it on import, for example: “For the article template, set the page metadata template to article in the import script, and give article pages a narrower main column.”Validate Sample Pages representatives
The migration lead, designers, and authors settle the first template together. Start with a few of its pages. For example:
Migrate only these product pages:
https://www.example.com/products/tents,https://www.example.com/products/backpacks, andhttps://www.example.com/products/boots. Store the content as document-based content under/products. Keep the approved text, links, metadata, and image meaning. Reuse the project’s blocks and content conventions. Report missing content and interactions that the import doesn’t reproduce. Do not upload, push, or publish.
Replace the example URLs and paths with your own, and for Experience Manager authoring, say that the content is stored in the JCR.
-
Review the content structure: the sections, default content, blocks, variants, and section styles that the agent chose. Authors will edit every migrated page in this structure, so settle it on the sample pages. See Shape the Content Structure.
-
Compare imported text, links, images, metadata, and section order with the source. When a pattern is wrong, fix the import script, not the page. See How the Agent Migrates at Scale.
-
Apply source styling or follow the redesign workflow. Check global styles before refining individual blocks.
-
Complete the shared header, navigation, and footer separately from page import. The agent migrates them, including footer images, once for the whole site, so that every page shares one header and one footer.
-
Upload a sample page to the content destination, then edit, save, reopen, and preview it:
- Document-based upload and preview.
- Conversion, package upload, and checks in the Universal Editor for Experience Manager authoring.
-
Record the agreed mapping from source to output, the block models, design decisions, and known exceptions before you import more pages.
A page that looks right still fails if authors can’t edit it. For Experience Manager authoring, also check block models, generated component configuration, conversion errors, and where images are stored before you import more.
Shape the Content Structure content-structure
Authors edit every migrated page in the structure that the agent chooses on import, and the bulk import repeats that structure on every page of a template. Edge Delivery Services pages are made of sections that contain default content and blocks; see Markup, Sections, Blocks, and Auto Blocking. The agent follows David’s Model and keeps the structure as plain as the design allows, because every block and variant is one more thing for authors to learn.
cards-compact, for a small difference in look that authors choose. Content with different fields or a different job gets a block of its own. Optional content and a different number of items don’t make a variant.dark, light-grey, or centered. Text and buttons in the section take their color from the style, so a color alone never creates a block or a variant.To steer the structure:
- Before you migrate, review the catalog in the Planning view and correct block names and groupings there. See Refining the Catalog.
- Record the blocks, variants, and section styles of the project in
AGENTS.md, so that the agent reuses them on later pages and in later sessions. See Document Content Conventions. - Check each sample page in the Document view of the preview panel, which shows its sections, blocks, and default content. See Content Views.
- Correct a wrong pattern in the import script so that the bulk import repeats the correction on every page. See How the Agent Migrates at Scale.
- Ask an author to edit a sample page. If they hesitate over which block, variant, or style to use, there are too many choices.
Keep the choices that authors make few. The design system should make the decisions that authors shouldn’t have to: when a block needs more than a handful of variants or options, ask whether some of them belong in the design.
Estimate Before You Commit estimate
The catalog and the first sample pages give you an estimate based on the work that the site needs, not on its page count:
- Catalog the site. The catalog lists the templates, block variants, and locales, and the URLs that failed. See Prepare and Catalog.
- Validate sample pages of the main templates. Record what each one needed: new blocks, corrections to import scripts, styling, and changes to the content structure.
- Size the remaining templates from what the sample pages needed. Later templates reuse the blocks that already exist, so count the blocks that each one adds. A page with a layout of its own counts as a template of its own.
- Add the items that import doesn’t cover: the behavior that you recorded under Behavior in the scope, and the project work that your team decides and builds.
Check the estimate against the first batch’s record per URL.
Work as a Team collaboration
Several people can work on the same project with the agent, each in their own console workspace. They share code through Git and content through the content destination. The console doesn’t show who is working on what, and it doesn’t merge two people’s changes to the same page, so agree who works on what and keep talking to each other.
Scope matters more with an agent than without one. A single request can change many files, so when two people change the same blocks or styles at the same time, someone has to resolve conflicts across many files by hand.
Lead the Migration phases
A migration runs in phases. The agent does most of the repetitive work in each one, and your team makes the decisions and signs off the result. Let one person, such as the migration lead, run the first phases; others join once the blocks and import scripts are settled. See Work as a Team.
Visual contributors can work on styling from the sample-pages phase onward. See Make Visual Changes.
Start with One Person, Then Divide the Work divide-work
The first steps lay the foundation that everything else builds on: the global styles, the first blocks, and the import scripts of the first templates. Let one person set them up. Before you divide the work, check that the blocks fit real content and are easy for authors to use. See Shape the Content Structure.
Once the team agrees on the blocks, divide the work so that people change different files:
- By block: One person refines the cards block while another builds a carousel.
- By template: Each person refines the import script of a different template. See How the Agent Migrates at Scale.
- By expertise: A designer refines the styling of existing blocks while a developer builds an integration.
Don’t give two people the same block, the global styles, or the same import script at the same time unless they agree how to coordinate.
Share Code in Small Steps share-code
- Agree on a shared branch, such as
mainor a development branch. Each person switches their workspace to it with Switch branch in the Code view. - Keep each request to the agent focused on one block, template, or task. Push the result as soon as it works, with Create new PR: the console pushes your changes to a new branch, opens a pull request into the shared branch, and leaves your workspace on the new branch.
- Review and merge pull requests often. Small changes conflict less and are quicker to review, and a pull request that stays open for days collects conflicts.
- Before you start a new task, switch back to the shared branch with Switch branch and pull it with Sync > Pull > Code, so that you build on everyone’s merged work.
If a pull is unavailable or reports a conflict, see If Someone Else Changed the Branch.
Small, frequent pushes also give the team a readable history of what the agent changed and why. To get one commit per request, see Leave a Record of Each Request.
Coordinate Content Changes share-content
Content has no merge. Your workspace holds copies of the pages, and an upload replaces the page in the content destination with your copy. If two people change the same page, the last upload wins, and the other person’s changes are lost. Give each page, or set of pages, to one person at a time.
To get pages that others uploaded into your workspace:
- Open a page that shows a cloud icon in the content view. The console downloads it into your workspace.
- In document-based projects, select Sync > Pull > Content to download every page from Experience Workspace. It replaces your local copies, including edits that you haven’t uploaded, so upload the edits that you want to keep first.
Import in Batches batches
Use the catalog bulk-import workflow and bulk-import prompts after you validate the sample pages.
- Import a small batch with the template’s import script.
- Check ordinary pages and edge cases. If the import script is wrong, correct it and import the affected pages again before you continue.
- Keep a record for each source URL: destination, import state, errors, sign-off, and any approved exclusion.
- Continue template by template. Count discovered, analyzed, imported, failed, skipped, and signed-off pages separately.
- Recheck earlier sample pages when you change shared styles, import scripts, block models, or block code.
Once authors start editing the migrated pages in the content destination, their pages become the source of truth. Importing or uploading those pages again overwrites the authors’ work, and a corrected import script doesn’t merge it, so agree with the authors first.
Complete the Site complete-site
Automated import is one part of delivery. Implement and verify the agreed requirements, including:
- Header, footer, navigation, internal links, and error pages.
- Images, downloads, fonts, asset permissions, and any retained Dynamic Media references.
- Titles, descriptions, canonical URLs, structured data, redirects, sitemaps, and locale relationships where required.
- Forms, search, commerce, account features, analytics, consent, and other integrations.
- Author guidance, operational ownership, access, and deployment configuration.
The agent implements the code side of these, for example blocks that call your search or commerce API, forms, and the code that loads analytics and consent. It can’t configure systems outside your repository and content, such as the search service, the CDN, or the analytics account, and it doesn’t decide your requirements. Give it the API documentation and the agreed behavior, and name an owner for each external system who signs off the result. See Connect Services and Applications, for forms, Form Submissions, and for product pages, Commerce Pages.
Images and Documents assets
How images reach the new site depends on the content destination:
- Experience Workspace: While you work in the console, an imported page can still reference images on the source site. When you upload the page, the console uploads its images with it, including images that it downloads from the source, into a folder named after the page with a leading dot. It then points the page to the uploaded copies. If an image is missing, in an unsupported format, or ambiguous, the console reports it and doesn’t upload the page. After the upload, it checks that every image arrived. See Upload Content.
- Experience Manager authoring: Select Upload images when you upload the content package, and choose a folder under
/content/dam/. The default is/content/dam/site. See Upload Content. - Adobe Dynamic Media: Images that the source serves from Dynamic Media, including Scene7 and Dynamic Media with OpenAPI URLs, stay there. The imported page references them, and the project’s code renders them.
Edge Delivery Services serves images in sizes and formats that fit each screen. Check large files, videos, and SVG images against the limits for file types and sizes.
Check the links to documents, such as PDFs, on the sample pages. Each link must point to a copy on the new site, not to the source site that you will retire.
URLs, Redirects, and Search Metadata urls-seo
The agent takes each page’s path from its source URL. It lowercases the path, removes .html, turns a trailing / into index, and replaces other characters, such as spaces and underscores, with hyphens. /About_Us.html becomes /about-us. Every URL that changes this way, or that you change on purpose, needs a redirect.
The agent doesn’t create redirects, sitemaps, or language alternates by itself. Ask it for them as a task, and review the result:
- Redirects: A
redirectsspreadsheet with Source and Destination columns, one row per URL, without wildcards. Ask the agent to list the source URLs whose path changed, as rows for the sheet. See Redirects. - Page metadata: Import keeps each page’s title, description, and social image in its metadata block. To set metadata for many pages at once, use a
metadataspreadsheet. See Bulk Metadata. - Sitemap and languages: A
helix-sitemap.yamlfile in the repository, which can include the language alternates (hreflang) of each page. See Sitemaps. - Search engines: The preview and live sites,
*.aem.pageand*.aem.live, are hidden from search engines; your production domain isn’t. Checkrobots.txtbefore the cutover. See robots.txt. - Query index: Lists of pages, such as article listings and site search, read from a query index that includes only published pages. See Indexing.
Check and Sign Off acceptance
Agree with the site owner what must work before release, and test it on the preview and live sites. The site owner signs off the result with testers and authors.
Each automated signal checks one thing: an importer status that the script ran, a generated package that content was converted, a visual similarity score that a page looks like its source, and a Lighthouse score how one page loads in a lab test. Production readiness needs every area in the table.
Release, Recover, and Hand Over handoff
The release owner coordinates the code merge, content publication, and domain cutover, then confirms that the site’s ongoing owners have taken it over.
- Push the signed-off code and have it reviewed as the repository’s policy requires. Merging into
mainupdates the live site’s code immediately, so plan the merge with the content release. See How Changes Go Live. - Upload only the signed-off content and images to the confirmed destination. Review the errors for each page and image.
- Verify the saved content with the intended code revision on the preview site,
*.aem.page. - Obtain the site’s release approval and follow the configured publication and domain cutover process. Publishing makes pages available on
*.aem.live; the cutover is what serves them on your own domain, through the Adobe-managed CDN or your own CDN. Work through the go-live checklist before the cutover. - Check the live URLs, redirects, key journeys, and monitoring after release. Operational Telemetry shows how real visitors experience the site’s performance.
- Provide the project handover, the record per URL, author examples, sign-off results, exceptions, and recovery contacts.
When something fails, keep the exact URL or path, the operation, and the error log. Retry the smallest affected scope after you correct the cause. Don’t restart a successful batch because one page failed.
Pushing code, uploading documents, importing a content package into Experience Manager, and publishing are separate operations on separate systems. A partial failure can leave only some changes applied, and no single rollback undoes all of them. Recover code through Git, and content and images through the version history of the content destination or your agreed process.