Skip to content
Dokeo
SEO
AEO
GEO
slop

Illustration: drafts move along a rail through a gate. Drafts that pass continue. One draft is held with the flagged checks internal_linking and slop.

For B2B content teams

AI writes. Rules decide. You approve.

Dokeo is the quality gate between AI drafts and publish, like CI for content. 19 core checks across SEO, AEO and GEO return one verdict, ship or fix, under 200 ms.

No account needed. Start free for 100 scans a month, or read the docs.

Works in the browser, the CLI and Claude. How Dokeo works

Who does each job

AI is fast and unaccountable. Rules are slow to write and always the same. People are the ones who answer for what ships. Dokeo gives each one only its own job.

AI writes.

Models draft the fix, one check at a time, and you see it as a diff. They never decide the verdict, and the gate re-scores whatever they write.

The intelligence engine

Rules decide.

19 core checks and your own brand rules, with no model in the path. The same text gets the same verdict, and you can replay it later to prove it.

The deterministic engine

You approve.

Fixes are suggestions until you accept them, and a passing draft goes to review. Dokeo never sends anything for you.

Decisions and approval

Drafting got cheap, and publishing did not.

More drafts than anyone can read before they go live. Dokeo is the check on every draft, the same way tests run on every commit.

  1. Teams draft faster than editors can read.Review becomes the bottleneck, so it gets skipped.
  2. Asking an AI to review gives a different answer every run.You can't block a build on a result that changes. Scoring has no model in the path.
  3. Answer engines now decide who gets seen.Structure, sourcing and schema matter as much as keywords. Dokeo scores search, answers and citation together.

Where Dokeo sits in your pipeline

Between the draft and the publish button. One verdict per draft, and the same answer every time you run it.

1

Send

Drafts arrive from the repo, the terminal, a script or an agent.

Pull request GitHub Action
Terminal CLI, pre-commit
Your script REST API
Claude, Cursor MCP server
2

Scan

Dokeo detects the content type and runs the checks that apply. Every check is documented, and the same draft always gets the same result.

19core checks
17 content types
SEOSearch
AEOAnswers
GEOGenerative
No model in the scoring path
3

Verdict

Each check returns its reason and its fix. The draft gets one verdict.

BlockerHard stop
FailFix first
WarningYour call
OptimizationA suggestion
PassShip it
4

Gate

You choose the threshold. Dokeo holds that line.

Block on your threshold PR check
Comment the fixes PR comment
Hold for review Review queue
Notify Signed webhooks

SEO, AEO and GEO in one verdict

Search engines rank pages, answer engines lift passages, and generative engines pick what to cite. Dokeo scores SEO, AEO and GEO together.

SEO
Search engine optimisation
Can search engines find, parse and rank it?
  • Near duplicate near_duplicate
  • Cannibalisation cannibalisation
  • Structure structure
  • Keyword coverage keyword_coverage
  • Schema markup schema_markup
  • Technical SEO technical_seo
  • Internal linking internal_linking
Our post77
AEO
Answer engine optimisation
Can an answer engine lift a clean answer from it?
  • Answer structure aeo
  • Readability readability
  • Grammar grammar
  • Entity density entity_density
  • E-E-A-T signals eeat
  • AI-slop detection slop
Our post86
GEO
Generative engine optimisation
Will a generative engine trust it enough to cite it?
  • Claim support claims
  • Generative trust geo
  • Citation quality citation_quality
Our post66

19 core checks, every one documented.Content rows in the catalog. Type-specific rules switch on for each of the 17 content types, so a changelog is not judged like a landing page.

Browse the checks reference

Landing page

6 rules on top of the 19 core checks. 1 can fail the draft on their own.

  • FlagA headline too long to read at a glancelanding_page.headline_length
  • FlagA headline that does not say what the reader getslanding_page.no_benefit
  • FlagNo testimonial, logo, rating or award (suggestion only)landing_page.no_social_proof
  • FlagOnly one kind of social prooflanding_page.weak_social_proof
  • FailNo call to actionlanding_page.no_cta
  • FlagCompeting calls to action instead of one primary actionlanding_page.too_many_ctas

Run the gate where you already ship

REST, the CLI and MCP are usable today. The GitHub Action is public as rasulshaikh/dokeo-action@v1. CI scans use the automated allowance on Growth and above. Change fail_on below to see what holds a merge.

name: Content Gate
on:
  pull_request:
    paths:
      - "**/*.md"
      - "**/*.mdx"

jobs:
  dokeo:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: rasulshaikh/dokeo-action@v1
        with:
          api_key: ${{ secrets.DOKEO_API_KEY }}
          content_type: blog
          paths: "**/*.md"
          fail_on: fail
          min_score: 70
          comment_pr: true
# Real scan of our own post, from web/lib/home-scan.json
# verdict WARNING
# overall 76, seo 77, aeo 86, geo 66
# flags: internal_linking, slop

curl https://api.dokeo.co/api/v1/scan \
  -H "Authorization: Bearer $DOKEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "...", "content_type": "blog"}'
{
  "mcpServers": {
    "dokeo": {
      "command": "dokeo-mcp-server",
      "env": { "DOKEO_API_KEY": "your-api-key" }
    }
  }
}
pip install dokeo
dokeo scan --file post.md --content-type blog
Real scan
What is a content quality gate?Warning 76
Overall76
SEO77
AEO86
GEO66
Flags on this post
  • internal_linkingNo contextual links found (internal or external)
  • slopquestion-then-answer pattern found 2 time(s)
fail_on
Merge allowed. Warning is better than fail_on: fail, so the check passes with a warning.
MCP exposes 15 tools, includingscan_contentscan_urlbatch_scanget_issuessuggest_fixeslist_content_typesMCP docsAction docs

Built so you can audit it

The claims on this page are the ones the security page already publishes. The longer write-up is there.

The same draft returns the same verdict.

Scoring is deterministic code. There is no model in that path, so a repeat of this post returns the same Warning and the same 76.

This scanWhat is a content quality gate?Warning 7619 checks

Where a draft goes

Site and app Vercel
Scoring API Modal, US East
Database Supabase Postgres, US East
Rewrites MiniMax first; OpenRouter, a custom endpoint, GLM, or Claude if configured, only when you ask
Payments Paddle (merchant of record)

Access

TLS (HTTPS) in transit via Vercel, Modal and Supabase. Data at rest is encrypted by those hosts. Stored credentials are also encrypted by Dokeo with Fernet (AES-128-CBC with HMAC). API keys are stored only as SHA-256 hashes and checked in constant time. Pixel tokens and webhooks are HMAC-signed. User-supplied URLs are SSRF-guarded before a fetch.

Row-level security

Row-level security is on for every Dokeo table, and a test fails if a table ships without it.

One region today

Single region, US. EU residency is not live, so this page does not claim it.

No SOC 2 report yet. Questions go to os@dokeo.co. Paid plans are available for Growth, Pro, and Scale. Payments are handled by Paddle, the merchant of record.

Read the security page

100 free scans a month

US dollars, the same tier table as the pricing page. Growth, Pro, and Scale are available to buy. Every plan runs the same checks; the tiers differ by volume and seats.

Annual billing is lower: Growth $63. Pro $223. Scale from $399. Paid plans are available for Growth, Pro, and Scale. Payments are handled by Paddle, the merchant of record.

Compare plans
Roadmap

Content is live today: 19 core checks across SEO, AEO and GEO. The same gate is built to work as a layer for other tools and agents, and the catalog already lists 44 checks for CRM, sales, GTM, marketing, RevOps, enrichment and pipeline. Those are on the roadmap. The data adapters are not connected yet.

Read the vision

Scan a draft before you publish

Scan a draft in the browser. Or book a walkthrough of the gate on a real workflow.