Skip to Content
TroubleshootingMy post wasn't published

My post wasn’t published

If a campaign was supposed to publish a post and it didn’t appear, walk through this page in order. Most cases fall into one of a handful of buckets; the checklist will point you at the right one quickly.

Did you click “Generate Now”?

If the post you’re missing was triggered by the Generate Now button on a campaign (rather than by Structura’s scheduler), the code path is different and the most common failure mode has a quick fix. Two things to check before the full checklist below:

  1. Did the REST response surface an error? A message that mentions Tools → Site Health or max_allowed_packet means the background job was rejected by MySQL — raise the database’s max_allowed_packet to at least 4 MB on your host. The full walkthrough for that fix lives on Images aren’t being generated, Step 1 — same root cause, same fix.
  2. Open Structura → System Logs and filter Step = single_post. A warning line saying “could not load its campaign payload” means the background job fired too late (the cached form data had already expired). Click Generate Now again.

If neither of those applies, continue with the checklist below.

Step 1: Is the campaign even active?

  1. Go to Structura → Campaigns.
  2. Find the campaign. Check the Status badge.
  • Running — it should be publishing. Move on to Step 2.
  • Paused — the campaign was paused, intentionally or otherwise. Resume from the campaign’s detail page (Pause / Resume button). See Pausing or deleting a campaign.
  • Draft — the campaign was never finalized. Open it and finish the Summary step.

Step 2: Was it supposed to publish today?

Check the campaign’s Rhythm setting on its detail page. If it’s set to weekly and today isn’t the scheduled day, it just hasn’t run yet — that’s expected.

Step 3: Did the scheduler run?

  1. Go to Structura → System Logs.
  2. In the filter, type TASK_RUNNER.
  3. Look at the most recent entry.
  • Recent entry exists (within the expected cadence) — the scheduler is running. Move on to Step 4.
  • No recent entry / last one is hours or days older than expected — WordPress’s cron isn’t firing Structura’s tasks. Common causes:
    • Low-traffic site. WordPress cron fires on page loads; a site nobody visits won’t run scheduled tasks. Fix: install a “real” cron trigger (e.g., add a WP-Cron call to your server’s cron), or just visit the site manually.
    • A caching or security plugin blocking wp-cron. Check that wp-cron.php is reachable.
    • A hosting-provider WP-Cron alternate is misconfigured. Some managed hosts disable WP-Cron and replace it with their own system. Confirm it’s running.

Step 4: Did the campaign pick a topic?

Still in System Logs, filter CAMPAIGN:KEYWORDS.

  • Entry exists recent to the run — topic was picked. Move on.
  • Warning-level entry saying no topics available — your campaign’s keyword pool is exhausted. Edit the campaign and add more target keywords. See Target keywords.

Step 5: Did the draft generation work?

Filter the logs on CLOUD_DELEGATION or CONTENT:DRAFT.

  • Success entries — the draft was generated. Move on.
  • Errors — the generation failed. Read the error message:
    • “AI provider key invalid” / “unauthorized” — your BYOK key has been revoked or rotated. Fix on Structura → Settings → AI Engine. See AI settings.
    • “AI provider rate limit” — you’ve hit the provider’s rate cap. Wait an hour and the next scheduled run should clear.
    • “Insufficient quota” / “billing issue” — the provider account needs payment or a higher tier. Check the provider’s dashboard.
    • “Cloud plan quota exceeded” — if you’re on a Cloud plan and used up this cycle’s generation quota. Upgrade or wait for the cycle to reset.

Step 6: Did publish succeed?

Filter PUBLISH.

  • Success entry — the post is in WordPress. Go to Posts → All Posts in WordPress and look for it (search by title or date). If it’s there, your problem is probably a theme / front-end issue: the post exists but the theme isn’t displaying it on the homepage, category page, or wherever you expect. Check post status and category.
  • No publish entry — generation got far enough to attempt but something in the final insert failed. Look for Error-level entries near the top of the chain. Most commonly:
    • WordPress-side error — database write failed, a plugin vetoed the insert. Check for an error message quoting a PHP exception.
    • Draft saved instead of published — in rare cases Structura saves the post as a draft pending review (e.g., moderation policies, some SEO plugins). Check the Posts → All Posts list including Drafts.

Step 7: Did the channels fan-out succeed?

Even if a post was published to WordPress, you might be expecting to see it on Slack / LinkedIn / etc. Filter CHANNELS. to check per-channel outcomes. See A channel shows “failed” for fixing that layer.

If none of this applies

Contact support with:

  • The campaign name.
  • The approximate day/time you expected the post.
  • A screenshot of the System Logs page filtered to the relevant run.
Last updated on