AIOSEO ability reference
Reference for the GoBuildWP Pro 1.12.4 and Free 1.18.6 source. Installed schemas and policy remain authoritative.
This AIOSEO ability reference covers All in One SEO's fields for posts and terms, its default schema switch, its site settings and, on AIOSEO Pro, its redirects. AIOSEO keeps this data in its own database tables rather than in post meta, which shapes how the robots fields behave and why the Pro module's writes cannot be rolled back through GoBuildWP. The one exception is the free plugin's post SEO edit, used when Pro is not active, which keeps its own before-image.
Read-only, write and destructive groups describe the source annotations. They do not establish a minimum safety profile, human approval or undo support. Those controls are separate: check the installed ability, the connected user and the active site policy before calling it. A read can still return sensitive data. These pages are not evidence that every operation passed an end-to-end runtime test.
What AIOSEO needs before these load
2 of the 12 also ship in GoBuildWP Free 1.18.6 under the same names, marked “Also in GoBuildWP Free” below. They need no GoBuildWP Pro licence, but each retains its own dependency, feature and permission checks. Where Free's copy does less, its own description follows Pro's. When Pro's richer copy passes its gates, it registers first and answers.
All in One SEO 4.0 or newer must be active; the gate reads AIOSEO_VERSION, which both editions define. The Pro edition is recognised by aioseo()->pro. Term SEO needs Pro and answers aioseo_pro_required on the free edition, and the redirect calls register when Pro and its Redirect model are loaded. Every call uses GoBuildWP's permission check (manage_options, or super admin on multisite). With AIOSEO inactive the calls return aioseo_not_active, and a post whose type AIOSEO does not manage is refused with aioseo_invalid_post. Unlike Pro's writes, the free plugin's aioseo-edit-post-seo keeps a before-image of the AIOSEO columns it changes (title, description, robots), so rollback-change can restore them through AIOSEO's model while AIOSEO is active.
- Minimum (base)
- 4.0
WPPILOT_PRO_AIOSEO_MIN_VERSION - AIOSEO editions
- free, pro
- Agent skills shipped
aioseo-integration
Robots in AIOSEO are all or nothing
Each AIOSEO row has a robots_default column. While it is true, every per-row robots flag is ignored and the post inherits the global or post-type setting, which the read reports as index default. Writing index default therefore resets all the flags and the preview limits together. If a request sets nofollow or a non-empty advanced list while leaving index at default, the module promotes the row to an explicit index so the override actually takes effect.
The advanced list takes noarchive, noimageindex, nosnippet, noodp and notranslate. The search preview limits are reported too: max_snippet and max_video_preview use -1 for unlimited, because AIOSEO stores null there, and 0 for none; max_image_preview defaults to large.
Why AIOSEO writes cannot be undone here
Post and term SEO sit in AIOSEO's aioseo_posts and aioseo_terms tables and redirects in aioseo_redirects, none of which the change ledger can snapshot, so every write made through GoBuildWP Pro's AIOSEO module, including its copy of aioseo-edit-post-seo, is logged as irreversible. Only the free plugin's aioseo-edit-post-seo, which answers when Pro is not active, captures the title, description and robots columns it changes so wppilot/rollback-change can write them back. Keep the output of the matching get call before editing: writing those values back is the way to reverse a change.
Text comes back through AIOSEO's own title sanitiser, so it matches what the page renders, and smart tags such as #post_title are left unexpanded. Redirect creates hash the source exactly as AIOSEO's save does and look it up across plain and regex rows, returning aioseo_redirect_exists (409) rather than a raw duplicate-key database error. Deleting a redirect also removes its row from aioseo_redirects_hits. Listing returns at most 500 rows per page.
Before accepting the result
Pro module rollback limits differ from Free’s supported per-post metadata exception. Pro writes to AIOSEO-owned tables are recorded as irreversible; check the exact writer rather than transferring Free recovery guarantees to all operations.
Representative call sequence
This sequence describes the documented calls and checks to perform. It is not a recorded result from an installed WordPress site. Inspect returned errors and partial results, then verify the saved values and affected output before proceeding.
Leave a post indexable but stop search engines showing a text snippet for it.
- 01
wppilot/aioseo-get-post-seoShows robots.index as default, meaning the post currently inherits every robots setting from the site. - 02
wppilot/aioseo-edit-post-seoSent robots with index set to index and advanced set to nosnippet, which switches the row to explicit robots so the nosnippet flag applies. - 03
wppilot/aioseo-get-post-seoReads the post back to confirm the explicit index, the nosnippet token and the preview limits now stored.
Questions about AIOSEO
Can I change a post's schema type to Recipe or Product?
Not with aioseo-edit-post-schema. It switches the post's default schema graph on or off, and AIOSEO always renders the post type's own type for that graph; a specific type needs a custom graph added with wppilot/execute-php, and existing custom graphs are left untouched.
Why did setting index to default also clear a max_snippet limit?
Because default makes the row inherit every robots setting, and the module resets the flags and preview limits to AIOSEO's unset values with it. That stops an old limit from reappearing when the post later goes back to explicit robots.
AIOSEO reads
| Ability | What it does |
|---|---|
wppilot/aioseo-check-setupCheck AIOSEO Setup | Reports the All in One SEO environment: whether AIOSEO is active, its version, whether it is the Pro edition, which Pro-gated surfaces are available (term SEO and redirects need Pro), whether schema is available, and the public post types and taxonomies whose SEO can be managed. Pro-gated abilities (term SEO, redirects) check this. Call this first before any other AIOSEO ability. |
wppilot/aioseo-get-post-schemaGet Post Schema (AIOSEO) | Reads the All in One SEO schema (structured data) state for a post. Returns default_graph ("enabled" = the post emits its default schema graph, "off" = disabled), default_type (the schema.org type that default graph renders - the post-type default, e.g. BlogPosting for posts, WebPage for pages; AIOSEO fixes this and edit-post-schema cannot change it), custom_graphs (the schema.org types of any Schema-Generator custom graphs the post adds, which render in addition to the default), and has_custom_graphs (true when the post has any custom graphs - graphs / raw JSON-LD / block - which edit-post-schema leaves intact). Identify the post by post_id (alias: id). |
wppilot/aioseo-get-post-seoGet Post SEO (AIOSEO)Also in GoBuildWP Free | Reads the All in One SEO metadata for a single post or page in one friendly shape: focus_keyphrase, additional_keyphrases (Pro), seo_title, meta_description, canonical, pillar_content (cornerstone), robots (index: default|index|noindex, follow: follow|nofollow, advanced: list of noarchive/noimageindex/nosnippet/noodp/notranslate, plus the max_snippet / max_image_preview / max_video_preview SERP-preview limits on an explicit-robots post), facebook (Open Graph) and twitter previews, and schema (whether the post emits its default schema graph - "enabled" or "off"; use aioseo-get-post-schema for the full schema picture). AIOSEO gates per-post robots behind a "use defaults" flag: index "default" means the post inherits the global / post-type robots, NOT "indexed" - this ability maps it for you. Identify the post by post_id (alias: id). Never-set fields come back empty / default. In GoBuildWP Free: Reads one post's All in One SEO title, meta description and robots, as AIOSEO renders the text (entities decoded; smart tags such as #post_title left as they are). AIOSEO gates per-post robots behind a "use defaults" switch: robots.index "default" means the post inherits the global / post type robots, which is not the same as indexed; otherwise index is index or noindex and follow is follow or nofollow. An empty title or description means AIOSEO uses the post type template. Identify the post by post_id (alias: id). |
wppilot/aioseo-get-settingsGet AIOSEO Settings | Reads a curated snapshot of the site-wide All in One SEO settings. scope selects the block(s) (default "all"): "general" = the title separator and the homepage title & meta-description templates; "titles" = the per-post-type and per-taxonomy title & description templates. Template strings use AIOSEO smart tags like #post_title, #separator_sa, #site_title. To CHANGE a setting use wppilot/execute-php and write through the aioseo()->options object then ->save(true) (e.g. aioseo()->options->searchAppearance->global->siteTitle = ...). Do NOT raw update_option('aioseo_options') for title/description templates: those fields are "localized" and AIOSEO renders (and this ability reads) from a separate localized layer the raw write does not touch, so the edit would be silently lost. This ability reveals the keys and current values. |
wppilot/aioseo-get-term-seoGet Term SEO (AIOSEO) | Reads the All in One SEO metadata for a single taxonomy term (category, tag, or custom-taxonomy term): seo_title, meta_description, canonical, pillar_content, robots (index: default|index|noindex, follow: follow|nofollow, advanced), and the facebook (Open Graph) and twitter previews. Term SEO requires AIOSEO Pro. index "default" means the term inherits the global / taxonomy default, NOT "indexed". Identify the term by term_id + taxonomy. |
wppilot/aioseo-list-redirectsList Redirects (AIOSEO) | Lists the All in One SEO redirects (requires AIOSEO Pro). Returns compact rows {id, source_url, target_url, type, regex, enabled}, newest first. Use limit (default 100, max 500), offset to paginate, and search to filter by source or target URL. total is the number of matching rows (it respects search), so you can paginate while offset + returned < total. Use the id with aioseo-edit-redirect / aioseo-delete-redirect. |
AIOSEO writes
| Ability | What it does |
|---|---|
wppilot/aioseo-create-redirectCreate Redirect (AIOSEO) | Creates an All in One SEO redirect (requires AIOSEO Pro). source_url is the path/URL to redirect from; target_url is where it goes (required for 301/302/307; ignored for 410 Gone and 451). type is the HTTP status: 301 (permanent), 302/307 (temporary), 410 (gone), 451 (unavailable for legal reasons). regex treats source_url as a regular expression. Writes through AIOSEO's redirect model so the lookup cache and URL hashes stay correct. Fails if a redirect for the same source_url already exists (use aioseo-edit-redirect). Returns the created redirect. |
wppilot/aioseo-edit-post-schemaEdit Post Schema (AIOSEO) | Controls the All in One SEO default (primary) schema graph for a post. schema_type is "default" (the post emits its default schema graph) or "off" (disable it). AIOSEO ALWAYS renders the post-type's own default type for the default graph (e.g. BlogPosting for posts, WebPage for pages) and resets it at render time, so you cannot change the default graph's TYPE here - only enable or disable it. To add a SPECIFIC schema.org type that needs per-type properties (Recipe, Product, FAQPage, Event, HowTo, etc.), add a custom graph to schema.graphs[] with wppilot/execute-php (see the aioseo-integration skill for a recipe). Any custom graphs the post already has are left intact. Identify the post by post_id (alias: id). Returns the resulting schema state. Recorded as irreversible in the change ledger (AIOSEO keeps this in its own aioseo_posts table). |
wppilot/aioseo-edit-post-seoEdit Post SEO (AIOSEO)Also in GoBuildWP Free | Updates the All in One SEO metadata for a single post or page. Send only the fields to change - it is a partial merge; nested blocks (robots, facebook, twitter) merge field-by-field. Fields: focus_keyphrase, seo_title, meta_description (may use AIOSEO smart tags like #post_title #separator_sa #site_title), canonical, pillar_content (bool, cornerstone), robots {index: default|index|noindex, follow: follow|nofollow, advanced: list of noarchive/noimageindex/nosnippet/noodp/notranslate, plus SERP limits max_snippet (-1 unlimited, 0 none), max_image_preview (none|standard|large), max_video_preview}, facebook/twitter {title, description, image}. IMPORTANT: AIOSEO's robots is all-or-nothing - index "default" makes the post inherit ALL robots (the global / post-type setting); to set follow or advanced you must set index to "index" or "noindex". The friendly labels are mapped to AIOSEO's robots_default + per-flag columns for you. Identify the post by post_id (alias: id). Returns the full updated SEO. This Pro writer is recorded as irreversible: the change ledger cannot restore AIOSEO's own aioseo_posts table, so read the current values with aioseo-get-post-seo first. (GoBuildWP Free's narrower writer of the same name keeps a before-image and can be rolled back.) In GoBuildWP Free: Sets one post's All in One SEO title, meta description and robots in AIOSEO's own table. Send only the fields to change: seo_title and meta_description (plain text; smart tags such as #post_title and #separator_sa work, and an empty string clears the override), robots.index (default | index | noindex) and robots.follow (follow | nofollow). AIOSEO robots are all-or-nothing: index "default" makes the post inherit every robots setting again (and clears its advanced flags and preview limits); any explicit index or follow switches the post to its own robots, keeping its advanced flags; sending only follow "nofollow" on an inheriting post also sets index to "index". Returns the fields that changed and the re-read values. Recorded in the change log with a before-image of the AIOSEO columns it changes; wppilot/rollback-change writes them back through AIOSEO and checks them. |
wppilot/aioseo-edit-redirectEdit Redirect (AIOSEO) | Updates an existing All in One SEO redirect by id (requires AIOSEO Pro). Send only the fields to change: source_url, target_url, type (301/302/307/410/451), regex, enabled. Writes through AIOSEO's redirect model so the lookup cache and URL hashes stay correct. Find the id with aioseo-list-redirects. Returns the updated redirect. |
wppilot/aioseo-edit-term-seoEdit Term SEO (AIOSEO) | Updates the All in One SEO metadata for a single taxonomy term (category, tag, or custom-taxonomy term). Requires AIOSEO Pro. Send only the fields to change - partial merge; robots/facebook/twitter merge field-by-field. Fields: seo_title, meta_description, canonical, pillar_content (bool), robots {index: default|index|noindex, follow: follow|nofollow, advanced: list of noarchive/noimageindex/nosnippet/noodp/notranslate, plus SERP limits max_snippet (-1 unlimited, 0 none), max_image_preview (none|standard|large), max_video_preview}, facebook/twitter {title, description, image}. As with posts, AIOSEO robots is all-or-nothing - index "default" makes the term inherit ALL robots; use "index"/"noindex" to set explicit robots. Identify the term by term_id + taxonomy. Returns the full updated SEO. Recorded as irreversible: the change ledger cannot restore AIOSEO's aioseo_terms table, so read the current values with aioseo-get-term-seo first. |
Destructive AIOSEO calls
| Ability | What it does |
|---|---|
wppilot/aioseo-delete-redirectDelete Redirect (AIOSEO) | Permanently deletes an All in One SEO redirect by id (requires AIOSEO Pro). Writes through AIOSEO's redirect model so the lookup cache stays correct. Find the id with aioseo-list-redirects. Returns the deleted id. |
For the task-level view of AIOSEO, with worked requests and what to check afterwards, see AIOSEO integration page.