Switching SEO plugins guide
Convert Redirect Exports Between SEO Plugins Without Losing Rules
Classify every exported redirect by its match type, convert only the rules the destination can reproduce, and test real requests before the old plugin goes.
On this page
A redirect export is a list of rules, and each rule has a match type as well as a source and a target. Before you import the file into another plugin, sort the rows by match type, convert the ones the destination can reproduce, rewrite or drop the rest on purpose, and test real requests. A reformatted CSV that imports without errors can still match different URLs than the original did.
This guide covers moving rules between plugins. Creating a single redirect, fixing chains, and moving a whole domain are separate jobs; for everyday rules, see Redirect a Changed URL.
Classify the exported rule types
Start from what the source vendor documents about its own export. Rank Math’s CSV redirect guide, checked September 27, 2026, says the feature is in the PRO version and lists the columns id, source, matching, destination, type, category, status, and ignore. It lists five match types (exact, contains, start, end, regex), status codes 301, 302, 307, 410, and 451, an active or inactive state, and an ignore value that is either empty or case. Rank Math’s redirections guide, checked September 27, 2026, describes an ignore case toggle for rules, so treat case rows as case-insensitive. Several sources for one redirect can be written as separate rows, which Rank Math groups into one redirection on import.
Yoast’s redirect import help, checked September 27, 2026, documents a four-column layout for Yoast SEO Premium, Origin,Target,Type,Format, where Format is plain or regex. It describes the import format; check that your export file has the same columns.
Add a class column to your copy of the export and label each row. Then compare with what WP Visibility 2.10.3 can do:
| Source rule | WP Visibility equivalent | Action |
|---|---|---|
| Exact or plain path | Exact rule | Import |
| Regular expression | Regular expression rule | Import, then test each one |
Rank Math contains, start, end |
None | Rewrite as an anchored regular expression |
Rank Math ignore = case |
None; matching is case-sensitive | Rewrite as a regular expression with (?i) |
| Inactive or disabled rule | None | Rank Math rows are skipped; delete Redirection disabled rows yourself |
| Redirection plugin referrer, user agent, login, or IP rule | None; only the path is matched | Delete before import; the export drops the condition |
| 410 or 451 | Same status, no target | Import |
| Several sources for one redirect | One rule per source | Import; each row becomes a rule |
How WP Visibility matches a request
Knowing the destination’s matching rules tells you which conversions keep behavior. In 2.10.3:
- Only the path is compared. A query string in an exact rule’s source is dropped, and the visitor’s query string is passed on to the target.
- A trailing slash is ignored, so
/old-pageand/old-page/are one rule. The path is URL-decoded before matching. - Matching is case-sensitive.
- Exact rules are checked first. Regular expressions are tried afterward in the order they were created, up to 200 of them; a regex rule outside the 200 oldest is never tried.
- A regular expression is tested against the path without its trailing slash, and matches anywhere in it unless you anchor it with
^and$. The target replaces only the part of the path that matched, so an unanchored pattern can leave pieces of the old path in the new URL.
The last point is the one that breaks converted rules. Anchor every pattern so that it matches the whole path. A pattern that ends in /$ can match nothing but the bare / path, because the trailing slash is removed from every other path first.
Transform only the semantics you can keep
Rank Math PRO export. WP Visibility recognizes this file by its header. Exact and regex rows import, a source such as /old-page[exact] has its marker removed, contains, start, and end rows are skipped with a message, and inactive rows are skipped. The ignore column is not read, so case-insensitive rules arrive case-sensitive. Filter those rows out before import and convert them.
Redirection export. WP Visibility recognizes this file by its code column and reads source, target, regex, and code. The CSV exporter in Redirection 5.10.1 (source, checked September 27, 2026) writes source,target,regex,code,type,hits,title,status, with no match-type column. A rule that matches on referrer, user agent, login, IP, or another condition loses its condition. Most such rules get the target /unknown (an empty target for most 4xx codes), but a rule limited to a WordPress page type, such as 404 pages, keeps its real target and looks like a plain rule, so find those in Redirection’s own list. A disabled rule has disabled in status. WP Visibility 2.10.3 does not read that status column, so delete disabled and conditional rows before import, or they arrive as active redirects that match on the path alone.
Yoast Premium file. Rename the header row to source,target,status,is_regex. In 2.10.3 the regex column accepts regex, 1, true, or yes as true, so the plain and regex values can stay as they are.
SEOPress, All in One SEO, and other exports. Reshape the file into source,target,status,is_regex after reading that vendor’s column definitions. Rank Math’s CSV guide says managing redirects by CSV is available only in the PRO version; on the free version, copy its rules from the Redirections screen into the same layout.
Rewrite unsupported match types as anchored patterns. These examples are illustrative, for garden.example:
| Source rule | Pattern for WP Visibility | Target |
|---|---|---|
contains spring-sale |
^.*spring-sale.*$ |
/offers/ |
start /blog/2019 |
^/blog/2019.*$ |
/archive/ |
end .html, keeping the rest |
^/(.*)\.html$ |
/$1/ |
exact /Old-Page, ignore case |
(?i)^/old-page$ |
/new-page/ |
In a CSV, write these rows with is_regex set to 1. A target must start with / or be a full URL, which is why the third example writes /$1/ rather than $1/. A regex exported from another plugin may assume a leading slash, different anchors, or a different flavor of pattern, so treat every imported regex as untested.
If the preview reports that a source must be a path starting with /, the export wrote paths without one. Add the slash to those exact rows.
Preview and account for every row
With the Redirects module turned on (it is off by default), open the Redirects page. Under Import from a CSV, choose the file and click Preview CSV. Nothing is written until Import CSV. The preview validates every row, reports how many redirects would be created and how many rows skipped, lists the first 50 problems by row number, and skips sources that already have a rule. Each run handles up to 5,000 rows; split larger files.
Not every skip has a message. Inactive Rank Math rows are counted as skipped without one. So reconcile the numbers: data rows in the file, not counting the header or blank lines, should equal the imported count plus the skipped count. Compare the skipped total with the rows you labeled as unsupported, and investigate any difference before you import.
Test destination behavior
Build a test file from your labeled export, with the expected status and final location for each old URL. Include one request per rule class, plus variants: with and without a trailing slash, with a query string, and in a different letter case for rules that used to ignore case.
while IFS=, read -r path expected_status expected_location; do
result=$(curl -s -o /dev/null -w '%{http_code} %{redirect_url}' "https://staging.garden.example$path")
echo "$path | expected $expected_status $expected_location | got $result"
done < redirect-tests.csv
Read each line against its expectation:
| Result | Meaning |
|---|---|
| Expected status and location | The rule reproduces the old behavior |
| 404 | No rule matched; check anchors, leading slash, and case |
| 200 on an old URL | No redirect was served and a page still answers at that path; check whether the rule was skipped or a page cache answered first |
| Location with part of the old path left in | Pattern not anchored to the whole path |
| The location redirects again when you request it | A chain; point the first rule at the final destination |
Google’s redirect documentation, checked September 27, 2026, says permanent redirects signal that the target should be canonical and temporary ones do not, so keep each rule’s permanent or temporary status as it was unless you mean to change it.
Checklist
- Export saved with its row count while the old plugin is active.
- Every row labeled by class, with unsupported rows converted or dropped deliberately.
- Case-insensitive and pattern rules rewritten as anchored expressions.
- File count reconciled with imported and skipped counts.
- Test requests run on staging, and again on production after the switch.
The wider switch sequence is in How to Switch SEO Plugins With a Verification Plan, and the Rank Math specifics are in Migrate from Rank Math.
