There is no native SharePoint to Confluence import path. Every method requires API scripts, third-party tools, or managed migration — plus careful permission and content mapping.
There is no native migration path from SharePoint to Confluence. Atlassian offers no import wizard, no migration tool, and no built-in connector that moves SharePoint data into Confluence storage. SharePoint uses .aspx pages with Web Part JSON structures and SQL-backed lists with inheritance-based permissions. Confluence uses XHTML-based wiki pages with macros and an additive permission model. Every method requires .docx-to-XHTML conversion, custom API scripts or enterprise tools, careful permission mapping, and a dedicated link rewriting pass after migration.
Read this first
Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.
Confluence space keys are permanent
Once a space is created, its key cannot be changed without recreating the space and rewriting all internal links. Choose space keys deliberately before the migration begins — a key like ENG or HR is far harder to regret than a auto-generated ~123456789.
A connector creates a permanent coupling between two platforms
If your goal is decommissioning SharePoint, a connector makes the problem worse, not better.
Manual migration is only viable for small, low-complexity content sets where you're
Manual migration is only viable for small, low-complexity content sets where you're comfortable losing metadata and version history. For anything over 50 pages, the time investment exceeds the cost of automation.
The Graph Pages API has known edge cases with complex Web Part structures
The Microsoft-Graph API seems to not work for more complicated Pages. Serialization issues are present and reported in the SDK. However, the API fails also within Postman. Test with your actual page content before committing to this path.
Use CSV to drive the migration, not to pretend the migration is done
A CSV can tell your script which SharePoint URL becomes which Confluence page, which labels to apply, and which attachment set belongs to which page. It cannot reproduce a modern SharePoint page layout on its own.
Map your Azure AD / Entra ID groups to Confluence groups before starting the migration
Confluence permissions are group-based at scale. Attempting to set per-user restrictions across hundreds of pages creates an unmaintainable permissions model.
Run a pilot migration with one representative SharePoint subsite before migrating your
Run a pilot migration with one representative SharePoint subsite before migrating your entire environment. This catches conversion issues, permission mapping problems, and attachment failures at a scale where they're cheap to fix.
The runbook
Work top to bottom. Tick steps as you go — your progress is saved in this browser.
01 Discovery Decide what content deserves to move before you plan how to move it.
Objective A content inventory with a keep/rewrite/retire decision on every article and an agreed URL strategy.
Keep these open
-
Inventory all content in SharePoint
Count articles, categories, attachments, images and embedded media, and pull page views and last-updated dates for each article. Usage data is what makes the next decision defensible rather than political.
Data Profiler Get real record counts instead of estimating from memory -
Make a keep, rewrite or retire call on every article
Most knowledge bases are half stale. Migrating everything imports the staleness and doubles the work; use views and last-updated to triage, and get the owning team to confirm. This usually removes 30-50% of scope.
Migrating stale content is the most common knowledge-base migration mistake — it costs effort and actively degrades the new site.
-
Agree the URL and redirect strategy
Decide the Confluence URL structure and whether you can serve 301 redirects from the old paths. Public help centres carry real search traffic and inbound links; losing it is a measurable commercial impact.
Without 301 redirects from old article URLs you lose accumulated search ranking and every external link and bookmark breaks.
-
Map the information architecture
Document the current category tree and design the target one, checking whether Confluence supports your nesting depth. Deeply nested hierarchies frequently have to be flattened, which changes navigation for everyone.
-
Confirm permissions, audiences and localisation scope
Establish which content is public, internal or restricted, and how Confluence models that. Then confirm how many locales you have and whether translation relationships between articles survive the move.
-
Document libraries
have no Confluence equivalent — files either become page attachments or must be converted to native wiki pages
SharePoint → Confluence specifics
- SharePoint sites
- have no equivalent container in Confluence beyond Spaces
- SharePoint lists
- must be rebuilt as Confluence tables, databases, or integrated via macros
- SharePoint's permission inheritance model
- (site → library → item) doesn't map cleanly to Confluence's additive permission model (global → space → page restrictions)
- You still pay for SharePoint
- The data never leaves Microsoft's servers. You are maintaining two enterprise licenses.
- No native searchability
- Confluence's global search cannot index the text inside embedded SharePoint documents.
Don't move on until
- Full content inventory with page views and last-updated dates
- Keep / rewrite / retire decision recorded per article
- URL and redirect strategy agreed with whoever owns SEO
02 Data Audit Audit the markup, the links and the assets — that is where KB migrations break.
Objective A content export with markup, internal links and every embedded asset accounted for.
Keep these open
-
Export content and assess markup fidelity
Export articles in the richest format available and inspect what survived: tables, code blocks, callouts, nested lists, anchors and embedded video. Rich formatting is where fidelity is lost, and it is lost quietly.
HTML-to-Markdown conversion routinely mangles nested lists, tables and code blocks. Inspect the output rather than trusting the converter.
Data Profiler Profile the SharePoint export for nulls, outliers and type drift -
Inventory every internal link and cross-reference
Extract all internal links, anchor links and article cross-references. These break by default: the target URL structure differs, so every internal link needs rewriting as part of the load, not afterwards.
Internal links left pointing at old URLs turn the new knowledge base into a maze of 404s on day one.
-
Inventory images, attachments and embedded media
List every asset with its URL, size and type, and confirm each still resolves. Assets hosted on the old platform's CDN will 404 the moment you decommission it, so they must be rehosted, not referenced.
Images referenced from the source platform's CDN break when the old account closes. Download and rehost every asset.
-
Find and fix broken links and orphans
Crawl for existing broken internal and external links, and find articles no category links to. Fix them before migrating — a migration is a bad time to discover pre-existing rot.
-
Check for PII and internal information in public content
Scan for customer names, internal hostnames, credentials in code samples and screenshots containing real data. Republishing these on a public help centre is a disclosure, and screenshots are the usual culprit.
PII & Compliance Scanner Find regulated fields before they land in a new system -
Normalise metadata
Standardise authors, tags, timestamps to UTC, and locale codes. Author mapping needs a decision for people who have left — attribution to a deleted user usually fails the import.
-
Export content from SharePoint
Download .docx files from document libraries. For modern pages, copy rendered content from the browser.
-
Import Word documents into Confluence
Confluence Cloud supports importing a single .docx file as a new page via the UI (Create → Import Word document). This converts basic formatting but strips SharePoint-specific metadata.
-
Download and re-upload attachments
Every image, PDF, and embedded file must be manually downloaded from SharePoint and uploaded to the corresponding Confluence page.
Don't move on until
- Content exported with markup fidelity assessed
- Every internal link and asset reference inventoried
- Broken links and missing assets fixed or logged
03 Field Mapping Map structure, metadata, permissions and — above all — URLs.
Objective A mapping covering article fields, taxonomy, permissions and a complete old-to-new URL map.
Keep these open
-
Map the article schema
Map title, body, excerpt, author, dates, status, tags, SEO metadata and any custom properties. Confirm which fields Confluence lets you set on import versus which it computes — computed dates are a common surprise.
Schema Mapper Opens pre-loaded with the SharePoint → Confluence field pair -
Map the taxonomy and hierarchy
Map categories, sections and tags to the target structure, resolving any nesting-depth limit explicitly. If you must flatten, decide how the lost level is preserved — usually as a tag or a title prefix.
JSON to CSV Converter Flatten nested API responses into a reviewable sheet -
Map permissions and audience segmentation
Map public, logged-in, and role-restricted visibility to Confluence's model. Verify the mapping deliberately: internal content accidentally published publicly is the highest-severity failure in this whole category.
Permission mapping errors publish internal documentation to the open web. Verify visibility on every restricted article after load.
-
Build the complete old-to-new URL map
Produce a row per article mapping the old URL to the new one, then confirm exactly where the 301s will be served — Confluence, a CDN, or your own web layer. Without this artifact the redirect step cannot be executed at all.
-
Define the markup conversion and link-rewrite rules
Specify how each markup construct converts and how internal links are rewritten using the URL map. Write it as a repeatable transform, not manual edits — you will run it more than once.
Data Format Converter Reshape the export into the format Confluence's importer expects -
Plan localisation and freeze the spec
Confirm how translated articles link to their source language in Confluence, then version and sign off the mapping spec.
Don't move on until
- Article schema and taxonomy mapped
- Permission and audience model mapped to target equivalents
- Complete URL map produced and redirect method confirmed
04 Test Migration Pilot the hardest articles, then read them.
Objective A pilot load whose formatting, links, assets and search all hold up under human review.
Keep these open
-
Configure Confluence with the agreed structure
Create the category tree, permission groups, locales and branding before loading. Articles loaded before their categories exist land uncategorised and have to be moved by hand.
-
Pick the most difficult articles as the pilot
Choose 20-50 articles for difficulty: the longest, the most heavily formatted, ones with tables and code blocks, deep internal linking, many images, embedded video, restricted visibility, and non-Latin scripts. Easy articles prove nothing.
-
Run the conversion and load with link rewriting
Apply the markup conversion, rewrite internal links from the URL map, upload and re-reference assets, then load. Log every conversion warning rather than suppressing it.
-
Read every pilot article side by side
Open source and target together and compare rendering. This step is manual on purpose: no automated check catches a table that collapsed into a paragraph or a code block that lost its indentation.
-
Click every link and load every asset
Verify each internal link resolves, each image loads from the new host, each attachment downloads and each embed plays. Assets still served from the old CDN are the defect that surfaces only after decommissioning.
Migration Validation Tool Diff the pilot batch against source before scaling up -
Test search and permissions
Search for known terms and confirm the right articles rank, then verify every restricted pilot article is invisible to an anonymous browser. Test permissions from a logged-out session, not an admin one.
Don't move on until
- Complex articles render correctly with formatting intact
- Every internal link and asset in the pilot resolves
- Search returns sensible results for the pilot content
05 Cutover Publish, redirect, and keep the search traffic.
Objective All in-scope content live in Confluence with redirects serving and search engines informed.
Keep these open
-
Load the full content set ahead of the switch
Run the full conversion and load into Confluence, unpublished or on a staging domain. Content migration differs from data migration here: you can stage the whole thing before anyone sees it.
-
Publish the runbook with the redirect step first-class
Sequence the freeze, final delta, publish, redirect activation, sitemap submission and link updates, with owners for each. Redirect activation is the step with lasting commercial consequences, so it gets explicit ownership.
-
Freeze editing and migrate the delta
Stop editing in SharePoint, then convert and load anything changed since the full load. Announce the freeze to every team that publishes — content teams are used to editing whenever they like.
-
Publish and verify permissions live
Publish the content set, then immediately verify restricted articles are not publicly reachable using an anonymous session. Do this before announcing the new site, not after.
Verify restricted content from a logged-out browser. An admin session will show you everything and tell you nothing.
Migration Validation Tool Confirm the final delta landed before you reopen -
Activate 301 redirects and submit the sitemap
Turn on the redirects from the URL map, then spot-check a sample of high-traffic old URLs and confirm each returns 301 to the right article. Submit the new sitemap and keep the old one reachable until search engines have recrawled.
Redirect chains and redirect loops both leak ranking. Verify each redirect resolves in a single hop.
-
Repoint in-product and support links
Update help links embedded in your product, in support macros, in email templates and in onboarding material. These are the links your existing customers actually use, and they are easy to forget.
Don't move on until
- All content loaded, categorised and correctly permissioned
- 301 redirects live and verified from a sample of old URLs
- Sitemap submitted and support links repointed
06 Validation Watch traffic, links and search rankings for weeks, not hours.
Objective Verified content completeness, healthy redirects, and search traffic recovered to baseline.
Keep these open
-
Reconcile content counts and assets
Compare article counts by category and status, plus asset counts, against source. Confirm every article in the keep list is present and every retired one genuinely is not.
Migration Validation Tool Reconcile SharePoint and Confluence record-for-record -
Crawl the new site for broken links and assets
Run a full crawl for 404s, broken images and missing attachments, and fix everything it finds. Repeat the crawl after the fixes rather than assuming they worked.
-
Verify the redirects at scale
Test every mapped old URL for a single-hop 301 to the right destination. Chains and loops both leak ranking and are invisible unless you check the whole map, not a sample.
-
Monitor organic traffic and rankings for four to eight weeks
Track organic sessions, impressions and rankings for your top articles against baseline. A dip in the first two weeks is normal; one that has not recovered by week six is a redirect or indexing problem to investigate.
Do not decommission the old platform until search traffic has recovered — you may still need the old URLs to diagnose a ranking loss.
-
Verify search, permissions and feedback loops
Confirm on-site search returns good results for real queries, re-verify restricted content from a logged-out session, and check article feedback and analytics are collecting.
-
Sign off and decommission on a delay
Get acceptance against the Discovery criteria, keep SharePoint available read-only until traffic has recovered, take a final export, and only then close the account.
SharePoint → Confluence specifics
- Internal links
- Every hyperlink between SharePoint pages points to the old SharePoint URL and must be rewritten
- Embedded images
- Images stored in SharePoint's SiteAssets library won't travel with copy-paste
- Metadata
- Created date, modified date, author attribution — all reset to "you, right now"
- Page hierarchy
- Must be manually recreated in the Confluence page tree
Don't move on until
- Article counts reconciled and no broken links remain
- Redirects returning 301 with no chains or loops
- Organic traffic recovered to within tolerance of baseline
Field mapping reference
The field-by-field mapping for each object. Use this as the starting point for your mapping spec.
Concept Equivalent
| SharePoint field | Confluence field | Notes |
|---|---|---|
| Site Collection | N/A (organizational boundary) | Map to a set of related Spaces |
| Hub Site | Space category or label group | No direct equivalent |
| Subsite | Confluence Space | One subsite = one space is the cleanest mapping |
| Modern Page (.aspx) | Confluence Page | Content requires Web Part → XHTML conversion |
| News Post | Blog Post | Use blog post API to preserve publish dates via createdAt |
| Document Library | Page attachments or converted pages | Decide per library: attach files or convert to native pages |
| List | Confluence table, database, or Jira integration | Static tables lose dynamic filtering; consider Jira if lists are task-based |
| Web Part | Confluence Macro | Very few 1:1 mappings exist |
| Managed Metadata / Term Store | Labels | Flat label taxonomy only; no hierarchical terms |
| Content Types | Page templates | Must be manually recreated |
| Folder hierarchy | Page tree | Only mirror shallow hierarchies; deep folder trees need redesign |
Column Type Table Result
| SharePoint field | Confluence field | Notes |
|---|---|---|
| Single line of text | Plain text cell | No loss |
| Multi-line text | Plain text cell | Formatting stripped |
| Choice | Plain text (selected value only) | Multiple selections become comma-separated |
| Person or Group | Display name as plain text | No link to user profile |
| Lookup | Display value as plain text | Relationship to source list is lost |
| Managed Metadata | Plain text (term label only) | Term hierarchy and ID are dropped |
| Date and Time | Plain text | No date-picker behavior |
| Calculated | Static computed value at export time | Formula is not migrated |
| Hyperlink | Plain URL or linked text | Survives if correctly formatted |
Risk matrix
Per-object risk for this pair. Plan extra validation around anything marked high.
| Object | Risk | Notes |
|---|---|---|
| Modern Pages (.aspx) | high | Web Part structures require custom XHTML conversion; complex web parts have no equivalent |
| Internal Links | high | Every SharePoint URL breaks by default; needs full mapping table and post-migration rewrite |
| Permission Inheritance | high | SharePoint's cascading model doesn't translate to Confluence's additive model |
| Version History | high | Lost entirely during migration; no Confluence import mechanism for historical versions |
| Document Libraries | medium | Must decide between attaching as-is or converting to native searchable pages |
| Managed Metadata | medium | Becomes flat Confluence labels; hierarchical term relationships lost |
| Embedded Images | medium | Must be extracted, uploaded as attachments, and referenced via ac:image macro |
| SharePoint Lists | medium | Must be rebuilt as Confluence tables or databases; dynamic filtering lost |
| Text Web Part Content | low | Converts to XHTML storage format with high fidelity |
| News Posts | low | Maps well to Confluence blog posts with createdAt date preservation |
The hard parts
What makes this specific migration difficult, beyond the mechanics.
Storage Format Conversion
SharePoint .docx files must be converted to Confluence's XHTML-based storage format via Mammoth or Pandoc with post-processing for ac:image macros.
Permission Model Mismatch
SharePoint's inheritance-based model (site → library → item) doesn't map to Confluence's additive permission system (global → space → page restrictions).
Web Part Translation
Most SharePoint Web Parts have no Confluence macro equivalent; only text web parts convert with high fidelity.
Internal Link Rewriting
Every SharePoint .aspx URL must be rewritten to Confluence page IDs using a mapping table built during migration.
Attachment Migration
Files must be physically uploaded as Confluence attachments and referenced via ac:image macros — connector apps only link, not move.
What breaks
Known failure modes. Have a recovery plan for each before you cut over.
Internal links
: Every hyperlink between SharePoint pages points to the old SharePoint URL and must be rewritten
Embedded images
: Images stored in SharePoint's SiteAssets library won't travel with copy-paste
Metadata
: Created date, modified date, author attribution — all reset to "you, right now"
Version history
: Lost entirely
Page hierarchy
: Must be manually recreated in the Confluence page tree
Tools used in this playbook
All free, all run entirely in your browser — nothing is uploaded.
FAQ
Is there a native tool to migrate from SharePoint to Confluence?
No. Atlassian does not offer a native import tool, migration wizard, or one-click migration path from SharePoint to Confluence. Confluence Cloud's import options cover Word, Google Docs, HTML, and CSV — not SharePoint. You must use custom API scripts, third-party tools like Enterprise Bridge, or a managed migration service.
Can I use the SharePoint Connector for Confluence to migrate data?
No. The SharePoint Connector for Confluence is an integration tool that embeds SharePoint content inside Confluence pages via macros. It does not move data — files remain stored in SharePoint, meaning you still pay for Microsoft storage and lose native Confluence search indexing. If you decommission SharePoint, every page using the connector macro breaks.
How do I convert SharePoint .docx files to Confluence pages?
Download .docx files via the SharePoint REST API, convert them to HTML using a library like Python Mammoth or Pandoc, clean the output to conform to Confluence's XHTML-based storage format, then push the content to Confluence via the REST API. Images must be extracted, uploaded as attachments, and referenced using Confluence's ac:image macro.
How do SharePoint permissions map to Confluence?
SharePoint uses an inheritance-based model (site → library → item), while Confluence uses an additive model (global → space → page restrictions). Map Site Owners to Space Admins, Site Members to Add/Edit permissions, and Site Visitors to View-only. Item-level broken inheritance maps to Confluence page restrictions. Azure AD groups must be manually mapped to Confluence groups before migration.
What happens to internal links during a SharePoint to Confluence migration?
Internal links break by default. Every link pointing to a SharePoint URL must be rewritten to its new Confluence page URL. Build a URL mapping table during migration that maps old SharePoint URLs to new Confluence page IDs, then run a post-migration script to find and replace all stale links in page bodies.