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. These tools read and set what the SEO plugin actually stores.

Slim SEO is free; the other six are Pro:

PluginToolsTier
Slim SEOslimseo-read / slimseo-writeFree
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.

// 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 7 plugins
get-term-seo / update-term-seoAll except All in One SEO (post-only in 4.9)
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.

  • Reads on, writes off. Each <plugin>-read is enabled by default; each <plugin>-write ships disabled: enable it under EMCP Tools → Tools → Plugins → SEO.
  • 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 → SEO, grouped as one section, each plugin a card with its read (on) and write (off by default) toggles.

Pro bundles an emcp-plugins/seo Agent Skill that teaches a connected agent the unified field vocabulary, per-plugin operation support (term SEO, schema, focus keyword), and the reads-on/writes-off defaults, so it sets SEO correctly across any of the seven plugins.