Switching SEO plugins guide
Preserve Social Titles and Images When Moving Between SEO Plugins
Record each page's Open Graph and X tags, learn which social fields your source hands over, and decide by hand on separate X images and external image URLs.
On this page
Record the Open Graph and X tags your most shared pages publish before the switch, check which social fields your source plugin’s import carries, and compare the tags again afterward. Social titles and descriptions usually transfer. Images are where differences appear: a separate X image, an image given as an external URL, and a source’s fallback rules do not come across as they were.
This guide covers keeping social overrides through a migration. For a single page whose preview looks wrong on an ordinary day, use Fix the Wrong Image in a Social Link Preview.
Which social fields each source hands over
WP Visibility 2.10.3 has one social image per post, used for Open Graph, plus separate social and X titles and descriptions. The import maps source fields into those:
| Source | Social title and description | Social image | X title and description | Separate X image |
|---|---|---|---|---|
| Yoast SEO | Yes | Yes, when it is a media library item | Yes | Not imported |
| Rank Math | Yes | Yes, when it is a media library item | Yes | Not imported |
| SEOPress | Yes | Yes, when its URL matches a media library item | Yes | Not imported |
| The SEO Framework | Yes | Yes, by media ID | Yes | Not imported |
| All in One SEO | Yes | Not imported | Yes | Not imported |
Three details matter. The import reads the SEOPress image as a URL and looks that URL up in the media library; an external URL, or one that does not resolve to a library item, is skipped. An image given as an external URL is skipped for every source. And Rank Math is the only source whose category and tag social image comes across, for terms that also have a Rank Math SEO title; WP Visibility then uses it for that archive, although the term edit screen has no field to change it. The field-by-field mapping for Yoast SEO and Rank Math is in Migrate from Yoast SEO and Migrate from Rank Math.
One limit applies to the first four rows. For those sources, WP Visibility 2.10.3 finds the posts to import by the source’s SEO title field alone (_yoast_wpseo_title, rank_math_title, _seopress_titles_title, _genesis_title); All in One SEO posts are found by its own table instead. A post with social overrides but no SEO title field in one of those four sources is skipped, and its social fields stay behind.
Social defaults set in the old plugin’s settings, such as a default image or an X handle, are not imported for any source.
How WP Visibility fills the tags
The Open Graph protocol’s specification, checked September 27, 2026, lists og:title, og:type, og:image, and og:url as the basic properties and describes og:image:width, og:image:height, and og:image:alt for image details. WP Visibility fills them this way:
og:titleandog:descriptionuse the post’s Social title and Social description, or its search title and description when those are empty.og:imageuses the post’s Social image, then its featured image, then the site’s Default social image, then nothing. The full-size file is used with its width, height, and media library alt text. An imported social image that has since been deleted from the media library prints noog:imageat all; it does not fall back.twitter:titleandtwitter:descriptionprint only when an X title or description is set. Notwitter:imageis printed. X’s cards guide (an archived copy from January 1, 2026, checked September 27, 2026) says the card processor looks for the X tag first and falls back to the matching Open Graph tag, so X uses the Open Graph image.
So a source that used a separate X image now shares the Open Graph image on X as well. A source whose fallback chain differed, for example by picking an image from the content, now falls back to the featured image and the default. The full order is in Set a Default Social Image.
Build a test set with deliberately different values
Values that happen to match hide mapping errors. On a staging copy with the old plugin active, create or pick posts where every channel has a different value:
- A post with a custom SEO title, a Facebook or Open Graph title, a different X title, a social image, and a different X image.
- A post with a social title but no custom SEO title.
- A post whose social image is an external URL, not a media library item.
- A post with only a featured image and no social image.
- A post with no image at all.
- A category with its own social image, if your source supports one.
Use images you are free to publish and give them distinct file names, such as og-test-a.jpg and x-test-a.jpg, so the output shows which one was chosen.
Record and compare the shared-page metadata
Capture the social tags for each test post and for your ten most shared URLs, before and after the staging import:
for u in /spring-planting/ /how-to-prune/ /category/pruning/; do
echo "== $u"
curl -s "https://staging.garden.example$u" | grep -Eo '<meta (property|name)="(og|twitter):[^"]*" content="[^"]*"'
done > social-after.txt
The paths are illustrative. Compare with the baseline file and read each difference:
| Difference | Cause | Action |
|---|---|---|
og:image changed to the featured image |
Source image was an external URL, was not imported from this source, or the post was skipped for having no SEO title field | Upload the image and set it as the post’s Social image |
og:image changed to the site default |
No social image imported and no featured image | Set a social or featured image |
og:title changed to the search title |
The post had no SEO title field in the source (any source but All in One SEO), so the import skipped it | Set its social fields by hand |
No twitter:image |
Expected; X uses og:image |
Decide whether one image suits both |
twitter:title missing |
No X title in the source; X uses og:title |
None, unless you want a different X title |
Two sets of og: tags |
The old plugin or the theme still prints them | Turn one off before going live |
og:image:alt missing |
The media library item has no alt text | Add it in the media library |
Decide on the fields that did not come across
Write down a decision for each gap rather than leaving the defaults to decide:
- Separate X images. WP Visibility uses one image per post for every network. Where the X image carried a different crop or text, choose the image that works for both and set it as the Social image.
- External image URLs. Upload the file to the media library, then set it in the Social sharing panel of the WP Visibility sidebar. The classic editor’s metabox has no social fields.
- Social defaults. Set the Default social image, the X (Twitter) site handle, and the Twitter/X card type in the Social section.
- Archives. Categories and tags use the default image unless a Rank Math term image was imported. Choose a default that suits archive pages.
Refresh cached previews after the switch
Networks keep their own copy of a preview. Meta’s webmaster sharing guide, checked September 27, 2026, says images are cached by URL and are not updated unless the URL changes, and that its Sharing Debugger triggers a new scrape of the page. After the production switch, run your most shared URLs through the Sharing Debugger and LinkedIn’s Post Inspector, which LinkedIn Help, checked September 27, 2026, names as the tool for refreshing a URL whose preview shows an old cached image. The WP Visibility doc on wrong previews lists the tools per network.
Checklist
- Social tags captured for the most shared URLs before the switch.
- Test posts with deliberately different values run through a staging import.
- Every image difference traced to its cause.
- Separate X images and external URLs given explicit replacements.
- Social defaults set, and network caches refreshed after going live.
