SEO migration compatibility report
What Yoast, Rank Math, SEOPress and AIOSEO actually store — and what Livada SEO imports automatically. Not a "Livada is better" article: a table of facts, sourced by reading the real code of all 4 importers (not an estimate), so you know exactly what to expect before you migrate.
← Back to the migration hubYoast SEO
Storage: Standard WordPress post meta
| Field | Actual key | Imported? |
|---|---|---|
| SEO title | _yoast_wpseo_title | ✓ Yes |
| Meta description | _yoast_wpseo_metadesc | ✓ Yes |
| Focus keyword | _yoast_wpseo_focuskw | ✓ Yes |
| Canonical | _yoast_wpseo_canonical | ✓ Yes |
| Open Graph image | _yoast_wpseo_opengraph-image | ✓ Yes |
| Robots (noindex/nofollow) | _yoast_wpseo_meta-robots-noindex/-nofollow | ✓ Yes |
Title templates (wpseo_titles option) and social profiles (wpseo_social) — imported once, without overwriting a value you've already customized in Livada.
Yoast Premium redirects (wpseo-premium-redirects-base option) — 301/302 only. Requires Yoast Premium to be active at import time.
Good to know: The %%title%%, %%sitename%%, etc. variables are converted automatically. Rare Yoast-specific variables (%%post_year%%...) pass through unchanged for manual review.
Rank Math
Storage: Standard WordPress post meta
| Field | Actual key | Imported? |
|---|---|---|
| SEO title | rank_math_title | ✓ Yes |
| Meta description | rank_math_description | ✓ Yes |
| Focus keyword only the 1st phrase if multiple keywords are comma-separated | rank_math_focus_keyword | ✓ Yes |
| Canonical | rank_math_canonical_url | ✓ Yes |
| Facebook image | rank_math_facebook_image | ✓ Yes |
| Robots serialized list | rank_math_robots | ✓ Yes |
Title templates (rank-math-options-titles option) and social profiles — imported once, without overwriting a value you've already customized in Livada.
Dedicated {prefix}rank_math_redirections table — only redirects using "exact" comparison are imported (301/302). "Contains"/regex rules are skipped, and flagged in the import report.
Good to know: Rank Math variables already use the %var% syntax, same as Livada — minimal conversion needed.
SEOPress
Storage: Standard WordPress post meta
| Field | Actual key | Imported? |
|---|---|---|
| SEO title | _seopress_titles_title | ✓ Yes |
| Meta description | _seopress_titles_desc | ✓ Yes |
| Focus keyword | _seopress_analysis_target_kw | ✓ Yes |
| Canonical | _seopress_robots_canonical | ✓ Yes |
| Facebook image | _seopress_social_fb_img | ✓ Yes |
| Robots (index/follow) yes/absent checkboxes, falling back to the per-content-type setting when unchecked | _seopress_robots_index/-follow | ✓ Yes |
Per-content-type settings (seopress_titles_option_name option) used for the robots fallback — no separate global title templates.
Redirects stored as a dedicated content type (seopress_404) — all imported (301/302).
Good to know: No notable variable quirks — SEOPress doesn't offer an equivalent dynamic-tag system.
AIOSEO (All in One SEO)
Storage: Dedicated database table ({prefix}aioseo_posts) — NOT post meta
| Field | Actual key | Imported? |
|---|---|---|
| SEO title | title column | ✓ Yes |
| Meta description | description column | ✓ Yes |
| Focus keyword | keyphrases column (JSON) | ✓ Yes |
| Canonical | canonical_url column | ✓ Yes |
| Open Graph image falls back to the Twitter image if not set | og_image_custom_url column | ✓ Yes |
| Robots | robots_default/robots_noindex/robots_nofollow columns | ✓ Yes |
Global title templates ("Search Appearance") are stored in a nested JSON option — NOT imported automatically. An explicit warning is shown so you can configure them by hand.
Dedicated {prefix}aioseo_redirects table (301/302) — only exists with AIOSEO Pro.
Good to know: AIOSEO uses "smart tags" in #tag format (e.g. #post_title) instead of %var% — common tags are converted automatically, the rest pass through unchanged.
What doesn't transfer automatically from ANY of the 4
- • Content generated by a third-party AI module (editorial text, not an SEO tag)
- • Settings from third-party premium extensions that extend the plugin you're leaving beyond its standard fields
- • Custom JSON-LD schemas added by hand outside the plugin (e.g. via a code snippet)
This is exactly why Migration Proof exists: regardless of what gets imported automatically or not, the before/after proof tells you what actually changed on the published page — without having to guess.