Blog administration
The Blog Moderation screen, how to find a customer post, what each status change does to the live site, and the one direction the console cannot move a post in.
Last updated 2026-08-06
Summary#
Blog Moderation lists every post across every customer blog and lets an owner change a post's status. It exists for abuse response: taking something off the public web quickly, without touching the customer's account or their other work. It is status-only. You cannot read a post's body, edit it, or publish it from here.
Purpose#
Customers publish to a hosted blog from Blog Studio, and those posts are served on the public web. That creates a small but real moderation obligation: if something is defamatory, illegal, or a compromised account is pushing spam, we need to be able to unpublish it in seconds and from one place, without asking the customer or waiting for a deploy.
The scope was kept narrow on purpose. The console can change what the public can see. It cannot rewrite what a customer wrote. That boundary keeps a moderation action from ever being confused with editorial interference.
Requirements#
- An active admin session. See Getting admin access.
MONITOR_DBbound, with the blog tables present. If a customer blog has never been provisioned on this environment, the tables may not exist yet.- The
ownerrole to change anything. Anadmincan view the list only.
Permissions#
| Capability | admin | owner |
|---|---|---|
| Search and list posts | Yes | Yes |
| See status, site, owner email and last-updated | Yes | Yes |
| Unpublish, Trash, Restore | No | Yes |
The action buttons are not rendered at all for an admin, and the endpoint refuses the call independently with 403 {"error":"Only an owner can moderate posts."} A hidden button is a convenience. The server check is the control.
Navigation Path#
Admin console → Operations → Blog Moderation
What a status means#
A post's status decides where it appears. Understand these before you press anything.
| Status | On the public blog | In the customer's Blog Studio | Badge |
|---|---|---|---|
published | Visible, if its visibility is public and its publish date has passed | In their list | Green |
draft | Not visible | In their list, as a draft | Amber |
scheduled | Not visible until it goes live | In their list | Purple |
trash | Not visible | Hidden from the main list, counted separately as trash | Red |
trash is a soft delete. The row stays in the database and the customer can still see and restore it from their own trash view, or delete it permanently themselves. Moving a post to trash from the console destroys nothing.
Step-by-Step Guide#
Find a post#
- Select Blog Moderation in the Operations group. The table starts empty with
Search or Refresh to load customer posts. - Fill in any combination of filters:
search title / slug / sitematches the post title, the post slug or the site name.owner emailmatches the site owner's address as a substring.- The status select offers
Any status,Published,Draft,ScheduledandTrash. - Press Search, or press Enter in either text field. Changing the status select searches immediately.
- The header count reads
(<loaded> of <total>). Load more fetches the next 50 rows and hides itself when everything is loaded.
Each row shows the title with the slug beneath it, the site name with the owner email beneath it, the status badge, and a relative last-updated time.
Take a post off the public blog#
- Find the post and confirm the owner email is the account you intend to act on.
- Press Unpublish. The post moves to
draft. - The message line under the filters reads
Updated.and the list reloads. - The action is recorded as
blog.statuswith the post id as the target and the new status as the detail. See Audit log.
The post leaves the public blog as soon as the change is written. There is no cache to wait for on the moderation side.
Warning: There is no confirmation dialog on any of these buttons. A single click takes effect immediately. Read the owner email before you press.
Trash a post#
Press Trash. The post moves to trash, leaves the public blog, and drops out of the customer's normal post list. Available from any status.
Restore a trashed post#
Press Restore on a trash row. The post returns to draft. It does not return to published, and the console has no control that will publish it.
What you cannot do from here#
- You cannot re-publish. The buttons offered are Unpublish, Trash and Restore. There is no Publish action for a draft, so after unpublishing, only the customer can put the post back on the public blog from Blog Studio. Plan for this before unpublishing something the customer expects back.
- You cannot read or edit content. The list returns id, title, slug, status, locale, updated time, site and owner. The body is never fetched. Review the post on the public blog, or ask the customer.
- You cannot set
scheduled. It is filterable but not settable. The endpoint accepts onlydraft,trashandpublished, and rejects anything else with400 {"error":"invalid status"}. - You cannot delete permanently. Trash is as far as moderation goes.
- You cannot moderate a site. Actions are per post. To stop a whole account, suspend the customer instead. See Customer lookup and billing.
Does it notify anyone?#
No. Changing a post's status sends no email and shows no in-app message to the customer. They will find out when they next open Blog Studio, or when a reader tells them the page is gone. If a moderation action needs explaining, contact them separately.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
No posts match. for a customer you know has a blog | The filters are too narrow, or the tables do not exist on this environment | Clear the filters and press Refresh. A missing table returns an empty list rather than an error, so an always-empty screen is a signal in itself |
| No action buttons on any row | The role is admin, not owner | An owner promotes the account on the Admins screen |
Only an owner can moderate posts. | The endpoint was called by an admin | Same fix |
invalid status | A status other than draft, trash or published was submitted | Use the on-screen buttons rather than a hand-built request |
id required | The post id was missing from the request | Reload the screen and press again |
| The list is empty on first open | The screen does not auto-load with content | Press Refresh or Search |
| A post is trashed but still on the public blog | A stale page in the reader's browser or an edge cache | Reload without cache. The query that serves the public blog only returns published, public, already-live posts |
FAQs#
Is trashing a post reversible? Yes. Restore returns it to draft. Nothing is deleted, and the customer's own copy is intact.
Can I see how many posts a customer has? Not as a count on this screen. Filter by their owner email with Any status and read the header total.
Does moderating a post affect the customer's credits or plan? No. It changes one field on one row and writes an audit entry. Nothing billable happens.
Who can see that I moderated a post? Any admin, in the audit log. The row records your email, the action blog.status, the post id and the new status.
What if a post needs removing for legal reasons? Trash it, so it leaves the public blog immediately, then escalate. Permanent deletion is not available from the console and has to be handled directly against the database by someone with that access. Record the request and the action taken.
Why does the screen show posts from customers who have never published? The list covers every post row, at every status, across every provisioned site. A customer with only drafts still appears.
See also
Was this article helpful?
Thanks — feedback noted for the docs team.