<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Juan Carlos Rodicio</title>
    <description>The latest articles on DEV Community by Juan Carlos Rodicio (@decamp).</description>
    <link>https://dev.to/decamp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4193464%2F6fa4f652-0520-454c-8dc9-84321959aefe.png</url>
      <title>DEV Community: Juan Carlos Rodicio</title>
      <link>https://dev.to/decamp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/decamp"/>
    <language>en</language>
    <item>
      <title>We followed the redirects of 15 big sites: 12 of 30 start URLs took two hops or more</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Thu, 05 Nov 2026 13:58:28 +0000</pubDate>
      <link>https://dev.to/decamp/we-followed-the-redirects-of-15-big-sites-12-of-30-start-urls-took-two-hops-or-more-jba</link>
      <guid>https://dev.to/decamp/we-followed-the-redirects-of-15-big-sites-12-of-30-start-urls-took-two-hops-or-more-jba</guid>
      <description>&lt;p&gt;After a migration, people check that old URLs “redirect”. That is a weaker test than it sounds. To see what a real result looks like, we ran a plain HTTP request (curl, following redirects, 15 s timeout) on 5 November 2026 against the &lt;code&gt;http://&lt;/code&gt; and &lt;code&gt;http://www.&lt;/code&gt; forms of 15 well-known domains: 30 start URLs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What came back
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;th&gt;Start URLs (of 30)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One 301, ending on a 200&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Two to three hops before the final page&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First hop was a 302 (temporary)&lt;/td&gt;
&lt;td&gt;2 (mozilla.org, &lt;a href="http://www.bbc.com" rel="noopener noreferrer"&gt;www.bbc.com&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocked with a 403 on the first request&lt;/td&gt;
&lt;td&gt;3 (weebly.com, &lt;a href="http://www.weebly.com" rel="noopener noreferrer"&gt;www.weebly.com&lt;/a&gt;, &lt;a href="http://www.nytimes.com" rel="noopener noreferrer"&gt;www.nytimes.com&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Redirected, then a 403 on the final page&lt;/td&gt;
&lt;td&gt;2 (medium.com, &lt;a href="http://www.medium.com" rel="noopener noreferrer"&gt;www.medium.com&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The 12 two-hop cases are mostly &lt;code&gt;www.example.com → example.com → https://…&lt;/code&gt;, or &lt;code&gt;http → https → www&lt;/code&gt;: the host and the protocol are fixed in separate steps. Notion took three hops from &lt;code&gt;notion.so&lt;/code&gt; to &lt;code&gt;notion.com&lt;/code&gt;, and stripe.com ended on a localized &lt;code&gt;/fr&lt;/code&gt; page, chosen by the server from where we were, not by the URL we asked for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for a migration check
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Count hops, don't just look for a 301. A chain of two or three 301s works for visitors, but each hop is another place for a rule to break. Most of the multi-hop results here came from the www/https combination, which a migration changes without anyone noticing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the status of the first hop. Two of 30 started with a 302. For a page you have moved for good, a 302 says “temporary”. Many hosts and plugins default to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the last page, not just the redirect. A redirect that lands on a 404 is the failure that costs you traffic. The Medium case shows the opposite trap: the redirect is fine but the final page refuses a script. A 403 from a bot filter is not the same as a broken page, so a checker should say “blocked”, not “failed”.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test the www and http forms of the new domain too. Old links in the wild use all four combinations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits of this sample
&lt;/h2&gt;

&lt;p&gt;Fifteen large sites, one request each from one server, one day. Big sites are not small migrated blogs, and results from a CDN can vary by location. We did not test deep URLs, only domain roots. It is a way to see what the common shapes look like, not a survey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it on your own list
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://decamp.app/tools/redirect-checker" rel="noopener noreferrer"&gt;free redirect checker&lt;/a&gt; follows each old URL and flags missing redirects, temporary (302) redirects, and landing pages that don't return 200. Paste your list (CSV, &lt;code&gt;_redirects&lt;/code&gt;, &lt;code&gt;.htaccess&lt;/code&gt;) and the new address. For a Wix move the usual gaps are described in &lt;a href="https://decamp.app/notes/wix-301-redirects-limits" rel="noopener noreferrer"&gt;the Wix 301 limits&lt;/a&gt; and &lt;a href="https://decamp.app/notes/wix-urls-redirect-map" rel="noopener noreferrer"&gt;the URLs your redirect map forgets&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://decamp.app/notes/redirect-chains-in-the-wild" rel="noopener noreferrer"&gt;https://decamp.app/notes/redirect-chains-in-the-wild&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>migration</category>
      <category>seo</category>
    </item>
    <item>
      <title>301 redirects on Wix: the 5,000 limit, the homepage rule, and the blog gap</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Wed, 04 Nov 2026 15:16:15 +0000</pubDate>
      <link>https://dev.to/decamp/301-redirects-on-wix-the-5000-limit-the-homepage-rule-and-the-blog-gap-33aj</link>
      <guid>https://dev.to/decamp/301-redirects-on-wix-the-5000-limit-the-homepage-rule-and-the-blog-gap-33aj</guid>
      <description>&lt;p&gt;Wix has a redirect tool, the URL Redirect Manager, and it is easy to assume it will carry a blog move. It can carry part of one. Here are its limits, taken from Wix's help page “Setting up 301 redirects” as we read it on 4 November 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the help page says
&lt;/h2&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;5,000 redirects per site. The page says “You can create a maximum of 5,000 redirects per Wix site.”&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;Custom domains only. You can't redirect from a free Wix address (&lt;code&gt;name.wixsite.com/…&lt;/code&gt;) to a Premium site.&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;No redirect from the homepage in the manager. Wix points to a domain-to-domain redirect for that case.&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;No source link with a &lt;code&gt;#&lt;/code&gt; in it.&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;A few minutes before a new redirect takes effect.&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;Deleted redirects “cannot be recovered.” Keep your list in a file you control.&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;Group redirects exist for many pages that share a path, such as product pages or blog posts. The page doesn't say whether wildcards are supported, so test one before you rely on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The blog gap
&lt;/h2&gt;

&lt;p&gt;When you change a page's slug after publishing, Wix creates a 301 for you. The page lists where that applies: Editor pages, Stores product and category pages, Bookings services, Online Programs and Wix Events. Wix Blog pages are not on the list, and the page says they get no automatic redirect, so you must create one manually. For a blog that matters twice: renaming a post doesn't protect its old link, and a blog with more than a few thousand posts, categories and archive pages can reach the 5,000 ceiling on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this tool stops being useful
&lt;/h2&gt;

&lt;p&gt;The manager only works while the domain is still connected to Wix. If you move the domain to WordPress, Ghost or Webflow, Wix is no longer answering for it, so its redirect list does nothing. The redirects have to live on the new host: a &lt;code&gt;_redirects&lt;/code&gt; file, an &lt;code&gt;.htaccess&lt;/code&gt;, a plugin, or the platform's own redirect panel. Two cases where the Wix manager still helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You keep the old Wix site running on its domain for a while and send selected paths to a new domain. The help page allows an external page as the target if you enter the full URL.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You rebuild inside Wix and change slugs. Automatic redirects cover pages and products, but not blog posts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;List every URL from the sitemap, not from the RSS feed (see &lt;a href="https://decamp.app/notes/wix-urls-redirect-map" rel="noopener noreferrer"&gt;the Wix URLs your redirect map forgets&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Count them. If the list is near 5,000, plan for pattern rules on the new host instead of one-by-one entries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decide the homepage case separately; it can't be a single redirect in the manager.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the list as a file before you delete anything in Wix.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After the switch, run the old URLs through the &lt;a href="https://decamp.app/tools/redirect-checker" rel="noopener noreferrer"&gt;redirect checker&lt;/a&gt;: each should be one 301 to a 200.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://decamp.app/notes/wix-301-redirects-limits" rel="noopener noreferrer"&gt;https://decamp.app/notes/wix-301-redirects-limits&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wix</category>
      <category>webdev</category>
      <category>seo</category>
      <category>migration</category>
    </item>
    <item>
      <title>Squarespace to Webflow: what the export hands you, and why Webflow can't read it</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Tue, 03 Nov 2026 13:19:34 +0000</pubDate>
      <link>https://dev.to/decamp/squarespace-to-webflow-what-the-export-hands-you-and-why-webflow-cant-read-it-9hm</link>
      <guid>https://dev.to/decamp/squarespace-to-webflow-what-the-export-hands-you-and-why-webflow-cant-read-it-9hm</guid>
      <description>&lt;p&gt;“Squarespace to Webflow” is the search that brings most people to Decamp's guides, and the reason is a format mismatch: Squarespace exports one kind of file and Webflow imports another. This note is what Squarespace says its export contains, read from its help page on 1 November 2026, and what that means for a move.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get from Squarespace
&lt;/h2&gt;

&lt;p&gt;Settings → Export gives you a WordPress-format XML file  (&lt;a href="https://support.squarespace.com/hc/en-us/articles/206566687-Exporting-your-site" rel="noopener noreferrer"&gt;Squarespace help: Exporting your site&lt;/a&gt; ). Per that page, it includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;layout pages, and gallery pages (project pages of the older York template only on version 7.0);&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;one blog page with its posts and up to 1,000 comments per post;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;image blocks and text blocks, plus text from embed and Instagram blocks with minimal structure.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it leaves out
&lt;/h2&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;Every blog but one. Only one blog page exports, and you choose which. A site with a blog and a news section loses half of its posts unless you run the export twice, and the second run replaces the first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Other page types: album, cover, index, info, calendar, portfolio and store pages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Content in page-specific headers, footers and sidebars.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Product blocks, audio blocks, video blocks, dropdowns and drafts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Style settings and Custom CSS. Webflow was always going to be a redesign; this confirms nothing visual comes along.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Webflow can't use the file
&lt;/h2&gt;

&lt;p&gt;Webflow's CMS imports CSV files into a collection, one row per item, and fetches images from the URLs in the file during the import. It does not read WordPress XML. So the usual route is to turn the XML into a CSV with a rich-text column, which means handling the HTML in each post, finding the cover image, and mapping categories and the SEO description. Tools exist for that conversion, and so does copying posts by hand; what matters is that the step exists and that the XML is its only input.&lt;/p&gt;

&lt;p&gt;Two consequences. First, any image the importer fetches must still be reachable at import time, so keep the Squarespace site alive until the import has finished and you have checked the pictures in Webflow. Second, whatever the XML does not hold (the second blog, the other page types, product pages) has to come from somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The URLs
&lt;/h2&gt;

&lt;p&gt;Squarespace blog posts usually live at &lt;code&gt;/blog/&amp;lt;slug&amp;gt;&lt;/code&gt; (the path depends on the name of your blog page). Webflow collection items live under the collection's own path, which you choose. If you keep the same path, much of the redirect list is empty; if you don't, every old URL needs a 301 in Webflow's hosting settings. Build the list before the domain switches. See &lt;a href="https://decamp.app/notes/wix-urls-redirect-map" rel="noopener noreferrer"&gt;the same problem on Wix&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist before you switch
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Count your blog pages. If there is more than one, plan for the others separately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List the pages of types the export drops (index, portfolio, album, store) and note which ones you need to rebuild.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decide the Webflow collection path first; it fixes your redirect map.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Import while the old site is live; check images and links in the Webflow editor before cancelling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Export store products separately: see &lt;a href="https://decamp.app/notes/export-products-wix-squarespace" rel="noopener noreferrer"&gt;what the product CSV leaves out&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decamp reads the published Squarespace site instead of the XML, so every blog page comes through, and it writes the Webflow CSV and the 301 list. The inventory is free. See the &lt;a href="https://decamp.app/squarespace-to-webflow" rel="noopener noreferrer"&gt;Squarespace to Webflow guide&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://decamp.app/notes/squarespace-to-webflow-what-moves" rel="noopener noreferrer"&gt;https://decamp.app/notes/squarespace-to-webflow-what-moves&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>migration</category>
      <category>seo</category>
    </item>
    <item>
      <title>Transferring Wix to WordPress: what actually transfers, and the three ways people try</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Tue, 03 Nov 2026 13:19:33 +0000</pubDate>
      <link>https://dev.to/decamp/transferring-wix-to-wordpress-what-actually-transfers-and-the-three-ways-people-try-3740</link>
      <guid>https://dev.to/decamp/transferring-wix-to-wordpress-what-actually-transfers-and-the-three-ways-people-try-3740</guid>
      <description>&lt;p&gt;“Transfer Wix to WordPress”, “move Wix to WordPress” and “transfer from Wix to WordPress” are the searches that show Decamp's guide in Google without anyone clicking. The honest answer to all three starts with a sentence from Wix itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Wix says
&lt;/h2&gt;

&lt;p&gt;Wix's help page on the request reads: “Currently, it is not possible to export blog posts to other platforms.” It is filed as a feature request with no date  (&lt;a href="https://support.wix.com/en/article/wix-blog-request-exporting-blog-posts-to-other-platforms" rel="noopener noreferrer"&gt;Wix help&lt;/a&gt;, read 2 November 2026). The page's only suggestion is sharing posts on social media. Whatever a guide calls a “transfer”, it is a workaround.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three workarounds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The RSS feed
&lt;/h3&gt;

&lt;p&gt;The popular tutorial: take the blog's RSS feed and load it with WordPress's RSS importer. When we looked at Wix feeds in October 2026 they carried the 20 latest posts and, for current blogs, links rather than full text. A blog with 141 posts would come over as 20 stubs. Images in whatever text does arrive still point at Wix's servers, and WordPress does not copy them into your media library on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Copy and paste
&lt;/h3&gt;

&lt;p&gt;Reliable and slow: open each post, copy it, paste it into the WordPress editor, re-upload the images. It is fine for 15 posts. At 141 posts and 733 images (the size of one real Wix blog we exported) it is days of work, and the order and dates are yours to fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Read the published site
&lt;/h3&gt;

&lt;p&gt;A Wix blog is public, so the posts, with full text, categories, tags and SEO fields, can be read the way a visitor's browser reads them and written into a WordPress import file (WXR) with the images attached. That is what Decamp does. In our tests the file imported into a real WordPress with images in the media library; the exception is anything a published page does not expose.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does not transfer, whichever way you go
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The design. WordPress means choosing a theme; nothing visual carries over.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stores, bookings, member areas and forms. These are Wix apps, not content (products have their own CSV: &lt;a href="https://decamp.app/notes/export-products-wix-squarespace" rel="noopener noreferrer"&gt;what it leaves out&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comments, in most routes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Before the domain moves
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Count posts, pages and images first, so you know which route is realistic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep Wix alive until you have checked the imported images and links in WordPress.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wix post URLs look like &lt;code&gt;/post/&amp;lt;slug&amp;gt;&lt;/code&gt;; WordPress uses its own permalink structure. Either match it or write 301 redirects, or the old links in Google 404. See &lt;a href="https://decamp.app/notes/wix-urls-redirect-map" rel="noopener noreferrer"&gt;the Wix URLs a redirect map forgets&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The inventory is free. See the &lt;a href="https://decamp.app/wix-to-wordpress" rel="noopener noreferrer"&gt;Wix to WordPress guide&lt;/a&gt; for what the paid export contains.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://decamp.app/notes/wix-to-wordpress-what-transfers" rel="noopener noreferrer"&gt;https://decamp.app/notes/wix-to-wordpress-what-transfers&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>migration</category>
      <category>seo</category>
    </item>
    <item>
      <title>Exporting a Webflow site you don't own the Workspace for: what a 62-post CMS looks like from the outside</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Sat, 31 Oct 2026 18:33:23 +0000</pubDate>
      <link>https://dev.to/decamp/exporting-a-webflow-site-you-dont-own-the-workspace-for-what-a-62-post-cms-looks-like-from-the-3nm6</link>
      <guid>https://dev.to/decamp/exporting-a-webflow-site-you-dont-own-the-workspace-for-what-a-62-post-cms-looks-like-from-the-3nm6</guid>
      <description>&lt;p&gt;A published Webflow site is static HTML, and the CMS leaves marks in it. We ran an export against a public Webflow site (marketing.flowbase.co) on 31 October 2026 and read the files that came out: 62 posts, 21 pages, 577 images (~94 MB), and 229+ other CMS items that are not posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the HTML tells you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;data-wf-site&lt;/code&gt; on &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt; marks every Webflow page; &lt;code&gt;data-wf-collection&lt;/code&gt; and &lt;code&gt;data-wf-item-slug&lt;/code&gt; mark CMS items. The sitemap gives the list: &lt;code&gt;/&amp;lt;collection&amp;gt;/&amp;lt;slug&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Nothing says which collection is the blog. Here two collections read like blogs. Our rule: names like blog/posts/articles/news, else the largest collection. It's a heuristic, so the scan lists the other collections instead of hiding them.&lt;/li&gt;
&lt;li&gt;Dates are a design decision: 33 posts had one, 29 help articles showed none, so only the sitemap's &lt;code&gt;lastmod&lt;/code&gt; (last publish, not first) is left.&lt;/li&gt;
&lt;li&gt;The body is the largest &lt;code&gt;.w-richtext&lt;/code&gt; element; &lt;code&gt;-p-500&lt;/code&gt; resized image copies map back to the original file.&lt;/li&gt;
&lt;li&gt;The same newsletter block was repeated on 16 pages, with its images each time. Short sections containing a form are now dropped.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What a visitor's view can't give you
&lt;/h2&gt;

&lt;p&gt;Categories/authors/tags (CMS references), forms, e-commerce, memberships, code embeds, layout, drafts.&lt;/p&gt;

&lt;p&gt;Full write-up with the checklist: &lt;a href="https://decamp.app/notes/webflow-cms-export" rel="noopener noreferrer"&gt;https://decamp.app/notes/webflow-cms-export&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webflow</category>
      <category>wordpress</category>
      <category>webdev</category>
      <category>seo</category>
    </item>
    <item>
      <title>What Weebly's archive leaves out: a 34-post blog, comments and uploaded files</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Tue, 27 Oct 2026 14:19:19 +0000</pubDate>
      <link>https://dev.to/decamp/what-weeblys-archive-leaves-out-a-34-post-blog-comments-and-uploaded-files-21kp</link>
      <guid>https://dev.to/decamp/what-weeblys-archive-leaves-out-a-34-post-blog-comments-and-uploaded-files-21kp</guid>
      <description>&lt;p&gt;Weebly has one export, and its help page says what is missing: "Blog and store pages aren't included in the export as they rely directly on our database." (&lt;a href="https://www.weebly.com/app/help/us/en/topics/back-up-your-site" rel="noopener noreferrer"&gt;Weebly help&lt;/a&gt;). The archive is a ZIP of static pages. For most Weebly sites the blog is the part worth keeping.&lt;/p&gt;

&lt;p&gt;So we read a public Weebly blog the way a visitor's browser does, then imported the result into a real WordPress to see what survived. The site is &lt;code&gt;jess-ambers-blog.weebly.com&lt;/code&gt;, tested in October 2026. These are the numbers and the traps.&lt;/p&gt;

&lt;h2&gt;
  
  
  The inventory
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;34 blog posts and 5 pages&lt;/li&gt;
&lt;li&gt;235 images, which with the 5 files below make 240 attachments in WordPress&lt;/li&gt;
&lt;li&gt;28 comments on the posts&lt;/li&gt;
&lt;li&gt;5 uploaded files (zip, xlsx, pdf and docx) linked from the text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is behind a login. Classic Weebly renders everything on the server, so the HTML a visitor gets contains the posts, the dates and the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Posts and pages look alike in the sitemap
&lt;/h2&gt;

&lt;p&gt;Pages always end in &lt;code&gt;.html&lt;/code&gt;. Posts don't: they live at &lt;code&gt;/&amp;lt;blog&amp;gt;/&amp;lt;slug&amp;gt;&lt;/code&gt;, with no extension. That is the only reliable way to tell them apart from the URL list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/about.html                      page
/blog/my-first-post              post
/blog/my-first-post-2            post
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sitemap is also not in date order. If you want the newest posts first, or a preview of what a site contains, you have to read the blog's listing page, which shows the latest entries, instead of trusting the order of the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Dates come in two formats
&lt;/h2&gt;

&lt;p&gt;A post's date is printed as text in the site's own style: &lt;code&gt;7/15/2019&lt;/code&gt; on one site and &lt;code&gt;15/7/2019&lt;/code&gt; on the next, or &lt;code&gt;July 15, 2019&lt;/code&gt;. For the first two, the day and month are ambiguous whenever both are 12 or less. What settles it is the share links on the page: they carry the old &lt;code&gt;/N/post/YYYY/MM/&lt;/code&gt; address, and that month tells you which number is the month. Without that check, posts silently move to the wrong month.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Comments are in the HTML, if you ask for them
&lt;/h2&gt;

&lt;p&gt;Approved comments sit in the post's HTML (&lt;code&gt;.blogCommentWrap&lt;/code&gt;, with author, date and the reply it answers). Weebly's archive ignores them along with the blog. Copying posts by hand loses them too, because they are not part of the post body. We read 28 comments across the 34 posts and wrote them into the WordPress file as real comments with their thread order, not as text at the bottom of the post.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Images: the resized copy and the original
&lt;/h2&gt;

&lt;p&gt;Weebly stores uploads under &lt;code&gt;/uploads/a/b/c/d/&amp;lt;id&amp;gt;/&lt;/code&gt; on the site's own domain, and the files answer requests from a browser on another site. The picture in a post is often a resized copy, &lt;code&gt;name.jpg&lt;/code&gt;; when you click it, it opens &lt;code&gt;name_orig.jpg&lt;/code&gt;, the file as uploaded. The &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; around the image points at the original, so that is the address to save. Add a &lt;code&gt;?1563249199&lt;/code&gt; cache-buster to the end and the same file looks like a different URL; strip it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The uploaded files are the ones people forget
&lt;/h2&gt;

&lt;p&gt;Posts also link to documents hosted on Weebly (here a zip, a spreadsheet, a PDF and a Word file). They are not images, so an image-only copy leaves five links pointing at Weebly's servers. We saved them to a &lt;code&gt;files/&lt;/code&gt; folder and added them to the WordPress file as attachments.&lt;/p&gt;

&lt;p&gt;Result of the import into a real WordPress: 34 posts, 5 pages, 240 attachments, 28 comments, no "already exists" skips, and 0 links left pointing at &lt;code&gt;weebly.com/uploads&lt;/code&gt;. On repeated file names, see the "already exists" trap in &lt;a href="https://decamp.app/notes/exporting-website-builders" rel="noopener noreferrer"&gt;our first note&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Weebly is now two products
&lt;/h2&gt;

&lt;p&gt;"Weebly" today also means Square Online, the newer builder. It draws the page in the browser, so there is no blog markup in the HTML to read. Everything above is about classic Weebly sites. If a site is on Square Online, tell the owner up front rather than returning an empty export.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist before you copy anything
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Posts are URLs without &lt;code&gt;.html&lt;/code&gt;; pages are the ones with it.&lt;/li&gt;
&lt;li&gt;Read each blog's listing page for the newest posts; the sitemap order means nothing.&lt;/li&gt;
&lt;li&gt;Check dates against the &lt;code&gt;/N/post/YYYY/MM/&lt;/code&gt; share link before trusting M/D versus D/M.&lt;/li&gt;
&lt;li&gt;Keep the comments: they are in the HTML and not in any archive.&lt;/li&gt;
&lt;li&gt;Save &lt;code&gt;_orig&lt;/code&gt; images, not the resized copies, and strip the numeric cache-buster.&lt;/li&gt;
&lt;li&gt;Save uploaded documents too, or the new post links back to Weebly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decamp does all of this for classic Weebly sites and writes WordPress, Ghost, Webflow, Framer and Markdown files plus the redirects. See &lt;a href="https://decamp.app/weebly-export" rel="noopener noreferrer"&gt;exporting a Weebly blog&lt;/a&gt; or &lt;a href="https://decamp.app/weebly-to-wordpress" rel="noopener noreferrer"&gt;Weebly to WordPress&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>wordpress</category>
      <category>migration</category>
      <category>weebly</category>
    </item>
    <item>
      <title>Inside a Jimdo Creator site: what an export has to read</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Wed, 21 Oct 2026 13:14:21 +0000</pubDate>
      <link>https://dev.to/decamp/inside-a-jimdo-creator-site-what-an-export-has-to-read-3p3c</link>
      <guid>https://dev.to/decamp/inside-a-jimdo-creator-site-what-an-export-has-to-read-3p3c</guid>
      <description>&lt;p&gt;Jimdo is plain about it: "At Jimdo, there is also no option for creating a backup of your website yourself." (&lt;a href="https://help.jimdo.com/hc/en-us/articles/115005512086" rel="noopener noreferrer"&gt;Jimdo help&lt;/a&gt;). No blog export, no XML file, no ZIP. If you want your content somewhere else, the published site is the only copy you can read.&lt;/p&gt;

&lt;p&gt;So we read one: a public Jimdo Creator blog, a German-language news blog with posts from 2010 to 2013. Here's what a Creator site looks like from the outside, and what trips up anyone copying it, by hand or with a script.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The sitemap is the inventory
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/sitemap.xml&lt;/code&gt; lists 1,615 URLs in one file. 1,202 are blog posts, easy to spot because the date is in the path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/2012/12/31/die-besten-wünsche-zum-jahreswechsel-…/   post
/2012/12/30/hinweise-zum-grenzüberschreitenden-…/   post
/startseite/                                        page
/archiv-info24-blog24/                              page
/dezember-2013/                                     page (a monthly archive)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The other 413 are pages, many of them archive or category pages built by hand. There are no &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt; dates. The RSS feed (&lt;code&gt;/rss/blog&lt;/code&gt;) has 18 items: fine for a reader, useless as a list of everything you wrote.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. A page is a stack of modules
&lt;/h2&gt;

&lt;p&gt;Creator renders every page server-side as a column of &lt;code&gt;j-module&lt;/code&gt; blocks inside &lt;code&gt;#content_area&lt;/code&gt;. One post from December 2012:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;j-header          4   headings
j-text            8   paragraphs
j-textWithImage   8   a paragraph with a floated image
j-hr              5   dividers
j-spacing         2   empty space
j-facebook        1   ┐ from the template sidebar,
j-rss             2   ┘ not from the post
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read only &lt;code&gt;#content_area&lt;/code&gt;, or every post picks up the sidebar widgets. And map each module type deliberately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Column grids&lt;/strong&gt; (&lt;code&gt;j-hgrid&lt;/code&gt;) hold other modules. Skip nested modules and you drop whole columns; read them column by column.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tables&lt;/strong&gt; (&lt;code&gt;j-table&lt;/code&gt;) are real HTML tables. Treat them as layout and they vanish: one post we tested went from three tables to one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Downloads&lt;/strong&gt; (&lt;code&gt;j-downloadDocument&lt;/code&gt;) link to PDFs under &lt;code&gt;/app/download/&lt;/code&gt; on the Jimdo domain. Those links die with the site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tags&lt;/strong&gt; sit inside the post area. Copy it as text and every post ends with a line of tag names; extract them as tags.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Every image is called image.jpg
&lt;/h2&gt;

&lt;p&gt;The post loads 30 image URLs. Two are the template's header and favicon; of the other 28, 25 end in &lt;code&gt;image.jpg&lt;/code&gt; and three in &lt;code&gt;image.gif&lt;/code&gt;. The path is what tells them apart: a file ID plus the size Jimdo resized it to.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;image.jimcdn.com/app/cms/image/transf/dimension=210x1024:format=jpg/path/…/image/i8d39…/version/1356172872/image.jpg
image.jimcdn.com/app/cms/image/transf/none/path/…/image/i8d39…/version/1356172872/image.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The page asks for ten different &lt;code&gt;dimension=&lt;/code&gt; values, mostly 210–320 px wide. Replace the &lt;code&gt;transf/…&lt;/code&gt; segment with &lt;code&gt;transf/none&lt;/code&gt; to get the file as uploaded; save the thumbnail and the new site gets a blurry 210-px image.&lt;/p&gt;

&lt;p&gt;The shared name causes a second problem: saved by name, images overwrite each other, and the WordPress importer may skip most of them as "already exists" (it compares titles), leaving posts hot-linking Jimdo. We hit exactly that in testing (37 images on one Jimdo site). Fix: a unique name per image.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Creator is not the new Jimdo
&lt;/h2&gt;

&lt;p&gt;Jimdo runs two builders. The newer one has no blog, and "The content on your Creator website can't be moved over to your Jimdo website." (&lt;a href="https://help.jimdo.com/hc/en-us/articles/360020543431" rel="noopener noreferrer"&gt;Jimdo help&lt;/a&gt;). Leaving Creator means leaving Jimdo, or rebuilding by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Count posts from the sitemap (date in the path), not the feed.&lt;/li&gt;
&lt;li&gt;Read &lt;code&gt;#content_area&lt;/code&gt; only, module by module, including inside column grids.&lt;/li&gt;
&lt;li&gt;Swap every image to &lt;code&gt;transf/none&lt;/code&gt; and give each file a unique name.&lt;/li&gt;
&lt;li&gt;Save PDFs from &lt;code&gt;/app/download/&lt;/code&gt; links.&lt;/li&gt;
&lt;li&gt;Keep the old dated post URLs for your redirect map.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;I build &lt;a href="https://decamp.app" rel="noopener noreferrer"&gt;Decamp&lt;/a&gt;, which exports Jimdo Creator (and Wix, Squarespace, GoDaddy, Weebly) sites to WordPress, Ghost, Webflow, Framer and Markdown with redirects. Originally published at &lt;a href="https://decamp.app/notes/inside-a-jimdo-creator-site" rel="noopener noreferrer"&gt;decamp.app/notes&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>scraping</category>
      <category>wordpress</category>
      <category>migration</category>
    </item>
    <item>
      <title>The Wix URLs your redirect map forgets</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Tue, 20 Oct 2026 07:35:25 +0000</pubDate>
      <link>https://dev.to/decamp/the-wix-urls-your-redirect-map-forgets-3lmi</link>
      <guid>https://dev.to/decamp/the-wix-urls-your-redirect-map-forgets-3lmi</guid>
      <description>&lt;p&gt;When people move a Wix blog, they redirect the posts: &lt;code&gt;/post/my-title&lt;/code&gt; to wherever the post lives now. That covers the URLs you think of. Google has indexed more than that, and every one you don't map turns into a 404 the day the domain moves.&lt;/p&gt;

&lt;p&gt;Here is what a real Wix site exposes, using one we checked this week: a design studio's blog with 356 posts, a shop and some dynamic pages. The patterns are the same on any Wix site.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start from the sitemap, not the feed
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/sitemap.xml&lt;/code&gt; on a Wix site is an index that points to one sitemap per content type. On this site there were nine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;blog-posts-sitemap.xml        356 posts at /post/&amp;lt;slug&amp;gt;
blog-categories-sitemap.xml   /blog/categories/&amp;lt;slug&amp;gt;
pages-sitemap.xml             /blog, /portfolio, /about…
store-products-sitemap.xml    /product-page/&amp;lt;slug&amp;gt;
store-categories-sitemap.xml
pricing-plans-sitemap.xml     /pricing-plans/list
member-profiles_…-sitemap.xml
dynamic-…-sitemap.xml         (two CMS collections)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The RSS feed (&lt;code&gt;/blog-feed.xml&lt;/code&gt;) on the same site lists 20 posts. It's a feed of recent items, not an inventory, so a redirect list built from it misses 336 posts here. Large blogs also split the posts sitemap into pages, so follow the nested index too.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Category archives
&lt;/h2&gt;

&lt;p&gt;Every blog category has its own URL, &lt;code&gt;/blog/categories/&amp;lt;slug&amp;gt;&lt;/code&gt;, and Wix lists them in the sitemap, so they get indexed and collect links. The slug is Wix's, not necessarily the category name: a category called "Women in Business" can live at &lt;code&gt;/blog/categories/womeninbusiness&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Point each one at the matching archive on the new platform: &lt;code&gt;/category/women-in-business/&lt;/code&gt; on WordPress, &lt;code&gt;/tag/women-in-business/&lt;/code&gt; on Ghost, or the blog index where the platform has no category pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Paginated blog pages
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;/blog/page/2&lt;/code&gt;, &lt;code&gt;/blog/page/3&lt;/code&gt; and so on answer with a 200 and a canonical tag pointing at themselves, so Google can keep them. Their numbering won't match the new blog, so send them all to the blog index with one pattern rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Netlify / Cloudflare Pages (_redirects)
/blog/page/*  /blog/  301

# Apache (.htaccess)
RedirectMatch 301 ^/blog/page/[0-9]+/?$ /blog/

# Nginx
location ~ ^/blog/page/[0-9]+/?$ { return 301 /blog/; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. The old /single-post/ links
&lt;/h2&gt;

&lt;p&gt;Older Wix blogs served posts at &lt;code&gt;/single-post/…&lt;/code&gt; before the switch to &lt;code&gt;/post/&lt;/code&gt;. Links from that era are still out there in old articles, forum threads and newsletters. On the site we checked, &lt;code&gt;/single-post/&amp;lt;slug&amp;gt;&lt;/code&gt; already returns a 404 on Wix itself, so those visitors are being lost today. A move is a chance to win them back: map &lt;code&gt;/single-post/&amp;lt;slug&amp;gt;&lt;/code&gt; to the new post as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Exact paths: slashes and capitals
&lt;/h2&gt;

&lt;p&gt;Wix answers &lt;code&gt;/post/my-title/&lt;/code&gt; with a 301 to the version without the trailing slash, and &lt;code&gt;/Post/my-title&lt;/code&gt; with a 404: paths are case-sensitive. WordPress and Ghost add trailing slashes. Keep the old side of each redirect exactly as Wix wrote it, and the new side exactly as the new platform does, or the redirect chains through an extra hop or misses.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Things that aren't posts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Products&lt;/strong&gt; live at &lt;code&gt;/product-page/&amp;lt;slug&amp;gt;&lt;/code&gt;. If the shop moves to Shopify or WooCommerce, map them to the new product URLs; if it closes, to the most relevant page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing plans, member profiles and dynamic CMS pages&lt;/strong&gt; each have their own sitemap. Decide per collection: rebuild, redirect to a parent page, or let them go.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Images&lt;/strong&gt; are served from &lt;code&gt;static.wixstatic.com&lt;/code&gt;, a Wix domain you can't redirect. Image search traffic only survives if the images are re-hosted on the new site with their alt text, before the Wix plan ends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free addresses&lt;/strong&gt; (&lt;code&gt;name.wixsite.com/site&lt;/code&gt;) can't carry redirects at all. Only a custom domain can, which is one more reason to connect the domain to the new host rather than start fresh.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Check it after the switch
&lt;/h2&gt;

&lt;p&gt;Once the domain points at the new host, run the old URLs through a checker and look for anything that isn't a single 301 to a 200. A &lt;a href="https://decamp.app/tools/redirect-checker" rel="noopener noreferrer"&gt;free redirect checker&lt;/a&gt; does that for a pasted list, and the &lt;a href="https://decamp.app/tools/wix-redirect-map" rel="noopener noreferrer"&gt;Wix redirect map tool&lt;/a&gt; builds the list from a live Wix sitemap.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I build &lt;a href="https://decamp.app" rel="noopener noreferrer"&gt;Decamp&lt;/a&gt;, which exports Wix sites and writes these redirect files (category archives and the old /single-post/ links included).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>wix</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>Getting content out of Wix, Squarespace, GoDaddy and Jimdo: what actually works in 2026</title>
      <dc:creator>Juan Carlos Rodicio</dc:creator>
      <pubDate>Mon, 19 Oct 2026 07:45:18 +0000</pubDate>
      <link>https://dev.to/decamp/getting-content-out-of-wix-squarespace-godaddy-and-jimdo-what-actually-works-in-2026-3p7</link>
      <guid>https://dev.to/decamp/getting-content-out-of-wix-squarespace-godaddy-and-jimdo-what-actually-works-in-2026-3p7</guid>
      <description>&lt;p&gt;Most website builders don't really let you leave. Wix's help centre says blog posts "can't be exported to other platforms". Squarespace exports one blog as a WordPress file, with images left as links that, in its own words, "stop working after you cancel". GoDaddy's builder backups exclude blogs and images. Jimdo says there's "no option for creating a backup of your website yourself".&lt;/p&gt;

&lt;p&gt;We build Decamp, a tool that exports those sites, so we spend our days reading what these platforms publish. Here's what we learned, including two bugs that would have silently lost our users' content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the data the platform already serves
&lt;/h2&gt;

&lt;p&gt;Scraping rendered HTML gets you layout soup. Each builder serves something better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wix&lt;/strong&gt;: the public site issues a visitor token (&lt;code&gt;/_api/v1/access-tokens&lt;/code&gt;) that the Wix Blog API accepts. Posts come as "Ricos", a structured rich-content JSON (paragraphs, lists, galleries, tables, embeds), which converts cleanly to HTML. Static pages render server-side if you ask with &lt;code&gt;?forceSsr=true&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Squarespace&lt;/strong&gt;: append &lt;code&gt;?format=json&lt;/code&gt; to any collection or item URL and you get the item body plus metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GoDaddy Website Builder&lt;/strong&gt;: blog posts are embedded in the page as Draft.js JSON (&lt;code&gt;window._BLOG_DATA&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jimdo Creator&lt;/strong&gt;: pages are server-rendered stacks of &lt;code&gt;j-module&lt;/code&gt; blocks, one class per module type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weebly&lt;/strong&gt;: classic sites are server-rendered too (&lt;code&gt;#wsite-content&lt;/code&gt;, &lt;code&gt;.blog-post&lt;/code&gt;), approved comments included, and uploads live under &lt;code&gt;/uploads/&lt;/code&gt; on the site's own host with open CORS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Gotcha 1: WordPress silently skips images that share a title
&lt;/h2&gt;

&lt;p&gt;We generate a standard WXR file and let WordPress's own importer pull the images. In a real import, Jimdo sites lost 37 images and GoDaddy sites 20, with no error. The importer treats any item whose &lt;strong&gt;title&lt;/strong&gt; (plus date, when there is one) matches an existing post as "already exists" and skips it. Every Jimdo image is called &lt;code&gt;image.jpg&lt;/code&gt;; pages have no date; and a cover image's alt text often equals the post title. Skipped attachments mean the post keeps hot-linking the old site, which breaks the day the subscription ends.&lt;/p&gt;

&lt;p&gt;Fix: unique titles for every attachment across the file, and distinct timestamps for undated items. Same content, zero skips.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gotcha 2: Squarespace "website component" blocks
&lt;/h2&gt;

&lt;p&gt;Newer Squarespace sites wrap blocks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"sqs-block website-component-block sqs-block-website-component sqs-block-markdown"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you take the first &lt;code&gt;sqs-block-*&lt;/code&gt; class as the type, every block becomes "website-component". On one podcast site that dropped entire episode transcripts (350 words exported instead of 7,633), dropped the audio players, and let "related posts" grids slip in as content. Take the first class that isn't &lt;code&gt;website-component&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller lessons
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Images: export files, not links. And PNG photos from Wix at 2048px weigh 4 to 6 MB; WebP copies keep transparency at a third of the size.&lt;/li&gt;
&lt;li&gt;Big WordPress imports time out on shared hosting. Splitting the WXR into 100-item files (with shared titles and dates so a re-import still dedupes) fixes it.&lt;/li&gt;
&lt;li&gt;Comments are reachable: Wix through its comments service (keyed by the blog's internal post id), Squarespace through a public endpoint. Sanitize them: visitor HTML goes straight into WordPress, and the importer doesn't filter it.&lt;/li&gt;
&lt;li&gt;Redirects: generate them for every host (Redirection plugin CSV, .htaccess, Nginx, Netlify &lt;code&gt;_redirects&lt;/code&gt;, Vercel, Ghost YAML, Webflow, Squarespace URL mappings), then check them after DNS moves. We built a free checker for that: decamp.app/tools/redirect-checker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're moving a site off one of these builders, Decamp (decamp.app) does all of the above; the inventory and preview are free. Happy to answer questions about any of the internals in the comments.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>wordpress</category>
      <category>migration</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
