Skip to content

GitHub Action

The AEOrank GitHub Action runs in your CI pipeline and posts AEO scores as Check Runs and PR comments. Use it when you want full control over triggers, thresholds, and workflow configuration.

.github/workflows/aeorank.yml
name: AEO Score
on: [push, pull_request]
permissions:
checks: write
pull-requests: write
contents: read
jobs:
aeo:
runs-on: ubuntu-latest
steps:
- uses: vinpatel/aeorank-action@v1
with:
url: https://your-site.com
InputRequiredDefaultDescription
urlYesURL to scan
tokenNogithub.tokenGitHub token for API calls
fail-belowNo0Fail the Check if score drops below this value (0 = never fail)
fail-on-crawler-blockNotrueFail the PR if GPTBot is blocked. Check fails when GPTBot, ClaudeBot, PerplexityBot, or Google-Extended is disallowed in robots.txt. A missing robots.txt is unknown, not blocked.

Your workflow must declare these permissions:

permissions:
checks: write # Post Check Runs
pull-requests: write # Post PR comments
contents: read # Standard read access

On every push and pull request:

The Action runs aeorank-cli scan <url> --format json --no-files and posts the result as a Check Run with:

  • Crawler table first — GPTBot / ClaudeBot / PerplexityBot / Google-Extended → allow / block / unknown
  • Score and grade in the Check summary
  • Full 36-dimension breakdown table in the Check details
  • Conclusion: success (≥70), neutral (40–69), or failure (<40)
  • Crawler block always fails the Check (when fail-on-crawler-block is true), even if the overall score is high. The summary names which bot is blocked.

On pull requests only:

Posts a PR comment with the score and dimension table. Uses a hidden <!-- aeorank-score --> marker so re-runs update the existing comment.

Set fail-below to make the Check fail when the score drops below your threshold:

- uses: vinpatel/aeorank-action@v1
with:
url: https://your-site.com
fail-below: 70

PRs that drop the score below 70 will show a failing Check — blocking merge if you use branch protection rules.

- uses: vinpatel/aeorank-action@v1
with:
url: https://your-site.com
fail-on-crawler-block: true

That input is “fail the PR if GPTBot is blocked.” The CLI JSON fields crawlerAccess and crawlerGate are the contract; vinpatel/aeorank-action can consume them without guessing.

ScoreCrawler blocked?fail-below triggered?Conclusion
AnyYes (disallowed)❌ Failure (summary names the bot)
70–100NoNo✅ Success
40–69NoNo— Neutral
0–39NoNo❌ Failure
AnyNoYes (score < threshold)❌ Failure

Missing robots.txtunknown, not a crawler-block failure.

Speed up runs by caching npm:

steps:
- uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-npm-aeorank
- uses: vinpatel/aeorank-action@v1
with:
url: https://your-site.com

When a PR comes from a fork, GITHUB_TOKEN is restricted to read-only. The Action cannot post Check Runs or PR comments on fork PRs. Use pull_request_target as a workaround (see security implications).

GitHub ActionGitHub App
SetupAdd YAML workflow fileOne-click install
ControlFull — custom triggers, thresholdsAutomatic on every PR
Crawler blockfail-on-crawler-block✅ Fails the Check if GPTBot (or peer) is disallowed
fail-belowComing soon
Runs onYour GitHub Actions minutesAEOrank servers

The App fails on crawler block only. fail-below (score threshold) is Action-only until the App ships it.

Recommendation: Use the Action if you need fail-below thresholds or custom workflow logic. Use the GitHub App for zero-friction setup and crawler-block protection.