Squarespace's URL Mappings panel has no CSV import as of Q2 20261. The 'bulk' workflow that works is a spreadsheet plus a concatenation formula plus paste-in-batches. The panel itself accepts up to 5,000 rules per site1, and pastes of 200-500 lines at a time keep the validator responsive. This page is the workflow tested on migrations of 50, 500, and 4,000 URLs.
The shape is the same at every scale: crawl the old site, map every URL one-to-one (or via wildcard groups), generate the syntax, paste in batches, audit with curl. The variables are time and accuracy. The wildcard step is the lever that turns a 4,000-row map into a 200-row map.
§01State
The honest state of bulk upload in 2026
Squarespace does not ship a CSV import for URL Mappings, an API endpoint for bulk redirect upload, or a row-level edit UI. The panel is one textarea, one rule per line, with a 5,000-rule documented cap. Any 'bulk redirect' tool that claims native Squarespace integration is doing what you can do manually: generating the line text, automating the paste with a scripted browser session, or working around the panel through a CDN like Cloudflare placed in front of the Squarespace site. The honest answer is that for ~99% of Squarespace owners, the spreadsheet-then-paste workflow on this page is faster and safer than any third-party tool that wraps the same flow.
The community has tried automation. There is no documented Squarespace API endpoint for URL Mappings as of Q2 2026, so the only automation paths are scripted browser interactions (fragile, breaks on every panel UI revision) or a CDN like Cloudflare with its own redirect rules placed in front of the Squarespace site (more rules, fewer constraints, but adds an operations layer most Squarespace owners do not want). For most migrations under 5,000 URLs, the spreadsheet workflow below ships faster than any of these alternatives.
Scale reference
5,000
rule cap per Squarespace site, documented in the URL Mappings reference.
The map is the artifact. It is a spreadsheet with four columns: old URL (source), new URL (destination), type (direct, wildcard, external, drop), notes. Every row is a decision. Direct rows become one-to-one redirects. Wildcard rows compress hundreds of URLs into a single rule. External rows redirect off the Squarespace site entirely. Drop rows mark URLs that intentionally have no destination — typically tag pages, paginated archives, or thin content the migration removes. The discipline is finishing the map before you paste anything into Squarespace.
The crawler step matters: you cannot redirect URLs you do not know about. Screaming Frog3 is the industry default — its free tier handles up to 500 URLs and the paid tier removes the cap. Crawl the old site, export the URLs CSV, and that becomes your source column. For sites already on Squarespace migrating slugs internally, the Squarespace XML sitemap at yoursite.com/sitemap.xml is also a valid source.
Build the map
One row per old URL. Decide the destination per row. For sites with a recognisable structure — a blog under /blog, services under /services, products under /shop — group rows by structure and decide on a wildcard strategy for each group before mapping rows manually.
The wildcard pattern in row 3 is the lever. A single line replaces what would otherwise be 120 one-to-one rows. The format Squarespace accepts is /blog/old-cat/[slug] -> /blog/[slug] 301 — the bracketed name is the placeholder and must match between source and destination.
Validate locally before pasting
Three checks before any rule reaches Squarespace. (1) Every old_url starts with a slash. (2) Every new_url either starts with a slash, starts with https://, or is the literal string DROP. (3) No duplicate old_url values — Squarespace top-down matching means the second rule never fires. A spreadsheet conditional-formatting rule that highlights duplicate values catches the third in seconds.
javascriptConcatenation formula — generates the Squarespace syntax
Copy the formula down, then copy the resulting column. Empty rows (drop rows) leave blanks in the output, which paste cleanly into Squarespace as blank lines — the panel ignores those.
§03Paste
Paste in batches of 200-500
Pasting all 4,000 lines at once tends to lock the browser tab for several seconds while Squarespace's client-side validator processes the input. Pasting in batches of 200-500 keeps the experience responsive and surfaces syntax errors in smaller chunks where they are faster to debug. Save between batches. If a batch fails on save, the panel highlights the offending line — fix it in the source spreadsheet, regenerate the column, and paste the corrected batch.
A useful discipline: after every batch save, leave a blank line in the panel as a visual separator before pasting the next batch. The blank lines have no functional effect — Squarespace ignores them — but they make the panel scannable later when you need to find and edit a specific rule.
§04Wildcards
Wildcards that absorb hundreds of URLs
A wildcard rule replaces every URL matching a path prefix with one line. The syntax is /old-prefix/[slug] -> /new-prefix/[slug] 301. The bracketed name is just a label — Squarespace passes the matched value through to the destination unchanged. Wildcards turn 4,000-row maps into 200-row maps for sites with predictable structure. The constraint: wildcards match top-down, so a wildcard placed near the top of the panel absorbs every later rule that could have caught a specific URL inside its path prefix.
URL MappingsWildcard patterns that compress large maps
# Blog migration — every post under /blog/old-section/ moves to /blog//blog/old-section/[slug]->/blog/[slug]301# Category migration — every product under /shop/legacy-cat/ moves to /shop//shop/legacy-cat/[product]->/shop/[product]301# Date-based blog URLs — drop the date, keep the slug/2024/[month]/[slug]->/blog/[slug]301
Order matters. Place specific rules at the top of the panel; place wildcards at the bottom. If the wildcard /blog/[slug] -> /journal/[slug] 301 sits above /blog/feature-launch -> /announcements/launch 301, the wildcard absorbs the feature-launch URL and the specific rule never fires. The fix is reordering, not editing.
§05Audit
Audit after the paste
Three audit steps after every bulk paste. (1) Spot-check 20-50 redirects with curl -IL — pick a mix of direct rules and wildcard-matched URLs. (2) Submit the new sitemap to Google Search Console under Sitemaps. (3) Monitor Search Console's Pages report for the next 4-12 weeks — Google's documented recovery window for URL changes. Old URLs should move from 'Indexed' to 'Page with redirect' status and eventually drop out of the index as the new URLs take their place.
Google's official migration guidance2 is explicit on this point: a clean redirect rollout takes 4-12 weeks to fully reflect in Search results. Old URLs may still appear in search results for the first few weeks after a redirect ships — that is expected, not a bug. The migration is working as long as Search Console shows the old URLs categorised under 'Page with redirect' and the new URLs are being indexed in their place.
For the cases where you need an old URL removed faster than Google's natural cycle, the remove-old-URL leaf covers Search Console's Remove URLs tool and the 410-vs-redirect trade-off.