Squarespace to WordPress redirects: date-based blog urls, /blog/ slugs and the plugin import

squarespace exports a WordPress file, but not the urls that go with it.

by Max Lorenz, Goodaim · updated

squarespace → wordpress
  • /blog/2021/3/14/rebrand-lessons301
    /blog/rebrand-lessons/
  • /blog/studio-tourkeep
    /blog/studio-tour/
  • /shop/p/(.*)regex
    /product/$1
  • /s/price-list.pdffile
    /wp-content/uploads/…/price-list.pdf

SHORT ANSWER

A Squarespace site moving to WordPress needs a 301 for every url that changes, and the blog is where they collect. Posts on Squarespace’s date format, /blog/2021/3/14/post-name, cannot keep their url on WordPress, because WordPress writes months and days with two digits. Set the permalink to /blog/%postname%/ so the short-format posts keep theirs, redirect the dated ones one by one or with a single regex rule, and handle the commerce folders, the /s/ files and the url mappings Squarespace already held. The finished list goes into the Redirection plugin, Yoast SEO Premium or Rank Math as a csv.

What the Squarespace export carries over

Squarespace can export a site as a WordPress xml file, imported on the WordPress side under Tools, Import, WordPress. It carries layout pages, text and image blocks, gallery pages and one blog page with all its posts and up to 1,000 comments per post. It does not carry store pages, events, portfolios, album and index pages, more than one blog, drafts, audio, video and product blocks, or the design (Squarespace, exporting your site).

For the redirect map that means: the pages and the one blog arrive as content, with their slugs in most cases, and everything else is rebuilt by hand and gets new urls. A second blog, a shop or an events calendar is exactly where the slugs change, and exactly where the matcher earns its keep.

EXAMPLE

a studio site has 40 pages, a journal of 180 posts, a second blog for press with 30 posts, and a shop of 25 products. The 40 pages and the journal arrive through the export; the press posts and the products are rebuilt and renamed on the way.

Which Squarespace urls move where?

squarespace patternon wordpresshow
/about/about/same slug, nothing to do
/blog/post-name/blog/post-name/keep, with permalink /blog/%postname%/
/blog/2021/3/14/post-name/blog/post-name/one row per post, or one regex rule
/blog?category=Design/category/design/a hand-written row per category
/press/post-name/blog/post-name/second blog: one regex rule if slugs kept
/shop/p/product-name/product/product-name/one regex rule (WooCommerce default base)
/events/event-namedepends on the events pluginrows by hand, or let past events go
/s/file-name.pdf/wp-content/uploads/…one row per file that is linked
/home-1 · /blog-1the real pageone row each

two blog url formats — Older Squarespace posts carry the publish date, /blog/2021/3/14/post-name, month and day without leading zeros. Newer ones are /blog/post-name. A blog that switched at some point has both live, and the dated ones are usually the ones with the backlinks.

the blog's own slug — the /blog part is the slug of the blog page and can be anything: /journal, /news. Use whatever the old site used in the WordPress permalink and every short-format post survives.

Redirecting the date-format posts

Two ways, and they can be combined:

one row per post — the default. The slug is the last segment on both sides, so the matcher pairs nearly every dated post with its WordPress successor at full confidence. The posts whose slug changed come out as fuzzy matches on the title and land in needs review. A directory rule cannot drop the three date segments, which is why these stay rows.

one regex rule — the Redirection plugin understands regular expressions, so a single hand-written rule can cover all of them: ^/blog/\d{4}/\d{1,2}/\d{1,2}/(.*)$ to /blog/$1/. It is only correct for posts whose slug survived the import. Run the matcher first: every dated post with a changed slug gets its own row above the rule, and the rule then covers the rest, including dated urls the crawl never found.

EXAMPLE

150 dated posts: 143 match at confidence 1.0, 7 land in needs review because their slug was changed on import. Export the 7 as rows and add the regex rule by hand below them, so the specific rows win.

Categories, files and the url mappings

category and tag filters — Squarespace filters a blog with a query string, /blog?category=Design. Silentfrog ignores query strings, so these urls never become rows of their own. The Redirection plugin matches query parameters exactly by default (Redirection url matching), which means you can add one row per category that had traffic, source /blog?category=Design, target /category/design/. Search Console tells you which ones are worth it.

/s/ files — pdfs uploaded through the link editor live at /s/file-name.pdf. The export does not move them into WordPress. Download the ones that are linked, upload them to the media library, and give each a row to its new /wp-content/uploads/… address.

the url mappings — the redirects the Squarespace site already carries, one line each in the form /old -> /new 301 in the url mappings panel of the settings. There is no export button; copy the box. Put the left-hand paths into Silentfrog’s url list, so they are resolved against the new site directly instead of chaining through their old targets.

Getting the complete list of old urls

Squarespace generates /sitemap.xml for every enabled page and post that is not hidden from search; Silentfrog reads it when the run starts. Disabled pages are not in it, so add the Search Console pages export to the url list, along with the url mapping sources (finding the urls nothing links to).

start a crawl

extra old-site urls the crawl might not reach — one per line, or a csv export with the url in the first column (crawler export, search console, server logs). paths like /blog/post work too.

free up to 50 pages per site

the crawl form with the old site url, the new site url, the page cap, the sitemap option and the field for your own url list.

the crawl form: the sitemap is read automatically; the url list takes the search console export and the url mapping sources.

The import, and the trailing slash on targets

WordPress has no redirect importer of its own. Pick wordpress · redirection plugin in Silentfrog’s export and the file is the plugin’s csv: source, target, regex flag, status code, no header, imported under Tools, Redirection, Import/Export (Redirection import and export). A directory rule ticked export as wildcard rule, such as /shop/p to /product, is one regex row at the end of the file. Yoast SEO Premium and Rank Math PRO have their own formats in the same picker (importing redirects into WordPress).

Silentfrog writes paths without a trailing slash. WordPress answers /blog/post-name with a redirect to /blog/post-name/, so a target without the slash costs a second hop. Add the slash to the target column before the import, in a spreadsheet or with find and replace, and leave file targets alone.

export

site settings → publishing → 301 redirects, or the data api

the two export buttons — webflow csv and generic csv — next to the option that includes needs-review matches.

the export: the redirection format writes exact rows first and regex rows last, so a specific rule is matched before a folder rule.

Doing it in one pass

  • Copy the url mappings and export the Search Console pages report while the Squarespace site is live.
  • Set the WordPress permalink to /blog/%postname%/ (with the old blog’s slug), then import the Squarespace xml.
  • Start a run with the Squarespace domain as the old site and the WordPress staging domain as the new one; paste the extra urls into the url list (starting a run).
  • Add directory rules for the shop and the second blog if their slugs stayed, and review needs review from the top.
  • Download the redirection file, add the trailing slashes, add the category rows and the optional date regex by hand, and import it.
  • Move the domain, then crawl the old url list against the live site: one 301, then 200.

The first 50 old-site pages are free. A Squarespace site with a few years of blogging is usually somewhere above that, and 46 € per relaunch covers up to 150 pages.

In short

  • Squarespace's WordPress export carries pages and one blog; shops, events and further blogs are rebuilt and get new urls.
  • Set the permalink to /blog/%postname%/ and the short-format posts keep their urls.
  • Date-format posts cannot be reproduced: WordPress pads month and day, Squarespace does not. One row each, or one regex rule below the rows for changed slugs.
  • Category filters are query strings; add a row by hand for the ones with traffic.
  • Add trailing slashes to the targets before the import, and resolve the old url mappings against the new site.