SmartCrawl ability reference
Reference for the GoBuildWP Pro 1.12.4 and Free 1.18.6 source. Installed schemas and policy remain authoritative.
This SmartCrawl ability reference covers a single post's SmartCrawl data: title and description with their %%macros%%, robots flags, up to three focus keywords, and Open Graph and X text and images. An agent can compare what the post stores with what SmartCrawl prints, change it with an undo, and see which SmartCrawl modules are switched on.
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 SmartCrawl needs before these load
2 of the 3 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.
SmartCrawl, free or Pro, must be active. The module is offered when the SmartCrawl\SmartCrawl class or the SMARTCRAWL_VERSION constant is present, and every call also checks for SmartCrawl's post entity class, answering smartcrawl_not_active without it. No version floor applies; storage was checked against SmartCrawl 3.16.4. Callers need manage_options (super admin on multisite) through GoBuildWP's own check and edit_posts, and edit_post on the target, or the call returns smartcrawl_forbidden. The free plugin's pair covers title, description and the paired robots flags; focus keywords, canonical, social fields and the printed view stay with Pro.
- SmartCrawl editions
- free, pro
Two pairs of robots flags, and the post type decides which counts
SmartCrawl keeps robots as flags stored as "1": _wds_meta-robots-noindex beside _wds_meta-robots-index, and _wds_meta-robots-nofollow beside _wds_meta-robots-follow. On a post type SmartCrawl noindexes by default it reads the -index flag, and on every other post type the -noindex flag, so the same stored value can mean nothing on one type and everything on another. The kit keeps at most one flag of each pair set, and default clears both.
Because of that, the stored robots_index can look right while the page does something else. rendered.robots is SmartCrawl's own answer for the post and already accounts for the post type's default, so check it after any robots change.
Keywords, macros and social blocks under _wds_
Title, description and canonical live in _wds_title, _wds_metadesc and _wds_canonical. Text is cleaned with smartcrawl_sanitize_preserve_macros(), which keeps macros such as %%title%%, %%sep%% and %%sitename%% intact, and an empty value deletes the row the way SmartCrawl's editor does. The kit slashes what it writes; SmartCrawl's own editor does not and loses backslashes.
Focus keywords are one comma-joined _wds_focus-keywords row written through SmartCrawl's own set_focus_keywords(). The update replaces the whole list: three at most, no commas inside a keyword, and the first entry is the focus keyword. Open Graph and X text and images sit in the _wds_opengraph and _wds_twitter arrays, where images may be attachment ids or URLs. Through the plugin-neutral bulk calls, a focus_keyword swaps the first keyword and keeps the secondary ones.
When a correct value still does not print
SmartCrawl prints titles and descriptions while its onpage module is on, and Open Graph and X tags while its social module is on. The setup call reads the module switches from wds_settings_options and the separator, templates and post-type robots from wds_onpage_options, key by key, so the service and IndexNow keys held in those options are never returned. Rendered values come from a fresh post entity, because SmartCrawl's post cache would still answer with the values from before the write.
Example SmartCrawl input: wppilot/smartcrawl-get-post-seo
This one operation declares the 2 top-level input parameters below in wppilot-pro/includes/kits/seo-smartcrawl/src/abilities/get-post-seo.php; post_id is required. Other calls in this module take different arguments. Nested schemas and constraints are not expanded here; the complete live schema a connected client discovers is authoritative.
| Parameter | Type and meaning |
|---|---|
post_idrequired | integer |
include_rendered | boolean |
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.
Add a secondary keyword and a custom social title to a product post.
- 01
wppilot/smartcrawl-check-setupConfirms the social module is on, so an Open Graph title will actually print, and shows the post type's title template. - 02
wppilot/smartcrawl-get-post-seoReturns the current focus_keywords list, which the update has to repeat because it replaces the list whole. - 03
wppilot/smartcrawl-update-post-seoSent the full keyword list with the new one appended and an og_title; returns the changed fields and the rendered Open Graph title.
Questions about SmartCrawl
I set robots_index to noindex and the page is still indexable. Why?
On a post type SmartCrawl noindexes by default, the noindex flag is not the one it reads, and on other types the index flag is ignored. Check rendered.robots and the post type's noindex setting in the setup report.
Can I store a fourth focus keyword?
No. SmartCrawl keeps three, and the update refuses a longer list, or a keyword containing a comma, with smartcrawl_invalid_input.
SmartCrawl reads
| Ability | What it does |
|---|---|
wppilot/smartcrawl-check-setupSmartCrawl Setup | Whether SmartCrawl is active, its version and build (free or pro), which of its modules are on (onpage titles, social tags, sitemap, schema, autolinks, instant indexing), the title separator as printed and its setting, the home title template, each public post type's title and description templates and whether it is noindexed or nofollowed by default, and whether search engines are discouraged site-wide. Read-only; never returns service or IndexNow keys. |
wppilot/smartcrawl-get-post-seoGet Post SEO (SmartCrawl)Also in GoBuildWP Free | One post's SmartCrawl settings. "seo" is what the post stores (empty = none, SmartCrawl uses the post type template): title, description (may hold %%macros%%), canonical, robots_index (default | index | noindex) and robots_follow (default | follow | nofollow) as the stored flags, focus_keywords (up to three, the first is the focus keyword), og_title, og_description, og_images, twitter_title, twitter_description, twitter_images. "rendered" is what SmartCrawl prints for it now, from its own entity: title and description with macros filled in, canonical, the robots value (which accounts for the post type's default), and the Open Graph and X title and description. Pass include_rendered=false to skip them. In GoBuildWP Free: Reads one post's SmartCrawl meta title, meta description and robots as the post stores them. An empty title or description means SmartCrawl uses the post type template. robots_index is default, index or noindex and robots_follow is default, follow or nofollow: the flags the post stores. SmartCrawl only obeys "index" on a post type it noindexes and "noindex" on one it indexes, so a stored flag that does not apply to the post type changes nothing. |
SmartCrawl writes
| Ability | What it does |
|---|---|
wppilot/smartcrawl-update-post-seoUpdate Post SEO (SmartCrawl)Also in GoBuildWP Free | Sets one post's SmartCrawl fields in the post meta its editor uses, sanitized the same way (macros such as %%title%% and %%sep%% are kept). Send only the fields to change; an empty string or empty list clears one so the post type template applies. robots_index: default | index | noindex and robots_follow: default | follow | nofollow set one of SmartCrawl's paired flags and clear the other; on a post type SmartCrawl noindexes by default only "index" changes anything. focus_keywords replaces the whole list (at most three, no commas); the first is the focus keyword. og_images / twitter_images take image URLs or attachment ids and replace the list. Returns what was stored, the fields that changed and what SmartCrawl now prints. Recorded in the change ledger with a before-image of the post's SmartCrawl meta only; wppilot/rollback-change restores it. In GoBuildWP Free: Sets one post's SmartCrawl meta title, meta description and robots the way its post editor stores them. Send only the fields to change; an empty string deletes a title or description so the post type template applies. title and description keep SmartCrawl %%macros%%. robots_index: default | index | noindex; robots_follow: default | follow | nofollow; each stores at most one flag of its pair and default clears both. SmartCrawl obeys "index" only on a post type it noindexes and "noindex" only on one it indexes. Returns the fields that changed and the re-read values. Recorded in the change log with a before-image of just the SmartCrawl meta keys it wrote; wppilot/rollback-change restores them. |
For the task-level view of SmartCrawl, with worked requests and what to check afterwards, see SmartCrawl integration page.