SHORT ANSWER
Framer keeps redirects under site settings → hosting → redirects, and the way to add a whole list at once is Redirect Sync, a plugin Framer makes itself. It reads a csv with the columns from and to, relative paths starting with a slash, and creates one redirect per row; a row whose from already exists updates that redirect. Folders that moved as a whole are better written by hand as one wildcard rule, /news/* to /blog/:1. Redirects are a Pro-plan feature on Framer’s pricing page, and they take effect when the site is published.
Where do redirects live in Framer?
In the project, open site settings → hosting → redirects. Each rule is an old path and a new path, and Framer’s redirects help article lists three things worth knowing before anything is imported:
- Only paths of the current domain. A rule redirects
/oldon the published domain. A whole old domain is redirected at its own host or dns provider, not here. - Order is priority. Rules can be reordered by drag and drop, and the first one that matches wins. Specific rows go above the wildcards that would also catch them.
- Nothing follows a renamed page. If a page path or a CMS slug is changed later on the canvas or in the CMS, the redirect settings are not updated with it. Settle the new site’s urls before you build the map.
Changes take effect when you publish or update the site. Framer’s pricing page lists “site redirects” for the Pro plan and Enterprise, not for Free or Basic (as listed 3 october 2026); it states no maximum number of rules.
What file does Redirect Sync expect?
Framer’s bulk import article describes the columns, and the plugin’s open source parser shows exactly how a file is read:
| column | required | what it holds |
|---|---|---|
from | yes | the old path, relative, starting with / |
to | yes | the new path; rows with an empty to are skipped |
expandToAllLocales | no | true or false; true when the column is missing |
The header is optional: the parser treats the first row as a header only when it reads exactly from,to, and otherwise imports it as data. A file with fewer than two or more than three columns is refused. A row whose from matches an existing redirect updates it; the import adds and updates but does not delete, so rules already on the site and not in the file stay where they are.
from,to /about-us,/about /leistungen/webdesign,/services/web-design /news/spring-launch,/blog/spring-launch
That is the file Silentfrog writes when you pick plain path pairs (wix, hubspot, other) in the export: header from,to, one path pair per line, nothing else. Identity rows, unmatched rows and needs-review rows you did not verify are left out, so the file only holds redirects somebody can stand behind (the two downloads). There is no Framer entry in the picker, because the plain pairs already are the Framer file.
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.
Importing the file, step by step
- Export what is there first. Open Redirect Sync from the plugins menu and choose export. The csv it writes is the backup, and it shows which old rules from an earlier redesign still exist.
- Import the map. Choose import in the same plugin and select the file. Each row becomes a redirect, or updates the one with the same
from. - Add the wildcard rules by hand in the redirects panel (below), and drag them under the individual rows.
- Publish. Nothing redirects until the site is published or updated.
- Test a few rows on the live domain with
curl -sI: one redirect, then a 200.
EXAMPLE
a consultancy moves 140 pages to Framer. The map holds 96 redirects; 31 old paths kept their url and need none. Redirect Sync’s export shows 12 rules from a 2022 redesign still in the project, four of which point at pages that no longer exist on the new site. Those four are corrected in the csv and imported along with the rest, which updates them in place.
Wildcards: one rule instead of a folder of rows
Framer’s notation, from the redirects article:
* — matches any path, across slashes. /blog/* catches /blog/hello-world and /blog/2022/07/18/hello-world.
:1, :2 — in the target, what the first and second asterisk matched. /blog/*/post/* to /article/:1/entry/:2.
:slug, :year — a named segment between two slashes. /blog/:year/:month/:day matches /blog/2022/07/18.
Silentfrog writes Webflow’s (.*) and %1 for a directory rule ticked export as wildcard rule, and the plain pairs carry no wildcards at all: a directory rule is written out row by row there, so no url the crawl found is lost. That is safe to import as it is. If you want the shorter list, translate the rule into Framer’s spelling and add it by hand:
| old folder | new folder | |
|---|---|---|
| webflow export | /news/(.*) | /blog/%1 |
| framer rule | /news/* | /blog/:1 |
Then delete the rows the rule covers from the csv before importing, or keep them: a specific row above the wildcard gives the same answer, it is only longer. A wildcard also catches the old urls the crawl never found, which is the real reason to write one. Keep any row whose new slug differs from the old one above the wildcard, or the wildcard sends it to a slug that does not exist.
What to check before and after
- Relative paths only. The
fromcolumn must start with/. A csv of absolute urls from another tool needs the scheme and host cut off first. - The final target, not a hop. If an old rule already sends
/ato/band the new map sends/bto/c, change the old rule to/c. Framer’s own Webflow migration guide says the same: send each old url to the closest relevant page and avoid chains. - Locales. With localization on,
expandToAllLocalesdecides whether a rule also applies under each locale’s prefix. It defaults to true; set it to false in a third column for rows that should not. - Pages that kept their path need nothing. A redirect from a path to itself loops. Silentfrog never writes one; a hand-made list might.
- After publishing, request every old url once and expect one redirect, then a 200 on the new path. A 404 at the end is a target that does not exist; two redirects in a row is a chain.
tail -n +2 redirects.csv | cut -d, -f1 | while read p; do
printf '%s ' "$p"; curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' "https://www.example.com$p"
doneStarting from another tool's file
Redirect Sync is strict about the shape and relaxed about everything else, so most redirect lists need one small change before they import:
| you have | change before importing |
|---|---|
a Webflow export, fromUrl,toUrl | rename the header to from,to, or the first row is read as a redirect row; rewrite (.*) / %1 rows as Framer wildcards by hand |
| absolute urls, https://www.example.com/old | cut scheme and host from both columns: sed -E 's#https?://[^/,]+##g' |
| a spreadsheet with match type, confidence, notes | keep the first two columns; a fourth column makes the plugin refuse the file |
| rows with an empty target (pages with no successor) | nothing: the plugin skips them. Decide separately whether those urls deserve a 410 |
The plugin reports a file it cannot read rather than importing half of it: “CSV had invalid fields” means the first row has fewer than two or more than three columns, “CSV had invalid row” means a later row is missing its from or to. Both are messages from the plugin’s parser, so they name the file problem, not a Framer limit.
Silentfrog’s generic csv is the one file not to import: it carries absolute urls, the match metadata and the unmatched rows, because it is the audit trail of the project. The redirects file next to it is the import.
In short
- Framer redirects live under site settings → hosting → redirects; Pro plan or Enterprise.
- Redirect Sync, made by Framer, imports a from,to csv; from must be a relative path starting with /.
- An existing from is updated, nothing is deleted; export first as a backup.
- Wildcards are * with :1 in the target; add them by hand and keep specific rows above them.
- Silentfrog's plain path pairs export is already the file Redirect Sync reads.