taxonomies/update-term-seo writes Yoast SEO fields on one taxonomy term. Omitted fields keep their values.
It goes through WPSEO_Taxonomy_Meta::set_values(), which matters more than it sounds.
At a glance
| Ability | taxonomies/update-term-seo |
| Toolset | Yoast SEO — toolset/yoast-seo |
| Group | Yoast SEO › Term SEO |
| Requires | Yoast SEO, active on the site |
| Capability | manage_options |
| Safety | Writes data |
| Repeatable | Idempotent — running it twice leaves the same result |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
Why the writer matters
Yoast stores term SEO in a single wpseo_taxonomy_meta option keyed by taxonomy and term, not in term meta. Anything reading term meta finds nothing, and anything writing term meta is writing somewhere Yoast never looks.
The option is a nested array keyed by taxonomy and then by term ID, and writing it by hand means reconstructing that structure correctly. Get it wrong — write a flat key, or drop the taxonomy level — and Yoast reads nothing while the option looks populated.
Worse, writing the whole option to set one term’s title discards every other term’s SEO on the site if the existing structure was not read and merged first. That is a one-line mistake with site-wide consequences.
Yoast’s own writer handles the structure and runs per-key sanitisation, which also matters — the canonical is validated as a URL, the noindex flag is normalised, and the values that come back out are the ones Yoast expects to see.
Partial by default: send the one field that changed.
Idempotent.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
taxonomy | string | Yes | The taxonomy. |
term_id | integer | Yes | The term. |
seo_title | string | No | SEO title. Template variables are allowed. |
meta_description | string | No | Meta description. |
focus_keyphrase | string | No | Focus keyphrase. |
canonical | string | No | Canonical URL. |
breadcrumb_title | string | No | What the term shows in a breadcrumb trail. |
noindex | boolean | No | Whether the term archive is excluded from search. |
is_cornerstone | boolean | No | Whether the term is cornerstone. |
What comes back
| Name | Type | What it is |
|---|---|---|
term_seo | object | The term’s SEO fields after the write. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation. |
Example
Ask your assistant:
Add a meta description to the Guides category.
It resolves to one call:
{
"ability": "taxonomies/update-term-seo",
"parameters": {
"taxonomy": "category",
"term_id": 87,
"meta_description": "Step-by-step guides to getting set up."
}
}Worth knowing
- Writing the option by hand can discard every other term’s SEO on the site.
- Partial — omitted fields keep their values.
- Sanitisation runs per key, so values come back in the form Yoast expects.
- Idempotent.
Related abilities
- Get Term SEO — read the current values
- Clear Term SEO — return it to the defaults
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category