The 2026 Website Migration Checklist for Ecommerce
For digital strategy leads, ecommerce teams, and the
engineers they hand the work to, who need every check
written down with the proof that closes it.
A systems check for the team doing the building. Every item states what has to be true and the check that proves it, grouped by the phase where fixing it is still cheap, with one goal per phase: carry the traffic and the revenue through the launch.
- 136
- Checks
- 4
- Phases
- 21
- Categories
Before you start
This is a systems check, not a project plan.
A build runs continuously. Every sprint ships something, and every sprint someone has to stop and ask two questions: is the plan still covering everything, and has what we just built been checked from the angle that would catch a problem? This is the list that answers them.
The goal of the list is narrow. Carry the traffic and the revenue the old site earned through the launch and out the other side.
Nothing here is tied to a platform. The checks describe what has to be true of the site rather than how a particular system produces it, so they apply equally to a hosted store, a headless build, and a custom enterprise application.
Nothing here is tied to a schedule either. A launch nine months out runs the same four phases as one four weeks out, in the same order. A short timeline compresses them and never removes one.
Every check comes out of the same place: more than 100 site migrations run over our careers. Nothing on this list is theoretical. Each row is here because its absence cost somebody traffic, revenue, or a month of recovery, and most of them are what a shortcut or a rushed week turns out to cost.
Want a second set of eyes before you cut over?
This is the checklist we run on client migrations. We have partnered with leading Shopify, Adobe, and Salesforce agencies on theirs, and we are glad to help with yours.
The URL structure and the templates are still open, so a decision made here costs a conversation rather than a rebuild.
Goal for this phaseSign off a URL structure and a redirect map that account for every URL which earned traffic, an external link, or revenue in the last 12 months, before the build freeze.
URL inventory
Protects every URL that earns traffic, a link, or revenue today. Without a complete inventory, pages get discovered a month after they died, when the traffic is already gone.
-
The URL inventory is built from four sources, not one
How to verifyConfirm the list merges a full crawl, analytics landing pages, Search Console pages, and server log requests. A CMS export alone will miss the long tail that still earns links.
-
The inventory covers non-HTML assets that earn traffic
How to verifyCheck that PDFs, images, and feed URLs appear in the list. Filter the log file by extension to see what is actually being requested.
-
Every inventoried URL has a current status code recorded
How to verifyCrawl the inventory and store the response code per URL, so URLs that are already broken before the migration are handled rather than carried over.
-
URLs with external links are flagged separately
How to verifyJoin the inventory against referring-domain data. These are the URLs where a missed redirect costs link equity you cannot rebuild.
-
Revenue is attributed to URLs before the rebuild
How to verifyPull revenue or lead value per landing page for the last 12 months and attach it to the inventory, so mapping can be prioritized by value rather than by template.
URL structure
Settles one structure that the new platform can actually produce. A structure agreed on paper and found to be impossible during the build turns the redirect map into guesswork.
-
The new platform can produce the URL patterns the plan assumes
How to verifyAsk the build team to produce one live example of each planned pattern on staging, which is where platform limits become apparent.
-
URL depth and hierarchy are decided deliberately
How to verifyConfirm related content sits under a consistent parent path, and that important pages are not buried deeper than the old structure without a reason.
-
URLs are lowercase, hyphenated, and free of parameters where possible
How to verifyCrawl staging and filter for uppercase characters, underscores, and query strings on canonical pages.
-
Faceted and filtered URLs have a defined indexation rule
How to verifyConfirm which facet combinations are indexable, which are canonicalized, and which are blocked, before the templates ship.
-
Pagination has a defined, crawlable pattern
How to verifyCheck that page two onward is reachable by a crawler without JavaScript and that each page has a self-referencing canonical.
-
The domain itself is changing or it is not, and only one of those happens at a time
How to verifyConfirm whether the domain moves in the same release as the platform. Running both at once makes it impossible to attribute a drop to either, so separate them when the schedule allows.
-
Content stays on the domain rather than moving to a subdomain
How to verifyCheck where the blog, help center, and store will live on the new stack. Hosted platforms default a section onto a subdomain, and a section moved there restarts on authority it spent years building.
-
Locale URL handling is decided once, including non-Latin scripts
How to verifyConfirm whether slugs are translated per market and how scripts outside Latin are transliterated. Mixed handling across a catalog cannot be cleaned up with redirects later.
Catalog data
Keeps prices, stock, and identifiers matching the system of record. Imports fail partially and quietly, and the first sign is usually a rejected shopping feed.
-
Product records are reconciled by count before and after the move
How to verifyCompare product, variant and image counts between the old export and the new catalog. Import failures are silent and partial.
-
Discontinued and out-of-stock products have a decided rule
How to verifyConfirm the rule per case: redirect to the closest replacement, keep the page live with alternatives, or return 410. Without one the outcome is silent 404s on former best sellers.
Redirect mapping
Carries the rankings and the link equity attached to old URLs onto the new ones. Catch-all redirects, chains, and loops pass close to nothing, and they look handled right up until traffic drops.
-
The redirect map has a named owner and a start date before the build freeze
How to verifyName the person who owns the map, then check their start date against the build freeze. Start after the freeze and the map cannot change a single URL, so every awkward destination has to be lived with for the life of the site.
Rendering
Decides whether a crawler sees a page or an empty shell. The rest of this list assumes the content is in the response, and on a headless or JavaScript-heavy build that is a choice somebody made rather than something the platform does for you.
-
Every template has a rendering method, and it is written down
How to verifyAsk for the list: which templates are server-rendered, which are statically generated, and which are assembled in the browser. Anything earning revenue belongs in the first two. On a headless build this gets decided once, early, by whoever is closest to the framework, and nobody revisits it.
-
Rendering does not branch on a list of user agents
How to verifyAsk whether the server chooses what to send based on who is asking. Google treats that as a workaround rather than an answer, it puts you one step from cloaking, and every new crawler has to be added by hand before it can see anything.
On-page fundamentals
Keeps titles, descriptions, and headings unique and editable on every page. Catalog templates that concatenate the same few words generate thousands of near-identical titles nobody can override.
-
Templated pages generate unique titles and descriptions from real fields
How to verifyAsk for the title and description pattern per template, then render three live examples. Catalog templates that concatenate the same words produce thousands of near-identical titles.
-
Titles and descriptions can be overridden per page from the CMS
How to verifyEdit one product and one category in the CMS and confirm the override survives a republish. Pattern-only systems leave no way to fix an important page.
Internationalization
Keeps each locale serving its own audience instead of competing with the others. Hand-maintained hreflang goes stale the first time somebody publishes without updating it.
-
Hreflang is generated automatically, not maintained by hand
How to verifyPublish a page on one locale and confirm the corresponding hreflang entries appear on the others without manual work.
AI channel
Keeps the AI crawler access and the citations the site already earns. None of this traffic appears in GA4, so it can disappear completely without showing up in any report a team normally reads.
-
AI crawlers are allowed or blocked by deliberate decision
How to verifyReview robots.txt for GPTBot, ClaudeBot, PerplexityBot, and Google-Extended, and confirm the decision is intentional rather than inherited from a template.
-
The AI crawler policy and llms.txt are decided together, in writing
How to verifyDecide which AI agents are allowed and whether an llms.txt ships, then record it. A platform default inherited without a decision either closes the channel or opens it wider than intended.
Measurement
Keeps one comparable record of performance either side of the cutover. The baseline usually leaves with the old platform, and without it there is nothing to argue from when somebody asks whether the migration worked.
-
A pre-migration baseline is captured and stored outside the platform
How to verifyExport traffic, revenue, rankings and index coverage per template before anything changes. Platform reporting rarely survives the platform.
The build is done and staging is testable, with a date set. This is the last phase in which problems are cheap.
Goal for this phaseClear every check on staging and prove that each mapped URL reaches a live page in one hop, at least two weeks before the launch date.
Catalog data
Keeps prices, stock, and identifiers matching the system of record. Imports fail partially and quietly, and the first sign is usually a rejected shopping feed.
-
Price, inventory and identifiers match the system of record
How to verifySample across the catalog and compare against the ERP or PIM, including GTIN and MPN. Structured data inherits these fields, so an import error becomes a rich result error.
-
Reviews and other user-generated content carry over with their products
How to verifyCheck that review counts and ratings follow the product, not the URL. Review markup that empties out drops the stars from every listing.
-
The shopping feed points at the new URLs before the old ones expire
How to verifyConfirm the merchant feed regenerates from the new catalog and that item IDs stay stable, since changed IDs restart the learning on every shopping campaign.
Redirect mapping
Carries the rankings and the link equity attached to old URLs onto the new ones. Catch-all redirects, chains, and loops pass close to nothing, and they look handled right up until traffic drops.
-
The destination list comes from imported data, not from a naming rule
How to verifyWait until the catalog and content import has finished on staging, then crawl the new site for the real URL list. Destinations predicted from a slug convention before the import routinely differ from what the platform actually generated, and every one of those is a redirect to a 404.
-
Both sides of the map exist as clean lists
How to verifyConfirm you have the list of URLs that are changing or already broken, and the list of new valid destinations, before any matching begins.
-
Each old URL resolves to its single best match, not a catch-all
How to verifySpot check that redirects land on the closest equivalent page. Blanket redirects to the homepage or a category root pass almost no value and read as soft 404s.
-
The map contains no redirect loops
How to verifyRun the map through a crawler that follows chains and flag any URL that returns to itself.
-
Redirect chains are collapsed to a single hop
How to verifyCrawl the map following redirects and flag any source that takes more than one hop to reach a 200. Update the source to point at the final destination.
-
No redirect points at a URL that is itself broken
How to verifyCrawl every destination in the map and confirm a 200 response. A redirect to a 404 is worse than no redirect, because it looks handled.
-
Pattern rules cover the bulk, manual decisions cover the value
How to verifyConfirm the bulk of the catalog is handled by rules, and that manually mapped URLs are the revenue pages and the externally linked ones.
-
Platform redirect limits are known and designed around
How to verifyConfirm whether the target platform supports wildcards. Shopify redirects are one to one with no pattern matching, so a large catalog needs a generated bulk file rather than rules.
-
Query string behavior is tested, not assumed
How to verifyRequest a real URL carrying a tracking parameter and confirm it survives to the destination. Test the exact URL shapes campaigns and affiliates use.
-
Redirects are verified by response code, not by spreadsheet review
How to verifyRun the full map against staging or the live host and record actual status codes. A spreadsheet review only confirms what was intended.
Rendering
Decides whether a crawler sees a page or an empty shell. The rest of this list assumes the content is in the response, and on a headless or JavaScript-heavy build that is a choice somebody made rather than something the platform does for you.
-
The rendered response is the finished page, not a loading shell
How to verifyRequest a product and a category with curl and read the body rather than the status code. A prerender service that times out still returns 200, and the skeleton it sends looks healthy in every report you have.
-
The prerender cache serves current data
How to verifyChange a price on staging, then request the page without a browser and check the number. These caches hold copies for hours or days by default, which is how a page and its feed end up disagreeing about price.
-
Hydration does not replace what the server sent
How to verifyCompare the raw HTML against the DOM after the page settles on a product template. Where they disagree, the version you tested is not the version anyone sees, and the version indexed may be neither.
-
The agents that never run JavaScript receive the rendered response
How to verifyRequest a page as each AI crawler and as a plain HTTP client, and confirm the copy is in the body. Prerender allowlists get written for Googlebot and are rarely revisited, so these agents fall through to the client-rendered version and read nothing.
-
Rendering holds up at crawl rate, not just at browsing rate
How to verifyRequest a few hundred URLs in sequence and watch the response times and the error rate. Server rendering that is comfortable for shoppers can time out under a full recrawl, which is exactly when the whole catalog is being fetched at once.
Content parity
Keeps the copy, the internal links, and the markup that earned the current rankings. Rebuilt templates routinely drop the text block that made a page rank, and nobody notices until the rankings go.
-
Page-level content parity is checked on the templates that matter
How to verifyCompare old and new versions of the top revenue templates for missing copy, specs, reviews, and internal links.
-
Titles and meta descriptions are generated, not left blank
How to verifyCrawl staging for empty or duplicated titles and descriptions, especially on generated pages such as products and categories.
-
One H1 per page, and it is the first heading in the source
How to verifyCrawl staging for pages with zero or multiple H1s, and confirm fixed elements such as the footer do not carry heading tags.
-
Internal links point at final URLs, not through redirects
How to verifyCrawl staging and flag internal links that return a 301. Fix them at the source rather than relying on the redirect.
-
Images carry descriptive filenames and alt text
How to verifyCrawl for missing alt attributes and for filenames that are hashes or camera defaults on templates that matter for image search.
-
Crawlers and visitors are served the same content
How to verifyRequest a template with a crawler user agent and with a browser one, then diff the two responses. Personalization or geo-routing that keys off the user agent is cloaking, whatever it was built for.
-
Content embedded from another host is accounted for
How to verifyList anything arriving in an iframe, including reviews, sizing tools, and configurators. Iframed content is credited to the source, not to the page that frames it.
On-page fundamentals
Keeps titles, descriptions, and headings unique and editable on every page. Catalog templates that concatenate the same few words generate thousands of near-identical titles nobody can override.
-
Every template renders exactly one H1, and it is the page subject
How to verifyCrawl staging and report H1 counts per template. Rebuilt themes commonly put the H1 in a logo or drop it from listing pages.
-
Heading order runs in sequence within the main content
How to verifyCheck that headings descend without skipping levels, and that headings in headers, footers and cookie bars are not competing with the page's own.
-
Every page carries a self-referencing canonical that resolves
How to verifyCrawl staging and confirm each canonical points at the live, indexable version of the same page, not at a staging host, a parameter variant, or a redirect.
-
Social preview tags are populated per page rather than sitewide
How to verifyRun three templates through a link preview and confirm the title, description and image describe that page. A single default image sitewide is a lost click on every share.
-
Titles and descriptions fit inside what a result actually displays
How to verifyCrawl staging and flag titles past roughly 60 characters and descriptions past roughly 155. Generated patterns overflow first on the longest product names, which are usually the ones worth the most.
Images
Keeps image search traffic and the links images have earned. A bulk re-upload renames files to hashes and drops alt text, which loses both at once.
-
Images survive the move with their filenames and alt text intact
How to verifyCompare a sample of old and new product pages. Bulk re-uploads frequently rename files to hashes and drop alt text, which loses image search entirely.
-
Image URLs either carry over or are redirected
How to verifyCheck the image inventory from the old crawl against the new one. Images earn traffic and links, and a new CDN path without redirects breaks both.
-
Images are in the source on the templates that matter
How to verifyFetch a product page with JavaScript disabled and confirm image elements carry real src attributes, rather than being assembled by a gallery script after load.
Structured data
Keeps rich results on every template. Markup that disagrees with the page loses the result outright, and at scale that disagreement becomes a manual-action risk.
-
Structured data is populated from CMS fields, not hand-written
How to verifyChange a product field on staging and confirm the markup updates without a developer touching a template.
-
Markup validates on every template type
How to verifyRun one URL per template through Google's Rich Results Test and confirm no errors. The older Structured Data Testing Tool is deprecated.
-
Breadcrumb markup matches the visible breadcrumb
How to verifyCompare the markup path against what renders on the page. A mismatch is a manual-action risk, not just a warning.
-
Open Graph and Twitter tags are populated automatically
How to verifyRun a few URLs through a social debugger and confirm image, title, and description resolve.
-
Every markup type the old site carried is present on the new one
How to verifyList the schema types found in the old crawl and diff them against the new. Video, FAQ, and organization blocks are the ones that disappear with the theme that produced them.
-
Organization markup carries the site search action and the navigation
How to verifyValidate the homepage and confirm the organization block includes the search action and the sitewide navigation element. Both are template-level and neither survives a rebuild by default.
Internationalization
Keeps each locale serving its own audience instead of competing with the others. Hand-maintained hreflang goes stale the first time somebody publishes without updating it.
-
Hreflang clusters are reciprocal and include x-default
How to verifyCrawl the locales and confirm each page references every alternate and is referenced back, with one x-default per cluster.
-
Locale routing does not redirect by IP address
How to verifyRequest a locale URL from outside its country and confirm a 200 rather than a redirect. IP-based routing shows a crawler one market and hides every other one.
-
Currency and locale switching does not fork the URL for identical content
How to verifyChange currency and confirm the URL and the canonical stay put, or that each combination is indexed deliberately.
Crawlability
Keeps search and AI crawlers reaching the site without interruption. A staging index block that reaches production is the fastest way to remove a site from search altogether.
-
Staging is blocked from indexing
How to verifyRequest a staging URL and confirm the noindex header or robots block is present, and that the block is on staging only.
-
Removing the staging block is a written step in the launch runbook
How to verifyConfirm the runbook names the file, the line, and the owner. A staging noindex left in place after launch will deindex the site.
-
robots.txt on the new site is reviewed line by line
How to verifyDiff the new robots.txt against the old one and confirm every disallow is intentional.
-
The XML sitemap contains only live, indexable URLs
How to verifyCrawl the sitemap and confirm every entry returns 200 and is not noindexed, redirected, or canonicalized elsewhere.
-
A crawler can find the sitemap without being told where it is
How to verifyConfirm the index sitemap is referenced in robots.txt and reachable at the root.
-
Every page has a self-referencing canonical that can be overridden
How to verifyCrawl staging and confirm canonical tags resolve to the page's own final URL, and that the CMS allows an override where duplication is intentional.
-
Important content is present without JavaScript
How to verifyFetch a template with JavaScript disabled and confirm the primary copy, links, and navigation are in the source HTML.
Sitemaps and indexing
Keeps a sitemap crawlers can trust, with indexation decided page by page. Noindex reaching production is the most expensive mistake on this list.
-
The XML sitemap contains only live, indexable, canonical URLs
How to verifyCrawl the sitemap itself. Redirects, 404s and noindex URLs inside a sitemap teach a crawler that the file is unreliable.
-
Sitemaps regenerate on their own when content changes
How to verifyPublish and unpublish a test page and confirm the sitemap updates without a developer. A sitemap that goes stale is worse than none.
-
Noindex is controllable per page, and nothing carries it by accident
How to verifyConfirm the CMS exposes the setting, then crawl staging for noindex and check every hit is deliberate. A staging-wide noindex shipped to production is the single most expensive migration mistake.
-
Internal search results and filtered views are kept out of the index
How to verifyConfirm search URLs and multi-facet combinations are noindexed or blocked, so the crawl budget goes to pages that can rank.
-
Images are submitted in a sitemap where image search matters
How to verifyConfirm image URLs appear either in a dedicated image sitemap or as image entries on the page sitemaps.
-
A crawlable index of the catalog exists outside the navigation
How to verifyCheck that an HTML sitemap or equivalent index page lists the catalog and renders without JavaScript. It is the fallback path into deep pages whenever the navigation changes shape.
Error handling
Keeps status codes honest on everything that no longer exists. Soft 404s hold dead URLs in the index for months and waste crawl budget the whole time.
-
The 404 page returns a 404 and helps a visitor continue
How to verifyRequest a nonsense URL and read the status code, not the page. Then confirm the page offers search and a route back into the catalog rather than a dead end.
-
The 404 template is editable and routes visitors back into the catalog
How to verifyConfirm the page can be changed from the CMS, and that it offers search and top categories rather than an apology.
Performance
Holds Core Web Vitals at or above what the old site delivered. A redesign that adds weight trades speed for appearance and pays for it in rankings.
-
Core Web Vitals are measured on the new templates, not the old site
How to verifyRun lab tests on staging for LCP, INP, and CLS per template, and confirm the field data plan for after launch.
-
Render-blocking resources above the fold are eliminated
How to verifyCheck the critical request chain on the heaviest template and confirm blocking CSS and JS are deferred or inlined deliberately.
-
Images are sized and compressed at upload, not in the browser
How to verifyConfirm the CMS produces responsive sizes and modern formats, and spot check that a large source image is not being served at full resolution.
-
Scripts and styles are bundled and minified in the production build
How to verifyMeasure the production build rather than the development one, and confirm the count of blocking requests is no higher than the old site's.
-
Third-party tags are re-approved rather than copied across
How to verifyList every tag on the old site and decide individually which ones move. A replatform is the one opportunity to drop the accumulated ones, and each survivor costs interaction latency on every page.
Commerce journeys
Keeps checkout completing and customers able to sign in. A broken payment or password reset is normally reported by customers before anybody finds it internally.
-
A real transaction completes end to end on staging
How to verifyBuy something with a live payment method in test mode, through to the confirmation page and the order in the back office.
-
Tax, shipping and discount logic produce the same totals as the old site
How to verifyPrice the same basket on both, across a domestic address, an international one, and a promotion code.
-
Customer accounts and their history survive the migration
How to verifyLog in as a migrated customer and check order history, saved addresses and the password reset flow. Reset is the step that breaks, because it depends on mail the new platform sends.
-
Promotions, gift cards, and loyalty balances carry over
How to verifyRedeem an active promotion code, a gift card balance, and a loyalty account on staging. These sit in apps rather than the core catalog, which is why they get left behind.
-
Internal search returns sensible results against the new catalog
How to verifyRun the top internal search terms from the old site and read the results. Search is rebuilt from scratch on most platforms, and it carries a large share of ecommerce revenue.
AI channel
Keeps the AI crawler access and the citations the site already earns. None of this traffic appears in GA4, so it can disappear completely without showing up in any report a team normally reads.
-
Key content is readable without executing JavaScript
How to verifyFetch a product and a guide template with JavaScript off. AI crawlers do not render, so anything client-side is invisible to them.
-
A pre-migration baseline of AI crawler activity exists
How to verifyCapture which AI bots hit which URLs, and how often, before the cutover. Without a baseline you cannot tell whether the migration cost you AI visibility.
-
AI crawlers are not challenged by the new host's bot protection
How to verifyRequest a page with each AI crawler user agent from outside your own network and confirm a 200 rather than a challenge page. Managed bot rules on new hosting block these by default more often than they allow them.
-
The answer-shaped content that earns citations survives the rebuild
How to verifyCompare old and new templates for the definitions, specifications, comparisons, and question headings that assistants quote. Rewriting those passages into marketing copy removes the exact part that was getting cited.
Measurement
Keeps one comparable record of performance either side of the cutover. The baseline usually leaves with the old platform, and without it there is nothing to argue from when somebody asks whether the migration worked.
-
Ecommerce events fire on staging with correct values
How to verifyComplete a test purchase on staging and confirm the item, quantity, currency and revenue arrive intact. Tags copied across usually fire; the payload is what breaks.
-
Consent handling does not suppress measurement by default
How to verifyLoad a page and check what fires before any consent choice, then after each choice. A stricter default banner on the new build reads as a traffic collapse.
-
Campaign and affiliate destination URLs are updated with the map
How to verifyRun the live ad, email and affiliate destination lists through the redirect map. Paid traffic landing on a redirect chain costs money on every click.
Infrastructure
Keeps the cutover reversible and every hostname answering. TTL, certificate, and bot-protection defaults lock out visitors and crawlers without anybody changing a line of code.
-
DNS TTL is lowered before the cutover, not during it
How to verifyConfirm the record TTL was dropped to a few minutes at least 24 hours ahead. A TTL still set to a day makes a rollback take a day.
-
A restorable backup of the old site exists, and someone has restored it
How to verifyRestore the backup somewhere and load it. An untested backup is a plan, not a rollback.
-
Access to the old host survives the launch
How to verifyConfirm the old hosting, database and DNS credentials stay valid for at least 30 days past cutover, and name who holds them.
-
The certificate covers every hostname the site answers on
How to verifyCheck the certificate against the apex, www, and any locale or shop subdomain. One uncovered hostname turns a redirect into a browser warning.
-
The firewall and bot rules allow verified search and AI crawlers
How to verifyRequest a page from the new host with a crawler user agent and confirm a 200 rather than a challenge. Default bot protection on a new host blocks the crawlers you need.
The cutover window itself. A mistake made here reverses in minutes for a few hours, and costs weeks after that.
Goal for this phaseInside the cutover window, confirm by request that the index block is gone, that redirects return 301, and that a real transaction records, before traffic reaches its daily peak.
Error handling
Keeps status codes honest on everything that no longer exists. Soft 404s hold dead URLs in the index for months and waste crawl budget the whole time.
-
Soft 404s are not being returned in place of real ones
How to verifyCheck that removed pages return 404 or 410 rather than a 200 with an empty template, which is the pattern that keeps dead URLs in the index for months.
Commerce journeys
Keeps checkout completing and customers able to sign in. A broken payment or password reset is normally reported by customers before anybody finds it internally.
-
Transactional email sends from the new platform
How to verifyPlace a live order after cutover and confirm the confirmation and shipping notifications arrive, and that they are not landing in spam from a newly sending domain.
Measurement
Keeps one comparable record of performance either side of the cutover. The baseline usually leaves with the old platform, and without it there is nothing to argue from when somebody asks whether the migration worked.
-
Search Console is verified for the new host and the change is filed
How to verifyConfirm verification on every property variant, and submit the change of address where the domain itself moved.
-
The cutover is annotated in every reporting tool
How to verifyAdd the date and a one-line note to analytics, rank tracking and the log platform, so the step change is explained when someone reads it in six months.
Infrastructure
Keeps the cutover reversible and every hostname answering. TTL, certificate, and bot-protection defaults lock out visitors and crawlers without anybody changing a line of code.
-
Protocol, host and trailing slash each resolve one way in one hop
How to verifyRequest all four variants of a live URL and confirm each reaches the canonical form with a single 301.
-
Mail and verification DNS records survive the move
How to verifyCheck MX, SPF, DKIM and any domain verification TXT records after the change. A record set rewritten wholesale takes transactional email down with it.
-
Caches are purged after the redirects go live
How to verifyPurge the CDN and any page cache, then request a redirected URL from a cold edge. Cached copies of the old response outlive the deploy.
Launch day
Keeps the cutover window short enough to reverse. Most launch failures come from accepting that a step ran rather than reading the response.
-
The staging index block is confirmed removed by request
How to verifyFetch a live URL and read the headers and robots.txt yourself. Do not accept "it was removed" from memory.
-
Redirects are live and returning 301, not 302
How to verifyRequest a sample across every mapped pattern and confirm a permanent status code and the right destination.
-
The exceptions are tested, not just the patterns
How to verifyRequest the manually mapped URLs specifically. Patterns usually work; the hand-mapped exceptions are where errors hide.
-
Analytics and tag firing are confirmed on the new templates
How to verifyComplete a real transaction or lead submission and confirm it lands with the expected attribution, rather than assuming the tag copied over.
-
A rollback plan exists and someone has read it
How to verifyConfirm who decides, what the trigger is, and how long a rollback takes, and that the people on call have read it before launch night.
-
The new sitemap is submitted
How to verifySubmit the index sitemap in Search Console and confirm it is read without errors.
The recrawl window. Losses surface as engines work through the site, which takes weeks rather than days.
Goal for this phaseReturn organic sessions and revenue to the pre-migration baseline within eight weeks, measured per template against the numbers captured during planning.
Rendering
Decides whether a crawler sees a page or an empty shell. The rest of this list assumes the content is in the response, and on a headless or JavaScript-heavy build that is a choice somebody made rather than something the platform does for you.
-
Rendered output is re-checked after launch, not only before it
How to verifyFetch a sample across templates weekly for the first month, without a browser. Cache rules, feature flags, and personalization all get changed after launch by people who have no reason to think about crawlers.
Images
Keeps image search traffic and the links images have earned. A bulk re-upload renames files to hashes and drops alt text, which loses both at once.
-
Images are being served at a sane size and format after launch
How to verifySample the largest pages and confirm the delivered bytes match the rendered dimensions. A rebuilt theme often ships originals where the old one shipped derivatives.
Error handling
Keeps status codes honest on everything that no longer exists. Soft 404s hold dead URLs in the index for months and waste crawl budget the whole time.
-
404s are triaged by the value of the URL that produced them
How to verifyJoin the 404 log against the revenue and referring-domain data already in the inventory, and fix in that order rather than by volume.
AI channel
Keeps the AI crawler access and the citations the site already earns. None of this traffic appears in GA4, so it can disappear completely without showing up in any report a team normally reads.
-
AI crawler activity is compared against the baseline after launch
How to verifyConfirm the same bots are reaching the new URLs at a similar rate. None of this appears in GA4, so it has to come from server-level capture.
-
Citation share is tracked against the pre-migration baseline
How to verifyRun the same prompt set monthly across the assistants that matter and compare against the baseline. This recovers more slowly than search, because each assistant recrawls on its own schedule.
Monitoring
Keeps performance visible across a full recrawl cycle, per template rather than in aggregate. Losses appear over weeks as engines work through the site, so a clean check on launch day proves very little.
-
Redirects are re-verified on live URLs after cutover
How to verifyRe-run the full map against production. Server configuration differences between staging and production are common and quiet.
-
Traffic and revenue are compared at template level, not in aggregate
How to verifyBreak performance out by page type. A flat sitewide number can hide one template collapsing.
-
404s are monitored from real requests, not guessed
How to verifyWatch server logs and Search Console for 404s with actual traffic or inbound links, and add redirects for the ones that matter.
-
Index coverage is tracked across a full crawl cycle
How to verifyWatch indexed page counts and coverage errors for at least six weeks. Losses appear as engines recrawl, not on launch day.
-
Crawlers are confirmed reaching the new URLs in the logs
How to verifyFilter server logs by verified crawler and confirm they are fetching new URLs rather than looping through redirects or hammering 404s.
-
The migration is reviewed against a defined success measure
How to verifyCompare against the pre-migration baseline on a date agreed in advance, so the project closes against numbers rather than against a general sense that it went fine.
-
Recovery has a stated window and a date to review it
How to verifyAgree in advance what recovery looks like and when it will be judged. A well-run migration recovers inside four to twelve weeks, so a flat result at week twelve is a signal to investigate rather than to keep waiting.
-
Losses are worked in order of the revenue attached to them
How to verifyRank the drop by the revenue recorded against each URL in the inventory rather than by percentage. A 40 percent fall on a page that earned nothing is not the problem to solve first.
-
Head terms are tracked individually, not as an average
How to verifyTrack the specific terms that drove the most revenue before the move. A sitewide average hides one category term collapsing while long-tail volume holds the total up.
What each template needs on the day
The phases above run in time order. These run by page type, because a launch gets divided among the people who own each template. Global applies everywhere.
These hold true on every page. Check them once against a sample of each template.
-
Robots rules and the noindex flag are what production intends
How to verifyRead the live robots.txt and crawl a sample for noindex. Staging defaults reaching production is the failure that costs the most and is the easiest to miss.
-
One canonical per page, self-referencing and resolving
How to verifyConfirm the canonical points at the live indexable URL, not a staging host or a redirect.
-
Analytics, consent and server logging are all recording
How to verifyLoad a page and confirm the tag fires, the consent banner does not block measurement by default, and the request appears in the logs.
-
The header and footer link set matches the old site
How to verifyDiff the sitewide link lists. Global navigation carries most internal linking, so a dropped block changes the whole site's internal structure.
-
HTTPS, www and trailing slash all resolve one way
How to verifyRequest each variant and confirm a single redirect to the canonical form, with no chains and no loops.
The homepage carries more links than anything else on the site, and most crawls begin there.
-
Organization and site-level markup are present and valid
How to verifyRun the page through a structured data validator and confirm the organization block carries the real name, logo and profiles.
-
The primary navigation and featured links render server-side
How to verifyView source rather than the inspector. The homepage is where crawl paths begin, so client-side links cost the most here.
-
The old homepage URL variants still resolve
How to verifyTest index.html, default.aspx and any legacy locale root, since these accumulate links over years.
Category pages hold most of the catalog rankings. Pagination and filters are what break them.
-
Product links are in the HTML, not loaded on scroll alone
How to verifyFetch without JavaScript and count product links. Infinite scroll with no paginated fallback hides the catalog from non-rendering crawlers.
-
Pagination is crawlable and each page is self-canonical
How to verifyConfirm page two is reachable by a link and canonicals to itself, not back to page one.
-
Filter and sort combinations do not generate indexable duplicates
How to verifyCheck that faceted URLs are noindexed, blocked or parameter-handled, and that a plain unfiltered URL exists for each category.
-
Category copy survived the move
How to verifyCompare the intro and supporting copy against the old template. Rebuilt grids routinely drop the text block that made the page rank.
Product pages convert, and they are the ones most often rebuilt client-side.
-
Product markup carries price, availability and identifiers
How to verifyValidate a sample and confirm the values match what the page displays, since mismatches lose rich results outright.
-
Description, specifications and reviews are in the source
How to verifyFetch without JavaScript. Tabs and accordions that fetch content on click leave the page empty to anything that does not render.
-
Variants resolve to a stable, canonical URL
How to verifyConfirm each variant either has its own indexable URL or canonicals to the parent, consistently across the catalog.
-
Discontinued products have a decided destination
How to verifyConfirm the rule is decided in advance: redirect to the closest replacement, keep the page live with alternatives, or return 410. Without one, the outcome is silent 404s on former best sellers.
Editorial URLs change more than any others in a replatform, and they are the easiest to leave behind.
-
Article URLs are mapped individually, including dated paths
How to verifyCheck old patterns with year and month segments against the new structure. These rarely map by rule and are frequently dropped wholesale.
-
Article markup carries author, publish date and modified date
How to verifyValidate one article and confirm the dates are real rather than the migration date, which resets the apparent freshness of the whole archive.
-
Category and tag pages are deliberately indexed or not
How to verifyConfirm the decision per taxonomy, and that tag combinations are excluded. Auto-generated tag archives are a common source of thin duplicates.
Nobody demos these pages, so nobody catches them before launch.
-
Internal search results are excluded from the index
How to verifyConfirm the results template carries noindex, and that no internal link points into a search URL.
-
The 404 template returns a 404 status
How to verifyRead the status code for a nonsense URL rather than trusting what the page says.
-
Account, cart and checkout are excluded but reachable
How to verifyConfirm they are noindexed or blocked, and that blocking has not also removed them from the navigation a shopper needs.