Verify AEO conformance of any URL against the AEO Specification v1.0 in one GitHub Actions step.
name: AEO Conformance
on:
pull_request:
push:
branches: [main]
jobs:
aeo:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: dodopayments/dualmark-verify-action@v1
with:
url: https://staging.example.com/blog/your-post
level: standard| Input | Required | Default | Description |
|---|---|---|---|
url |
✅ | — | URL to verify for AEO conformance |
level |
— | standard |
Minimum level: basic, standard, or advanced |
fail-on-regression |
— | false |
Fail if score drops below previous run |
comment-on-pr |
— | false |
Post a sticky PR comment with results |
artifact-name |
— | aeo-report |
Artifact name for the uploaded report (use unique names for multi-URL workflows) |
| Output | Description | Example |
|---|---|---|
score |
Numeric score achieved | 105 |
max |
Maximum possible score | 125 |
level |
Conformance level | standard |
| Level | Required Score | Checks |
|---|---|---|
| Basic | ≥ 60% | Markdown twin reachable, Content-Type, X-Markdown-Tokens, X-Robots-Tag: noindex, Vary: Accept, non-empty body |
| Standard | ≥ 80% | All Basic + HTML rel=alternate, Accept-header negotiation, 406 for unacceptable Accept |
| Advanced | ≥ 95% | All Standard + AI agent UA detection, X-AEO-Version, nosniff |
- uses: dodopayments/dualmark-verify-action@v1
with:
url: https://example.com/blog/hello
level: basic- uses: dodopayments/dualmark-verify-action@v1
with:
url: https://staging.example.com
level: standard
comment-on-pr: true- uses: dodopayments/dualmark-verify-action@v1
with:
url: https://staging.example.com
level: standard
fail-on-regression: true
comment-on-pr: trueThe action downloads the previous run's aeo-report artifact and compares scores.
- First run: no previous artifact exists — skips regression check
- Re-run: if current score < previous score — fails with
::error:: - The artifact is then overwritten with the new result for the next run
The action uploads aeo.json as a build artifact (aeo-report). Download in downstream jobs:
- uses: actions/download-artifact@v4
with:
name: aeo-report
- run: node -e "
const r = JSON.parse(require('fs').readFileSync('aeo.json','utf8'));
console.log('Score:', r.score, '/', r.max, 'Level:', r.level);
"pull-requests: write— required forcomment-on-pr: trueactions: read— required for artifact download (regression detection)actions: write— required for artifact upload