WordPress media migration

Move your WordPress media
to S3, Cloudinary, or a DAM.

Offload your WordPress media library to AWS S3, Cloudinary, Azure Blob, AEM, or any of 12 destinations — with alt text, captions, titles, and the /uploads structure preserved. Read-only against your live site, resumable, with a complete old→new URL map for rewriting your posts.

Usage-based · no subscriptionAlt text + captions preserved/uploads structure mappedOld→new URL map included
Developer offloading a WordPress media library to cloud storage
Media offload — readyread-only · resumable · URL map exported

Why teams move media off WordPress

The four reasons we hear from WordPress teams.

The media library has no real structure

WordPress dumps everything into a flat /uploads/YYYY/MM tree with no folders, tags, or taxonomy. Past a few thousand images it becomes impossible to find or govern — and a real DAM or object store with prefixes is a big step up.

Serving images from WordPress is slow + pricey

Every image request hits your WP host. Offloading to an object store + CDN is faster, cheaper, and frees your origin — but only worth it if the move keeps alt text and existing URLs intact.

Alt text + captions are trapped in WP

Years of accessibility and SEO metadata (alt text, captions, titles) live only in the WordPress database. A plain file copy to S3 drops all of it, and you start the new home with bare filenames.

Going headless or consolidating sites

Moving to a headless front end, or merging media from several WordPress sites into one DAM, means extracting attachments + metadata cleanly — exactly the part the WP admin and most plugins do not handle well at scale.

How it works

Four steps from connect to rewritten URLs.

01

Connect WordPress

Paste your site URL + an Application Password (WP 5.6+) for a user with upload_files. Read-only against your live site, encrypted at rest, never logged.

02

Pick a destination

S3, Cloudinary, Azure Blob, GCS, AEM, Bynder, or any of 12 supported destinations.

03

Start the migration

Attachments stream directly from WordPress. Alt text, captions, titles, descriptions, and the /uploads path all carry over.

04

Rewrite your URLs

On completion you get a CSV of every old→new URL — run a WP-CLI search-replace or a CDN rewrite. No broken images.

Schema-aware translation

Alt text and captions move with the files — not just the bytes.

WordPress attachment metadata — alt text, caption, title, description, and the /uploads path — maps onto the destination’s model: S3 user-metadata, Cloudinary context, or AEM jcr: fields. Your accessibility + SEO metadata survives the move.

Schema translation·live
100% mapped

Source

WordPress

Destination

AWS S3

Attachment

hero.jpg (image/jpeg)

S3 object

images/2026/06/hero.jpg

Upload path

/uploads/2026/06/

key prefix

images/2026/06/

Alt text

Spring hero banner

x-amz-meta-alt

Spring hero banner

Caption

Shot on location, 2026

x-amz-meta-caption

Shot on location, 2026

Title

Spring Hero

x-amz-meta-title

Spring Hero

MIME + dimensions

image/jpeg · 1920×1080

ContentType + meta

preserved verbatim

8,420 attachments · alt + caption preserved · URL map exported
lossless · 0 dropped

What you actually get

Migration infrastructure, not an export plugin.

Alt text + caption preservation

Every attachment's alt text, caption, title, and description maps to the destination's metadata model — your accessibility and image-SEO metadata survives the move instead of being dropped.

Complete old→new URL map

You get a CSV of every WordPress media URL paired with its destination URL. Run a WP-CLI search-replace across posts + meta, or rewrite at the CDN layer — no broken images after cutover.

Folder/date structure carried

The /uploads/YYYY/MM structure maps to destination key prefixes by default, or flatten/re-prefix while you migrate. Deterministic mapping — you always know where each file landed.

Read-only + audited

We only call the WordPress REST API to read attachments — never write back, so your live site and database are untouched. Per-asset audit row from WP fetch to destination ACK.

Where WordPress media can land

Offload to object storage, a CDN, or a DAM.

S3 + a CDN is the classic offload; Cloudinary adds on-the-fly transforms; AEM or Bynder gives you a real DAM with taxonomy. Univaultport maps WordPress alt text, captions, and titles to each destination’s metadata model so nothing is lost in the move.

AWS S3
Cloudinary
Azure Blob
Google Cloud Storage
AEM Assets
Bynder

+ 6 more (Contentful, Dropbox, Google Drive, FTP, SFTP, local).

Simple, usage-based pricing

Pay only for what you migrate.

No subscription, no per-asset fee, no minimum — and free credits on signup so you can run a real migration end-to-end before you pay anything. See the pricing page for current rates and enterprise options.

No subscription — pay per migration
Free credits to test before you pay
Metadata + renditions included
Enterprise & annual commit options

WordPress migration FAQ

The questions that come up before every media offload.

  • Most WordPress libraries are a few GB to a few hundred GB, which completes in hours. We pull attachments via the WordPress REST API in parallel and stream them straight to the destination, so wall-clock time is set by destination throughput, not WP. The migration is resumable, and a 100k-attachment library is no different from a small one — just more pages of the same loop.

Offload WordPress media
without losing metadata.

Sign up, connect WordPress, pick a destination, kick off a real migration. 1,000 free credits — no card required.