In brief
- Yoast SEO stores a post's custom title and description in the WordPress post meta keys _yoast_wpseo_title and _yoast_wpseo_metadesc; Rank Math uses rank_math_title and rank_math_description.45
- Stored Yoast titles often contain template variables such as %%title%% %%sep%% %%sitename%%; the Yoast REST API's yoast_head_json field returns the final rendered title, description, canonical and robots values, which is what you should migrate.3
- On Shopify, titles and descriptions map to the SEO title and SEO description fields on products, collections, pages and posts; the product CSV accepts up to 70 and 320 characters respectively, and 512 characters of image alt text.2
- Shopify has no per-page canonical override and no plain noindex switch; hiding a page from search needs the seo.hidden metafield or a theme code change.6
Where the data lives
WooCommerce's product export contains names, descriptions and attributes, but not the search title or meta description, because those belong to the SEO plugin. Both major plugins store them as post meta in the wp_postmeta table.
| Field | Yoast SEO meta key | Rank Math meta key |
|---|---|---|
| SEO title | _yoast_wpseo_title | rank_math_title |
| Meta description | _yoast_wpseo_metadesc | rank_math_description |
| Focus keyword | _yoast_wpseo_focuskw | rank_math_focus_keyword |
| Canonical URL | _yoast_wpseo_canonical | rank_math_canonical_url |
| Robots (noindex etc.) | _yoast_wpseo_meta-robots-noindex | rank_math_robots |
Yoast keys from independent developer documentation of the plugin's post meta;4 Rank Math keys from Rank Math's knowledge base.5
The template trap
A stored Yoast title is frequently a template such as %%title%% %%sep%% %%sitename%%, or empty because the site-wide template applies. If you copy the raw meta value you migrate a placeholder, not a title. Migrate the rendered output instead.
How to extract the rendered values
Yoast SEO: the REST API
Yoast adds two fields to every post, page and product in the WordPress REST API: yoast_head, a ready-made block of meta tags, and yoast_head_json, the same data as key/value pairs including title, description, robots, canonical, Open Graph and Twitter values and schema.3 Because the values are rendered, template variables are already resolved.
GET /wp-json/wc/v3/products?per_page=100&page=1 (with a read-only key)
GET /wp-json/wp/v2/posts?per_page=100
GET /wp-json/wp/v2/pages?per_page=100
→ each item includes "yoast_head_json": { "title": …, "description": …, "canonical": …, "robots": { … } }
Category and tag archives are available the same way through /wp/v2/product_cat and /wp/v2/product_tag, which gives you collection titles and descriptions too.
Rank Math: CSV export
Rank Math includes a CSV export of its metadata under Rank Math SEO → Status & Tools → Import & Export, which is the method it recommends for editing titles and descriptions at scale.5 The export includes the stored values; check any rows that contain template variables and render them from the live page or the REST response.
The safety net: crawl the live site
Whichever plugin you use, a crawl of the live storefront captures the final title, meta description, canonical and robots tags exactly as search engines see them. It is the fastest way to verify the export and catches pages the plugin did not manage.
Field map to Shopify
| WordPress / plugin | Shopify | Notes |
|---|---|---|
| SEO title | SEO title on product, collection, page, blog post | Store name is appended by many themes; check for duplication. |
| Meta description | SEO description | Truncate at 320 characters in the CSV; aim for 160.12 |
| Slug | URL handle | Keep identical so redirects become a prefix change; see the redirects guide. |
| Image alt text | Image alt text (per image) | Up to 512 characters; exported from the media library, not the SEO plugin.2 |
| Category title and description | Collection SEO title and description | Collections also have a visible description field; keep the two distinct. |
| Focus keyword | No equivalent | An editorial aid, not output; keep it in your own records. |
| Canonical URL override | No per-page override | Shopify sets canonicals itself; cross-domain canonicals need theme code. |
| Noindex on a page | seo.hidden metafield or theme code | Set the seo.hidden metafield to 1, or add a noindex tag in theme.liquid for specific handles.6 |
| Open Graph / Twitter title and image | Theme-generated from title and featured image | Shopify themes output social tags automatically; custom per-page social titles need metafields. |
| Schema markup | Theme-generated | Product, Organization and Article schema come from the theme; custom FAQ or HowTo schema needs theme or app work. |
| Breadcrumb settings | Theme | Breadcrumbs are a theme feature on Shopify. |
| Redirects (Yoast Premium, Rank Math, Redirection) | URL redirects | Export and merge into the Shopify redirect import so old sources point straight to the new target. |
Shopify's limits
| Field | Hard limit | Shopify's recommendation |
|---|---|---|
| SEO title | 70 characters | Up to 60, to avoid truncation in results1 |
| SEO description | 320 characters (CSV) | 160 characters12 |
| Image alt text | 512 characters | Describe the image; alt text is not a keyword field2 |
Yoast and Rank Math both allow longer values than Shopify's title limit, so a migration must decide what to do with titles above 70 characters: trim at a word boundary, or rewrite the longest ones by hand. The checker below shows which is which.
Length checker
Paste a title and description to see how they sit against Shopify's limits and how they might render in a search result. Nothing you type leaves this page.
What has no equivalent on Shopify
- Per-page canonical overrides. Shopify generates canonical tags itself. If you used Yoast canonicals to consolidate duplicate WooCommerce pages, resolve the duplicates during migration instead, with one Shopify page and a redirect.
- Noindex as a checkbox. Use the
seo.hiddenmetafield, or a conditional noindex tag in the theme for specific handles.6 Products can also be set to unlisted. - Custom social titles and descriptions. Shopify's Open Graph tags come from the page title and image; per-page overrides need metafields and a small theme change.
- Plugin-generated schema. Recipe, FAQ, HowTo or review schema from your SEO plugin does not migrate. Shopify themes emit product and organisation schema; anything else is theme work.
Step by step
- Export rendered values for products, categories, tags, pages and posts through the REST API or Rank Math's CSV, and keep the WordPress ID and slug on every row.
- Crawl the live site and compare; the crawl wins where the two differ, because it is what search engines indexed.
- Normalise. Strip the appended site name if your Shopify theme adds it, trim titles above 70 characters at a word boundary, and flag descriptions above 160 for review.
- Load into Shopify through the product CSV columns SEO title, SEO description and Image alt text, or through the Admin API for collections, pages and articles.2
- Spot-check 20 pages in the search engine listing preview and with a crawl of the new store before launch.
- Handle the exceptions: noindex pages, canonical consolidations and custom schema, each with a deliberate decision rather than a silent loss.
We carry SEO fields over as part of every migration.
- Rendered titles and descriptions, not templates
- Collection SEO fields from category archives
- Image alt text kept per image
- Titles above the limit flagged for review
- Redirect map built at the same time
- Preview before you pay
Frequently asked questions
Does the WooCommerce product export include Yoast titles and descriptions?
No. The product export contains product data only. Search titles and meta descriptions are stored by the SEO plugin as post meta and must be exported separately, for example through the Yoast REST API fields or Rank Math's CSV export.
What is the character limit for Shopify SEO titles and descriptions?
Shopify allows up to 70 characters in the SEO title and recommends around 60. The product CSV accepts up to 320 characters in the SEO description, and Shopify recommends about 160.
Can I set a canonical URL on a Shopify page?
Not through the admin. Shopify generates canonical tags automatically. Cross-domain or custom canonicals require a theme code change.
How do I noindex a page on Shopify?
Set the seo.hidden metafield to 1 on the product, page or post, or add a conditional noindex meta tag to theme.liquid for specific handles, as Shopify's help centre describes. Products can also be made unlisted.
Should I migrate the focus keyword?
There is nowhere to put it on Shopify and it is not output to search engines. Keep it in your own content records if it guides future writing.
Sources
- Shopify. Adding keywords for SEO to your Shopify store, Shopify Help Center: title up to 70 characters, 60 suggested; 160-character description recommendation.
- Shopify. Using CSV files to import and export products: SEO title up to 70, SEO description up to 320, image alt text up to 512 characters.
- Yoast. Yoast SEO REST API: the yoast_head and yoast_head_json fields.
- Bill Erickson. Yoast SEO title and description in site search results: the _yoast_wpseo_title and _yoast_wpseo_metadesc post meta keys. independent developer
- Rank Math. Editing meta title and descriptions at scale: rank_math_title, rank_math_description and the CSV export and import.
- Shopify. Hiding a page from search engines: the seo.hidden metafield and the theme.liquid noindex method.
- Yoast. Yoast SEO Metadata API: the title, description, canonical, robots, Open Graph and Twitter values Yoast outputs.
Mufatech Studio migrates stores to Shopify. Limits are quoted from Shopify's documentation as of September 2026; plugin meta keys from the plugins' own or independent developer documentation.