What is a content quality gate?
dokeo.co/blog/what-is-a-content-quality-gate
76overall
77SEO
86AEO
66GEO
Fix before it ships12 of 19 checks pass
internal_linkingNo contextual links found (internal or external)
Fixslopquestion-then-answer pattern found 2 time(s)
FixWe gate our own blog. Scored 17 October 2026 with the same engine you get, glossary rules, balanced strictness.
← Docs
Score every content change in a PR. Post a verdict comment. Block merge on FAIL or BLOCKER (a hard stop, e.g. a confidentiality leak) by default.
Add it to a workflow
The Action is public at rasulshaikh/dokeo-action. Get a key at /account/api-keys and store it as the repository secret DOKEO_API_KEY.
- 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
env:
PR_NUMBER: ${{ github.event.number }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Inputs: fail_on (blocker, fail, warning or optimization), min_score, on_error (pass, warn or block, default warn) and comment_pr. It applies the same rule as the CLI. To call the gate without the Action, use the REST API on /docs/api.
Sample PR comment
Dokeo Content Gate
| PASS | 4 |
| OPTIMIZATION | 1 |
| WARNING | 1 |
| FAIL | 1 |
| BLOCKER | 0 |
- - PASS content/posts/intro.md -- PASS (87/100)
- - FAIL content/posts/broken.md -- FAIL (38/100)
- - WARN content/posts/draft.md -- WARNING (62/100)