We make Blog Import, a Framer plugin that moves old blogs into Framer CMS. Photographers' blogs are the hard case: one post per wedding or place, 30 to 80 photos each, usually with a caption under every photo. So we built a test post with 50 captioned photos and pushed it through a real Framer project. Three things came out of it that apply whether you use our plugin or write your own import.

1. Where the images live decides whether they copy

Framer's CMS can take an image by URL and store its own copy. Our first run pointed at public domain photos on Wikimedia's thumbnail server. From a laptop every one of those URLs answered 200. From Framer's side, all 64 failed, retries included.

We then hosted resized copies (1600 px, under 400 KB each, about 20 MB in total) on a plain static site and ran the same import. All 64 copied, in under 20 seconds.

A real blog hosts its own images, so this mostly matters for tests and demos. But if your old site sits behind hotlink protection or a bot filter, expect the same failure, and keep the old site online until the copy is done.

2. Static hosting caches longer than you think

Between the two runs we changed the sample JSON and ran the import again a few minutes later. It still read the old URLs. GitHub Pages serves files with cache-control: max-age=600, and the browser running the plugin kept the copy from the first run. After ten minutes the new file came through. If you iterate on fixture data served from a static host, change the path or wait out the cache.

3. Framer's rich text drops <figure> and <figcaption>

WordPress writes a captioned photo like this:

<figure class="wp-block-image"> <img src="/uploads/2025/06/harbour.jpg" alt="Harbour at dusk"> <figcaption>The harbour an hour after the ceremony</figcaption> </figure> 

Sent to a Framer CMS formatted text field as is, the image arrived, but the caption text was gone and the image lost its alt. What survived was a bare image.

What works is turning each captioned figure into plain tags the field keeps: the image, then a paragraph with the caption in italics, and the caption as alt when the image has none.

<img src="/uploads/2025/06/harbour.jpg" alt="Harbour at dusk"> <p><em>The harbour an hour after the ceremony</em></p> 

With that change the same post came through with 50 images, 50 captions in order and 50 alts. The same shape covers Ghost's image cards and Medium's figures, which use the same tags.

The short version

  • Copy images from where the old blog hosts them, while it is still online.
  • Don't trust a fixture you changed less than ten minutes ago on a static host.
  • Flatten <figure> and <figcaption> into <img> plus <p><em> before writing to Framer's formatted text.

The caption change is in the current version of Blog Import on the Framer Marketplace. The Showit guide has the steps for photographers whose blog runs on Showit's WordPress, and Blog Import is free. We also made Second Shooter, a Framer template for wedding and portrait photographers built around posts like this one, with every photo large in the text column. If you have moved a big photo blog another way, I'd like to hear what broke.