Skip to content
WP Visibility

Switching

Migrate from The SEO Framework

Preview, then import titles, descriptions, canonicals, social text, the social image and indexing choices from The SEO Framework. Category and tag SEO does not come across.

Updated September 27, 2026

Docs

Install WP Visibility beside The SEO Framework, open WP Visibility → Settings, scroll to the Import section, choose The SEO Framework under Import from, click Preview changes, read it, then click Import now. The SEO Framework’s rows are read and never changed.

Before you start

  • Take a database backup. The import cannot reverse itself.
  • Note your category and tag SEO. The SEO Framework keeps term settings in its own term meta (its data storage notes, checked September 27, 2026), and this import does not read it. Plan to re-enter those values on each term’s edit screen.
  • The SEO Framework must have been set up on this site: the import looks for its settings option. It does not need to be active.
  • Both plugins print head tags while both are active, so import and deactivate in one sitting, or work on staging.

What comes across

The SEO Framework stores per-post values in post meta, several under names it took from the Genesis Framework theme (its migration notes, checked September 27, 2026). These are read; an empty field is skipped.

The SEO Framework field WP Visibility field
_genesis_title Search title
_genesis_description Search description
_genesis_canonical_uri Canonical URL
_open_graph_title Social title
_open_graph_description Social description
_social_image_id Social image
_twitter_title X title
_twitter_description X description
_genesis_noindex Search engine indexing
_genesis_nofollow Link following

Robots. The SEO Framework uses three states, and so does WP Visibility, so they map straight across: 1 becomes Noindex or Nofollow, -1 becomes an explicit Index or Follow, and 0 writes nothing, so the post keeps its WP Visibility setting, Default unless you changed it (The SEO Framework’s post settings code, checked September 27, 2026).

Settings. Three: the title separator, translated from The SEO Framework’s named codes (ndash to an en dash, pipe to |, middot to · and so on; its bull, lsaquo, rsaquo, le, ge, lt and gt codes are not translated and keep your current WP Visibility separator; its separator list, checked September 27, 2026), the homepage title and the homepage description.

What stays behind

  • Category, tag and custom taxonomy SEO.
  • The per-post Archiving choice, Remove the site title?, Twitter Card Type, the search and archive exclusions, and a social image stored only as a URL (_social_image_url) with no media library ID.
  • Post type and archive defaults, the title settings beyond the separator, social defaults, schema and knowledge graph settings, verification codes, sitemap and robots settings. Set them in WP Visibility after the import: Set Title and Description Templates.
  • Redirects. The per-post 301 Redirect URL is not imported; copy any you rely on into Redirect (301) to in the Indexing panel of the WP Visibility sidebar. For rules kept in a redirect plugin, see Redirect a Changed URL.

Which posts are found

The import looks for posts that have a custom title stored (_genesis_title). A post with only a description, canonical, social field or indexing choice, and no custom title, is not found and keeps WP Visibility’s defaults. Before you deactivate The SEO Framework, open one or two posts you know were set that way and check them in the WP Visibility sidebar; set the value there, or with wp visibility set <id> for the title, description, canonical or noindex.

Preview, then import

From the settings screen: Import from, Preview changes, then Import now. The preview shows how many posts would change and a sample of titles and descriptions before and after. It stops after the first 5,000 posts; Import now covers every post.

From the command line:

wp visibility import tsf --dry-run --user=admin
wp visibility import tsf --user=admin

Over REST, POST /wp-json/wpvis/v1/import/run with source: "tsf" defaults to dry_run: true; send dry_run: false and raise offset by 200 on each call until remaining is 0. It needs manage_options and does not pass through the review queue.

The live run works in batches of 200 and applies the three settings on the first batch; the preview covers posts only, so check the separator and homepage afterward. Posts whose values already match are skipped. Running it again after you have edited titles in WP Visibility puts the old values back.

Titles and descriptions arrive as written, except that text shaped like another plugin’s template variable, such as %title% or %%sitename%%, is converted to the WP Visibility equivalent or removed, as it is for every source. The SEO Framework adds the site title to a custom title unless Remove the site title? is checked on the post or Remove site title from the title? is checked in its settings (its title code and title conditions, checked September 27, 2026). WP Visibility prints an imported title as the whole title, so add {sep} {site} to titles that should keep the site name.

After the import

  1. View the source of ten URLs you know and check the title, description, canonical and robots line.
  2. Re-enter the category and tag SEO you noted.
  3. Deactivate The SEO Framework. Its data stays in the database (its data storage notes, checked September 27, 2026).
  4. Resubmit the sitemap at /sitemap.xml: Submit Your Sitemap.

Field names checked against the WP Visibility importer in 2.10.3 on September 27, 2026.