Skip to content

SEO

New in v3.5.0. EMCP reads and writes the SEO metadata your SEO plugin stores, the SEO title, meta description, canonical URL, robots (noindex/nofollow), focus keyword, and Open Graph / Twitter social fields, for posts and terms, through the same two-dispatcher pattern as the Forms and ACF domains.

This is distinct from the Pro SEO & Accessibility toolkit (audit-page-seo, generate-meta-tags, …), which analyses and generates from the live page structure. These tools read and set what the SEO plugin actually stores, and the generate tools write through to whichever SEO integration below is active.

Slim SEO and Visibility are free; the other six are Pro:

PluginToolsTier
Slim SEOslimseo-read / slimseo-writeFree
Visibility (native-aeo-pack)visibility-read / visibility-writeFree (v3.17.1)
Yoast SEOyoast-read / yoast-writePro
Rank Mathrankmath-read / rankmath-writePro
All in One SEOaioseo-read / aioseo-writePro
SEOPressseopress-read / seopress-writePro
The SEO Frameworkseoframework-read / seoframework-writePro
SureRanksurerank-read / surerank-writePro

Each pair registers only when its plugin is active: most sites run one SEO plugin and see exactly its two tools.

Every plugin stores SEO differently (individual meta keys, options, custom tables, different robots encodings). EMCP hides all of that behind one unified field vocabulary: you read and write the same fields regardless of plugin:

FieldMeaning
titleSEO title
descriptionMeta description
canonicalCanonical URL
noindex / nofollowRobots directives (booleans)
focus_keywordTarget keyword (where supported)
og_title / og_description / og_imageOpen Graph / Facebook
twitter_title / twitter_description / twitter_imageTwitter/X card

The adapter translates these to each plugin’s own encoding, Yoast’s '1', SEOPress’s 'yes', Rank Math’s robots array, and so on. You never deal with those.

For an executed example, see Update Rank Math SEO titles with AI. It records three metadata edits, preserved robots settings, frontend verification and a setup issue found during testing.

// discover
rankmath-read({})
// → { mode: "read", operations: [ { operation: "get-post-seo", … }, { operation: "get-schema", … }, … ] }
// read a post's SEO
rankmath-read({ operation: "get-post-seo", arguments: { post_id: 42 } })
// set title + meta description, un-noindex it
rankmath-write({ operation: "update-post-seo",
arguments: { post_id: 42, title: "Best Widgets (2026)", description: "…", noindex: false } })

update-*-seo changes only the fields you pass; everything else is left as-is.

OperationSupport
get-post-seo / update-post-seoAll 8 plugins
get-term-seo / update-term-seoAll except All in One SEO and Visibility (current EMCP adapters are post-only)
get-schemaRank Math, All in One SEO, SEOPress
get-settingsSlim SEO, Yoast, Rank Math, AIOSEO, SEOPress, SureRank

Fields a plugin doesn’t store are simply absent, e.g. Slim SEO has no focus_keyword. Read first; don’t assume a field exists.

Visibility adds fields beyond the unified set: noimageindex, nosnippet and sitemap_excluded (booleans) and schema_type, a per-post Schema.org @type override. schema_type must be one of Visibility’s own allowed values or an empty string to restore the site default; anything else is refused with invalid_schema_type and the allowed list, and nothing is written. og_image is an attachment id.

  • Check your SEO tool switches. SEO writes ship disabled by default, and on a new EMCP install the six Pro read tools start off too, as every Pro tool does. Check and switch on the needed read and write tools under EMCP Tools → Tools → Plugins, in the SEO group; an existing site’s saved choices are preserved.
  • Standard capabilities. Post/term SEO writes require edit_posts; settings require manage_options.
  • Only when active. A plugin’s pair doesn’t register unless that plugin is installed and active.

The dispatchers appear under EMCP Tools → Tools → Plugins, gathered in the SEO group (not the SEO section on the WordPress tab, which holds the SEO & Accessibility toolkit). Each plugin has its own section with a Read card and a Write card. While a plugin is not active, its cards carry a Needs badge naming it and cannot be switched on. After changing a switch, choose Save changes in the save bar and reconnect your AI client.

For native WooCommerce brand archives, pass the term_id returned by the brand operations. Read back metadata after updating it, then inspect the public response with get-page-html. Server-rendered tags can differ from stored values because of plugin defaults such as noindex on empty taxonomies. With Rank Math, complete setup or select its supported skip-account-connection option before expecting frontend SEO tags.

Pro bundles an emcp-plugins/seo Agent Skill that teaches a connected agent the unified field vocabulary and per-plugin operation support (term SEO, schema, focus keyword). Check the site’s actual tool toggles before use.