Skip to content
WP Visibility

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.

Published

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-page and /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.

Moving redirect rules safely. Label each row: Match type, case rule, status, active state. Convert or drop: Rewrite unsupported types as anchored patterns. Test requests: Status and final location for every rule class.
A redirect keeps its behavior only if its match rule survives the move. Counting imported rows is not enough; test real requests for each kind of rule.

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.

Read next

WordPress SEO with your own assistant.

WP Visibility is $99 a year for unlimited sites, client sites included, with a 30-day refund. Use its SEO tools in WordPress or connect a supported assistant. Read how proposal review and permissions work.