Validate and initialize WordPress
SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
SEO_BLOG_CMS_LOCALE='<primary-bcp47-locale>' \
WORDPRESS_URL='<wordpress-url>' \
WORDPRESS_USERNAME='<wordpress-username>' \
WORDPRESS_APP_PASSWORD='<wordpress-app-password>' \
SEO_BLOG_SITE_ORIGIN='<origin>' \
npx --yes @wotaso/seo-blog-admin-cli@0.2.2 init-cms --cms wordpress --site-slug '<slug>' --site-origin '<origin>' --locale '<primary-bcp47-locale>'
init-cms performs the connector's read-only credential, permission, and destination-schema checks first. It writes seo-blog.config.json and the scheduled tenant workflow only after validation passes; review both files, add the named GitHub secrets and variables, then trigger the workflow once manually.
Scheduled runner health heartbeat
SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
SEO_BLOG_CMS_LOCALE='<primary-bcp47-locale>' \
WORDPRESS_URL='<wordpress-url>' \
WORDPRESS_USERNAME='<wordpress-username>' \
WORDPRESS_APP_PASSWORD='<wordpress-app-password>' \
SEO_BLOG_SITE_ORIGIN='<origin>' \
SEO_BLOG_SCHEDULED='true' \
npx --yes @wotaso/seo-blog-admin-cli@0.2.2 health --config seo-blog.config.json --mode cms --site-slug '<slug>' --site-origin '<origin>'
Run this from the real scheduled runner after seo-blog.config.json contains the selected connector configuration and the listed secrets are loaded. CMS health re-runs the remote read-only validation; it still does not create an article. The dashboard expires readiness at the returned deadline, with a 36-hour fallback when no deadline is available.
Fields and data model
- Native title, slug, status, content, and excerpt fields
- SEO metadata remains owned by the active theme or SEO plugin
- Read-only setup validation before the scheduled runner is installed
Canonical and route
WordPress and the active theme or SEO plugin remain responsible for the permalink, canonical tag, sitemap, metadata, schema, and rendering. SEODrafts verifies the final public WordPress page rather than creating a parallel proxy page.
Known limits
- Custom fields need explicit REST support and a reviewed extension.
- An Application Password must never enter a browser bundle or prompt.
- Page-builder-specific fields are outside the focused launch connector.
Recovery
- Run init-cms again after correcting credentials or WordPress capabilities.
- For 401 responses, check HTTPS origin, user, and Application Password.
- For canonical or layout problems, fix the WordPress theme or SEO plugin before rerunning publication.