Install WP Visibility beside Yoast, open WP Visibility → Settings and scroll to the Import section, choose Yoast SEO, click Preview changes, read the preview, then click Import now. The import reads Yoast’s rows and never changes or deletes them, so Yoast still works if you reactivate it. When the live pages look right, deactivate Yoast.
Before you start
- Take a database backup. The import writes WP Visibility’s own post meta, term meta and three settings. It cannot reverse itself.
- Both plugins print head tags while both are active. Do the import in one sitting and deactivate Yoast as soon as you have checked the result, or do the whole thing on a staging copy first.
- Yoast does not have to be active. Detection looks at the data, not the plugin, so a site where Yoast was removed but its rows were left behind can still be imported.
- The Import module is on by default. If the section is missing, turn it on under Modules.
What comes across
For every post the import finds, these fields are read. An empty field is skipped, so a post with no custom title stays on your template instead of receiving a blank.
| Yoast field | WP Visibility field |
|---|---|
_yoast_wpseo_title |
Search title |
_yoast_wpseo_metadesc |
Search description |
_yoast_wpseo_canonical |
Canonical URL |
_yoast_wpseo_opengraph-title |
Social title |
_yoast_wpseo_opengraph-description |
Social description |
_yoast_wpseo_opengraph-image-id |
Social image |
_yoast_wpseo_twitter-title |
X title |
_yoast_wpseo_twitter-description |
X description |
_yoast_wpseo_meta-robots-noindex |
Search engine indexing |
_yoast_wpseo_meta-robots-nofollow |
Link following |
Yoast stores three states in its noindex field: 1 means noindex, 2 means the owner explicitly chose index, and anything else, usually no value, means inherit the default (Yoast’s post indexable builder, checked September 27, 2026). The import keeps them apart. A 1 becomes Noindex, a 2 becomes Index, which overrides a type-wide noindex in WP Visibility, and any other value writes nothing, so the post keeps inheriting. Nofollow comes across when it was set; there is no explicit follow.
Categories and tags. Yoast keeps all term SEO in one option, wpseo_taxonomy_meta (Yoast’s taxonomy meta class, checked September 27, 2026). The import reads each term’s title, description and canonical, plus a noindex choice, which becomes Noindex, and stores them as WP Visibility term meta. A term explicitly set to index, or left on default, gets no indexing value and keeps inheriting WP Visibility’s site rules; this release does not carry an explicit Index across for terms. Entries for terms that no longer exist are skipped.
Settings. Exactly three: the title separator, translated from Yoast’s code (sc-ndash becomes an en dash, sc-pipe a pipe, and so on, per Yoast’s titles option class, checked September 27, 2026; an unrecognized code is skipped and your current WP Visibility separator stays), the homepage title, and the homepage meta description. The two templates are translated from Yoast syntax: %%sitename%% becomes {site}, %%sep%% becomes {sep}, %%title%% becomes {title}, %%sitedesc%% becomes {tagline}, %%excerpt%% and %%excerpt_only%% become {excerpt}, %%primary_category%% and %%category%% become {category}, %%page%% becomes {page}, %%currentyear%% becomes {currentyear}, and %%cf_KEY%% becomes {custom_field:KEY}. Any other Yoast variable from Yoast’s list (checked September 27, 2026), such as %%date%%, is removed rather than left as literal text, even where WP Visibility has a similar variable of its own, such as {date}.
Post and term titles and descriptions, and post social titles and descriptions, go through the same translation, so a post title of %%title%% %%sep%% %%sitename%% arrives as {title} {sep} {site}.
What stays behind
Nothing else is read. In particular:
- Focus keyphrases, SEO and readability scores, the cornerstone flag, the primary category, breadcrumb titles and schema type selections. The first three are Yoast’s editorial tooling. The rest can change Yoast’s own breadcrumbs, schema and titles, so check those on a post after the switch; WP Visibility’s
{category}uses the first category WordPress returns for a post, not Yoast’s primary one. - Per post type and archive templates, social defaults, the knowledge graph and organization settings, verification codes, sitemap settings and robots defaults. Set their equivalents in WP Visibility’s own settings, where one title template covers every single post type and one covers every term, date and post type archive; budget an hour, and compare a category page and a post type archive against the old output.
- A separate Twitter image, and an Open Graph image given as an external URL rather than a media library item.
- Advanced robots directives such as nosnippet and noarchive.
- Redirect rules. See below.
Which posts are found
The import looks for posts that have a Yoast SEO title stored, in post types that are included in search; a post type registered as excluded from search is not checked. A post that has only a description, a canonical or an indexing choice, and no title, is not found and keeps WP Visibility’s defaults. Before you deactivate Yoast, open one or two posts you know were set that way and check them in the WP Visibility sidebar; set the value by hand, or with wp visibility set <id> --description="...".
Preview, then import
From the settings screen. WP Visibility → Settings, Import section. Choose Yoast SEO under Import from and click Preview changes. The preview counts the posts whose mapped values differ from what WP Visibility stores now and shows the first ten, with each changed title and description as stored now and after the import, variables already translated. Nothing is written. On a site with more than 5,000 posts carrying a Yoast title, the preview stops after the first 5,000 and says so; Import now still covers every post. When it reads right, click Import now.
From the command line.
wp visibility import yoast --dry-run
wp visibility import yoast
Both runs work through posts in batches of 200 and log progress after each batch; the dry run then prints a table of the first ten changed posts with their titles and descriptions before and after.
Over REST. POST /wp-json/wpvis/v1/import/run with source: "yoast" runs the same importer, one batch of 200 posts per call, and defaults to dry_run: true. Send dry_run: false to apply, and repeat with offset raised by 200 each call until remaining is 0. This route needs manage_options and does not pass through the review queue.
Three things about the live run:
- The first batch also applies the three settings and the term data. The preview covers posts only, so check the separator, the homepage title and description, and a category page after the run.
- Posts whose mapped values already match are skipped, so running the import twice is harmless. Running it again after you have edited titles in WP Visibility is not: the import puts Yoast’s values back.
- Yoast’s rows are untouched. Reactivating Yoast finds them exactly as they were, which is what makes going back cheap. It does not carry edits you made in WP Visibility back to Yoast.
Read the preview
Read the sample posts as a checklist.
- A variable that vanished.
Compost Guidewhere the Yoast title readCompost Guide %%date%%means a variable the import does not translate was removed. Decide whether the title needs a replacement, such as{date}, before you apply. - A missing Title or Description row. The sample shows a field only when it changes. An empty Yoast field is skipped, so a post with no Yoast description shows no description row and keeps what WP Visibility has now. A post that reads Other fields changes only in fields the sample does not show: the canonical, social or robots fields.
- Indexing is not in the table. After the live run, open one post you know was noindexed and one you know was set to index, and confirm the sidebar shows Noindex and Index.
Redirects
The SEO import does not move redirects. If you use Yoast Premium’s redirect manager, export the rules to CSV while Yoast is still active (Yoast’s import and export help, checked September 27, 2026) and note the count. WP Visibility imports redirects from a CSV on the Redirects page, which appears once the Redirects module is on, and a Yoast export is not one of the layouts it recognizes, so reshape it into WP Visibility’s source,target,status layout first, with a fourth is_regex column set to 1 for any regex rules. The redirect import also has a Preview CSV button that writes nothing: Redirect a Changed URL.
After the import
- Open ten URLs you know: the homepage, two posts with custom titles, a noindexed page, a category, a tag, a page with a custom canonical. View source and check the title, description, canonical and robots line.
- Set the templates and defaults the import does not carry: Set Title and Description Templates.
- Deactivate Yoast. Its data stays in the database. Yoast’s help says deleting the plugin removes only its files and keeps its SEO data and settings in the database (How can I uninstall my Yoast SEO plugin?, checked September 27, 2026), so going back stays possible until someone removes that data by hand.
- Resubmit the sitemap. WP Visibility serves it at
/sitemap.xml, and Yoast’s index was at/sitemap_index.xml(Yoast’s sitemap specification, checked September 27, 2026): Submit Your Sitemap.
Field names checked against the WP Visibility 2.10.3 importer on September 27, 2026.