Product · September 1, 2026 · 7 min read
The last copy-paste: publishing from Zsper to your own site
Most AI writing tools stop at the text and hand you a box to copy out of. Zsper pushes the finished article to your own WordPress — as a proper Gutenberg post, with the slug, meta description and structured data attached, landing in your drafts. Here's how it works and every place we deliberately stopped short.
Count the steps between "the draft is good" and "the post is live."
Copy the markdown. Paste it into the editor. Watch the headings not survive. Fix the headings. Fix the links. Write a meta description. Invent a slug. Check whether the excerpt field auto-filled with the first two sentences again. Preview. Publish.
Ten minutes, every time, on work that is finished. It's the least interesting part of the job and it sits at the exact moment your attention has already moved on — which is why the meta description is usually the piece's worst sentence.
Zsper now does that stretch. Connect your WordPress once and a finished article goes across with everything attached.
TL;DR: A finished piece pushes to your own WordPress as a real Gutenberg post — headings, lists, quotes and links intact — with slug, meta description, canonical, Open Graph and Article structured data on it. It lands in your drafts. The publish button on your own site is the only one that ships anything, and the function that would publish outright isn't wired to any automated surface.
It goes as a draft, and this is not a setting
Let's do the important part first.
The push puts the piece in your site's draft queue and stops. There is no toggle to change that, no scheduler, no "auto-publish when confidence is high," no connector tool that can do it on your behalf.
The mechanism isn't a preference — publishing outright lives in a different function that nothing automated can reach. Which means "Zsper published something without me" isn't a bug we'd need to find and fix. It's a thing the code cannot express.
I hold this line for a boring reason: your name is on the post. Not ours. The entire value of writing in your own voice evaporates the moment something goes out in it that you didn't read. Every convenience downstream of that is worth less than the trust it spends.
Structure crosses. Sentences don't change.
Pasting markdown into WordPress produces a wall of paragraphs where your structure used to be. So Zsper converts to actual Gutenberg blocks: a heading becomes a heading block, a list becomes a list block, a quote becomes a quote block.
The rule we enforce on that converter: every run of text in the output appears verbatim in the markdown that went in. The converter reshapes structure. It never touches a sentence. We check this in both directions, because a "helpful" conversion step that quietly tidies your prose is the single most annoying thing a publishing tool can do — you approved a draft, and something else shipped.
Re-pushing doesn't damage a live post
Corrections happen. You spot a typo an hour after publishing, or a number changes.
When you push an updated version of something already live, Zsper sends the content and deliberately omits the status and the publish date. Your post stays published, keeps its original date, keeps its URL. A correction is a correction, not a republish.
This matters more than it sounds. The naive implementation — send the whole payload every time — would flip a live post back to draft, or restamp its date and shuffle it to the top of your feed and your RSS. A correction that unpublishes the thing it was correcting is a spectacular own goal.
The reverse direction is deliberately not wired either: unpublishing on your site doesn't reach back and change anything in Zsper. Your site is the source of truth for what's live. Ours is the source of truth for what you've written.
The on-page pack, and the one rule that governs it
Every piece carries a pack: slug, meta description, canonical URL, Open Graph tags, and Article structured data.
One rule sits over all of it. A missing value means "derive it." A stored value is yours.
Leave the slug empty and Zsper derives a clean one from the title. Write your own and that is the slug, permanently — no regeneration, no "improving" it on the next push, no drift. A derived value is a default, never a correction, and the distinction is the difference between a tool that saves you work and a tool you have to keep an eye on.
The structured data has its own discipline. Every string in the JSON-LD is something the piece actually contains, verbatim. The fields we'd have to guess at are omitted rather than filled with something plausible. Structured data is a set of machine-readable claims about your page, and a plausible-sounding guess in that position is a lie you'll never see rendered.
Keyword placement, reported rather than scored
Tell Zsper what the piece should rank for and it reports where that phrase actually landed: the title, the first paragraph, the headings, the body.
What it doesn't do is give you a score out of a hundred.
I've never seen one of those numbers change a decision. It's a composite of weights you can't inspect, and the only available move is to add the keyword somewhere until the number goes up — which is how you end up with an intro that says the phrase three times and reads like a robot wrote it. A placement report tells you a fact: your keyword isn't in any heading. You can then decide whether that's wrong or whether the piece is simply about something more specific than the phrase you picked.
What isn't here
WordPress today. Self-hosted or WordPress.com, over the standard REST API with an application password you can revoke from your own admin.
Not Webflow, not Ghost, not Substack, not Medium, not a "publish anywhere" claim with a logo wall behind it. Those are on the roadmap and I'd rather name the one that works than list six that don't.
One deliberate exception in the URL rules: we refuse the usual set of hostile and internal addresses, but a self-hosted site on a non-standard port is accepted. Plenty of real WordPress installs live somewhere odd, and a guard that refuses them is a guard that refuses customers.
Where this is going
Publishing is one piece of a longer arc. The research side got built first — Zsper finds and ranks sources before it writes. Publishing is the other end. The stretch between them, the writing, was always the part we were good at; it was the two ends that left you in someone else's tool.
The version of this I want is short: you decide what to write, you argue with the draft, you press publish once, on your own site.
That's most of the way there now. The copy-paste is gone.
Zsper learns your voice, writes in it, and now ships to your site. Start free for 14 days — no card, nothing auto-publishes.
Topics: WordPress, publishing, SEO, content workflow, structured data
Start building your brain today.
Import what you've written, watch it learn, and ship a draft that sounds like you.
Start writing free