Most AI writing advice for blog posts is still a prompt: "sound human", "add keywords", "don't hallucinate", "write for developers". Prompts drift. The same draft can pass on Tuesday and fail on Wednesday depending on model mood, temperature, or which system message you forgot to paste.
If you are a developer who ships a technical blog between features, that drift is expensive. You are not an SEO specialist. You still need posts that answer a real question, cite facts you can stand behind, and do not cannibalize last month's URL under a new title. Hoping the model "gets it" is not a process.
The other shape is boring on purpose: treat draft checks like unit tests. Same input, same verdict. A model can rewrite the prose. It cannot argue the checker into a pass. That is the debate this post is about for prompts vs deterministic checks. seodraft is where we run that idea for our own product blog; you can steal the checklist without using our stack. For our own SEO we use OpenSEO skills together with the OpenSEO MCP server, claude-seo to a lesser extent, and seodraft to manage quality and the editorial process.
Why prompts alone fail for SEO-shaped posts
Prompts alone fail for SEO-shaped posts because a prompt encodes preference without a hard measurement.
"Make sure the keyword is in the title" is clear until the model buries a synonym and you call it good enough. "Don't use AI filler" is clear until the list of banned phrases lives only in your head. "Don't invent stats" is clear until a confident "studies show" slips through because the model has seen that cadence a million times.
SEO and answer-engine friendly posts also care about structure a prompt rarely pins down:
- Does the first sentence under every H2 actually answer that H2?
- Did you already publish this intent under another slug?
- Can every number name who measured it and when?
Those are predicates. Predicates belong in code, or in a fixed checklist a human runs twice. Google Search Central (updated October 1, 2026): "It is critical to manually factcheck and review all AI-generated content for accuracy and trustworthiness before publishing. This review also applies to metadata like <title> elements, meta description elements, structured data, and alternate texts for images, which can appear in Search results."
Treat the rules as tests
A useful rule has four parts:
- A name you can put in a brief ("filler phrases", "answer first").
- A definition a human and an agent can both read.
- A measurement (counts, string matches, presence), never a vibe score.
- A fix written as steps: delete the phrase, move the answer under the H2, name who measured the number.
When a draft fails, the output should name sentences, the rule each one broke, and the fix. That is what an agent (or a tired human at 23:00) can act on without guessing.
Some checks only advise. Some block. Be explicit which is which. Classifier-style notes ("this contrast looks like a straw man") can advise. Deterministic hits on a filler list or a missing answer-first sentence should block if you care about consistency. On October 8, 2026, seodraft's rules counted 887 words in our English draft on human approval of AI content, flagged it with the thin-content advisory (threshold 900) and let it pass.
What is worth checking in code
None of these promise rankings or traffic. They only decide whether a draft is ready for a human to review.
Keyword placement
The topic phrase shows up where a reader and a crawler look first: title, intro, and at least one H2, without stuffing the rest of the body. Placement is countable. Density games are beside the point.
An answer under every H2
The first sentence under each heading answers that heading on its own: at least a short full sentence, never a question, never an opener that postpones the answer ("before we begin", "it depends", "as we saw").
That first sentence is often what an answer engine extracts. If the honest answer is a condition, put the condition and the outcome in the same sentence.
Evidence you accepted
Cite only numbers, cases, and lessons from a bank you approved, or from a source you can name. Unsourced "studies show 73%" fails even when the grammar is fine. Fix: name who measured it and when, replace it with a figure you measured, or delete it. The current workflow saves the brief before the body and requires every evidence item in the brief to reach the article.
No filler phrases
Keep a fixed bilingual list of empty openers and stock closings (the «in today's…» opener, «it's important to…», «delve…», «game-chang…», and the Spanish twins). Any hit fails. Fix: delete the phrase; if the sentence collapses, delete the sentence. Practitioner tips that turn Google's helpful-content docs into a reusable guidelines.md go in the same direction: Wu Chenmu's note on building a niche checklist and reusing it every write is a useful pattern, even when you encode the blocking lines in code.
Cannibalization hard stop
If the draft targets a topic that already has a page (or the same intent in different words), stop. This one should not be advisory. After two failed redrafts, mark the slot failed. Do not let the agent grind until the overlap is vaguely rephrased. We wrote a separate walkthrough for how to fix keyword cannibalization on a small blog.
Other useful checks: intro length, generic "Conclusion" closings, sentence variety, thin sections. Pick a small set and make the blocking ones boringly reliable.
Same draft, same verdict
That sentence is the whole claim for deterministic checks.
- No temperature on the checker.
- No "try again and see if the model likes it".
- No human editor re-scoring the same file differently on Friday.
If you paste the same Markdown twice, you get the same findings. A rewrite that only rearranges filler still fails. A rewrite that adds your measurement and puts the answer under the H2 can pass.
After two failed redrafts, stop. An agent that can retry forever will eventually produce something that looks green and still says nothing.
A public demo (optional)
If you want to feel the shape without building a checker tonight, there is a free AI slop checker that runs a slice of these ideas on any pasted draft. No account. Text is not stored. It does not rewrite your prose and it does not return an "AI detection score". It returns sentences that broke a named rule, with the rule and the fix. English and Spanish in the same pass. There is also a JSON POST at /api/slop if you want to wire it into a script.
That is a demo of editorial rules, and a complement to keyword placement, evidence banks, or cannibalization against your URLs. Those need your own pages and your own facts. For a broader Google-aligned pass, see our AI content quality checklist.
A short checklist you can steal
Even with zero new tools, brief an agent (or yourself) like this:
- Put the answer in the first sentence under every H2.
- Cite only numbers you can name (who, when) or delete them.
- Ban a fixed filler list; fail on any hit.
- Refuse a draft that overlaps an existing URL on the same intent.
- Run the same checker twice on the final file. If the findings change, your process is not deterministic yet.
Steal it into a repo as CONTENT_RULES.md if that is your culture. Or encode the blocking ones in a small script. The format matters less than the refusal to negotiate.
Where prompts still help
I still use prompts for tone and for "write like our docs". I do not trust prompts alone for pass or fail on SEO structure.
Where do you land? Pure prompts and a human skim? A markdown checklist? Real asserts in CI before a post can merge? I am especially curious if anyone fails a PR when a draft overlaps an existing slug.
If you want the agent you already pay for to write against a fixed checklist, try seodraft: the agent writes, the rules decide, and you approve.
