No-write payload and mapping preview
SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
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 publish-cms --cms wordpress --site-slug '<slug>' --site-origin '<origin>' --dry-run
For a currently due approved post, --dry-run builds the destination payload without writing to the provider. It does not contact the provider or prove credentials, remote schema compatibility, deployment, or a live page; when no post is due, provider inputs are not exercised.
Scheduled runner health heartbeat
SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
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 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. It reports configuration readiness, not a live 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, content, and excerpt fields
- Optional SEO metadata through configured post meta
- Explicit draft and publish modes
Canonical and route
WordPress and the active theme or SEO plugin remain responsible for the permalink, canonical tag, sitemap, and rendering. SEODrafts stores the final WordPress URL rather than creating a parallel proxy page.
Known limits
- Custom fields need REST access when a plugin consumes them.
- An Application Password must never enter a browser bundle or prompt.
- Page-builder-specific fields need a custom mapping or webhook.
Recovery
- Run a dry run and verify the derived URL first.
- For 401 responses, check HTTPS origin, user, and Application Password.
- For layout problems, inspect the WordPress post type and theme template.