Migrating a docs site isn't a copy-paste job. You're moving content AND inbound links AND SEO equity AND writer muscle memory. Doing all four in one weekend is usually a disaster. This guide covers the phased approach that keeps your docs online, your Google rankings intact, and your writers productive during the transition.
The CLI migration command handles the mechanical file-conversion part. This guide is about everything AROUND that.
Why migrate (and why NOT to)
Do migrate when...
Current platform pricing scales poorly with team + content size
You need AI-native features (llms.txt, MCP, Copy-for-LLMs) your current platform doesn't ship
Current platform's editor slows your writers down
You want full Git control, not a proprietary lock-in
Don't migrate when...
You're hoping a migration will fix your writing quality (it won't — content stays the same, framing changes)
You haven't shipped consistently for 6 months (migration doesn't replace discipline)
You're 2 weeks before a major product launch (bad timing — migrate in a quiet window)
Your team hasn't used the target platform for at least 2 weeks in sandbox (unknown unknowns)
The three-phase approach
Phase 1 — Parallel (2-4 weeks)
New platform runs alongside the old. Content migrated + published to a staging domain (docs-beta.acme.com). Writers author new content in the new platform; old platform accepts minor edits only. No public cutover yet.
Phase 2 — Soft cutover (1-2 weeks)
New platform becomes the canonical. Old platform URLs 301/308 redirect to new platform equivalents. Search Console verified on both domains. Public announcement lands at the end of this phase.
Phase 3 — Old-platform sunset (4-8 weeks)
Old platform content stays accessible via redirects for SEO continuity. After Google has re-indexed (~4 weeks), you can decommission the old platform. Redirect rules stay in place indefinitely.
Don't compress these phases. The redirects need time to take effect in Google's index; your team needs time to absorb the new editor; the URL-change dust needs to settle.
Phase 1 — Parallel setup
Mechanical migration
Run the CLI once against a copy of your old-platform repo:
nookdocs migrate ./old-mintlify-repo --output ./nookdocs-stagingOutput: a nookdocs-staging directory with nookdocs.config.json + docs/ + migrated assets. Commit to a new GitHub repo, hook up via the NookDocs dashboard, and deploy to a staging subdomain (staging.nookdocs.site or your own docs-beta.acme.com).
See migrate-from-mintlify for the mechanical conversion matrix.
Content audit during migration
The migration is a forcing function for a content audit you should have done anyway:
What to KEEP
Pages with clear inbound search traffic. Pages referenced from support tickets. Pages covering currently-active product features. The top ~60% of pages by traffic.
What to REWRITE
Pages with high bounce + low engagement. Pages that felt awkward on old platform. Pages mixing Diátaxis modes. Take this chance — reshape the content in the new platform before committing to it.
What to MERGE
Two or three pages that cover overlapping topics. Migration is the moment to consolidate — fewer pages, stronger topical clusters (see SEO guide).
What to RETIRE
Pages with no inbound links + near-zero traffic. Pages covering retired features. Pages nobody's touched in 2+ years. Don't migrate what you'd delete.
Writer training
Two weeks minimum on the new platform before writers switch full-time:
Everyone signs in + edits a test page. Muscle memory starts here.
Walk through the editor + Git workflow. Especially important when moving from a WYSIWYG platform to MDX.
Document internal conventions. Which component for which scenario, which frontmatter fields are required, etc. One short internal page.
One writer ships a test page each week. Real publishing, even if to staging. Surfaces issues before cutover.
Phase 2 — Soft cutover
The scary phase. Done right, your users don't notice. Done wrong, Google delists half your content for a month.
Redirect map — the most important artifact
Every URL on the old platform must redirect to its new equivalent. Build the map BEFORE cutover, audit it, test a sample.
Format: two-column CSV.
old_url,new_url
/docs/getting-started,/quickstart
/essentials/markdown,/content/format-text
/essentials/code,/features/code-blocks
/essentials/images,/guides/media
/api-reference/endpoint/list-users,/api-reference/users/list-users
/blog,https://acme.com/blogGenerate the initial map automatically from the old platform's sitemap + the new platform's file structure, then audit by hand. Expect 5-15% of entries to need manual override — the auto-match usually gets 85%+.
Three places to set redirects
Pick the layer that matches your deployment:
DNS layer (preferred when old platform becomes unreachable)
Point docs.acme.com DNS at NookDocs. NookDocs's nookdocs.config.json#redirects handles path remapping. Works if old platform is being fully sunset.
Old-platform redirect config
Most docs platforms support redirects config. Keep docs.acme.com pointed at the OLD platform, configure redirects in old platform to send users to docs.acme.com/new-path (same domain) or https://docs-v2.acme.com/new-path.
Preferred when you want to keep the old platform reachable for 4-8 weeks during Phase 3.
CDN / reverse proxy layer (most control)
Cloudflare Workers, Vercel rewrites, or Nginx. Proxy intercepts every request to docs.acme.com, checks the redirect map, returns 301/308 for matches, passes others through to the new platform.
Most flexible, most work. Only needed when the other two options don't fit.
Status codes that matter
301 Moved Permanently — older HTTP 1.0. Widely supported.
308 Permanent Redirect — HTTP 1.1. Preserves the request method. Google treats it identically to 301. Prefer 308 for new deployments.
302 / 307 Temporary — don't use for a migration. Temporary tells Google not to transfer ranking signals. You want permanent.
NookDocs's redirects config uses permanent: true → 308. Set it for the migration.
Search Console continuity
Before cutover:
Verify new domain in Search Console.
docs-v2.acme.comif using a new domain, or verify the same property post-migration if reusingdocs.acme.com.Submit the new sitemap.
docs-v2.acme.com/sitemap.xml— NookDocs auto-generates.File "Change of Address" if moving to a new domain. Search Console → Settings → Change of Address. Tells Google explicitly that content moved.
After cutover:
Daily Search Console checks for 2 weeks. Coverage → Indexed pages should stabilise. If you see a sudden drop, a redirect may be broken.
Search traffic drop tolerance: 20-30% for the first month is normal. Should recover within 6-12 weeks. If not, re-audit redirects + freshness signals.
LLM-crawler continuity
AI engines re-crawl on their own schedule (weekly to monthly). After cutover:
/llms.txtauto-updates on NookDocs. Verify withcurl.Sitemap auto-updates. Same.
Custom
Accept: text/markdown+X-Llms-Txtheaders (when shipped — roadmap) help AI engines discover faster.
Spot-check AI answers weekly for a month. ChatGPT / Perplexity / Claude / Google AI → ask the top 5 questions about your product. Verify citations point at new URLs, not 404s.
Phase 3 — Sunsetting the old platform
4-8 weeks after cutover:
Verify Google re-indexed
Search Console → Coverage → Indexed pages. New-platform URLs up; old-platform URLs dropping as redirects take effect. 80%+ indexed is a good signal.
Verify organic traffic stabilised
Analytics on new platform: traffic trend flat or rising. Traffic drop from the cutover week has recovered.
Verify no remaining traffic to old platform
Old-platform analytics: traffic declining steadily. Under 5% of pre-cutover levels means almost everyone uses the redirect.
Decommission carefully
Keep redirects in place indefinitely (301/308 at DNS or CDN layer).
Can cancel old platform subscription once redirects are owned by a different layer.
Archive the old platform content (git repo) before cancelling, in case you need to refer back.
Rollback plan
If Phase 2 goes badly — traffic tanks, writers can't work, editor breaks — have a rollback ready:
Flip DNS back to the old platform (5-minute TTL so changes propagate fast).
Disable redirects on the new platform.
Writers resume on old platform until issues resolved.
Postmortem, new timeline, retry.
You should be able to roll back within 30 minutes. If you can't, the rollback plan isn't real.
Common migration mistakes
Migration checklist
Print this. Walk through linearly.
Pre-migration (2-4 weeks out):
Run CLI migration against current repo → review output
Audit content: keep / rewrite / merge / retire
Build redirect map (old URL → new URL)
Stand up new platform on staging subdomain
Writers trained + one test page shipped each
Verify
nookdocs.config.jsonsettings (theme / colors / SEO / contextual menu)Backup old platform content (git repo cloned)
Cutover day:
Flip DNS or CDN rewrite to new platform
Verify redirects work for sampled old URLs
Verify new platform serves correctly on canonical URL
Submit new sitemap to Search Console + Bing Webmaster
If new domain: file Change of Address in Search Console
Send announcement (blog post + Twitter + users' email list)
Post-cutover (weekly, for 4 weeks):
Search Console coverage trend (indexed pages)
Analytics traffic trend
Support ticket volume (any spikes = hidden breakage)
AI engine citation spot-check (ChatGPT/Perplexity/Claude)
Broken link audit (
lycheeor similar)Redirect map audit (any entries receiving traffic but not redirecting correctly)
Sunset (4-8 weeks post-cutover):
Old platform traffic under 5% of pre-cutover
Keep redirects at DNS/CDN layer
Archive old platform content
Cancel old platform subscription
Retrospective: what went well, what'd we change next time
Related
Migrate from Mintlify (CLI) — the mechanical conversion
Migrate command — CLI flags + platform detection
Redirects — the redirect config reference
SEO for docs — what matters for ranking continuity
Improving docs — post-migration improvement loop
Maintenance — post-migration freshness