GitHub Actions SEO Audit: Fail the Workflow on Red Lights
A GitHub Actions SEO audit fails the runner job on JSON red lights. Keep secrets in the store, not the YAML file, then parse --format json on the runner.
Author credentials: William Zhu is cofounder of InfiniSynapse (GitHub @allwefantasy). Desk: shipping SEO Health and the /en/tool/ visibility pages. No personal LinkedIn published. About: team / editorial standards · Vision.

On this page
By William Zhu · Cofounder, InfiniSynapse · Last updated: 2026-09-10 · Last verified: 2026-09-10 · Methods:
infinitegrowth@0.1.1;seo-health check --format json --lang enon two public URLs (2026-09-10). CLI exited 0 on both, including a URL whoseissues[].statusincludederror. The job, not the binary, must map those errors to a non-zero exit. Secret-location matrix stays illustrative. Deep commands need a CLI key and credits. Not an official Google score. Third-party AI mention logs were not run.
Author / off-site profiles: GitHub @allwefantasy · auto-coder · GitHub @InfiniSynapse · LinkedIn company (no personal profile) · Editorial standards. No personal LinkedIn or vendor badge. Product recognition: SEO Health Checker is one of two first-prize works in the InfiniSynapse × CSDN Vibe Coding contest (published contest results). InfiniSynapse co-hosted the contest. That list is not a review of this article.
Reviewed by: InfiniSynapse Data Team · method review 2026-09-10. First-party method review, not a third-party award.
Trust / COI: About · Corrections · Publishing principles · Privacy · Terms. SEO Health is commercial. InfiniSynapse co-hosted the Vibe Coding contest that named SEO Health Checker a first-prize work. The CLI artifact table is observed. The secret-location matrix is illustrative. The InfiniSynapse Data Team publishes this desk method.
TL;DR
A GitHub Actions SEO audit is a runner job that installs infinitegrowth, calls seo-health check on the public preview URL, writes --format json, and fails when title, meta, headings, density, images, links, tech, or speed lights go red. The YAML names the job. The secret store holds any CLI key. The JSON file is the only contract the job may parse.
Direct answer: A GitHub Actions SEO audit fails the Actions job the same way a unit test fails it.
check,audit, andlinksrun without login.eeat,aivisibility, andgscneed a CLI key plus credits. Traffic lights are not a Google 100. Do not paste a key into the YAML.
Paste a public URL at aimeetup.center/seo-tools#check if you only needed the eight lights in a browser tonight.
We evaluate a GitHub Actions SEO audit hands-on as the InfiniSynapse Data Team. We build InfiniSynapse only for credited deep commands, not for the default pull-request check.
What a GitHub Actions SEO audit actually is
Key Definition: A GitHub Actions SEO audit is a named job in an Actions YAML file that runs seo-health on a public preview URL, emits --format json, and exits non-zero on a required red light. Secrets live in the repository secret store. The YAML must not contain a CLI key. The job is not an official Google health score.
Independent citation: According to [Understanding GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions), GitHub Actions runs jobs as steps on a runner you configure in a workflow file. GitHub's Understanding GitHub Actions page is the third-party rule this write-up holds to. Illustrative desks below are not that rule.
People search GitHub Actions SEO audit when a pull request already has tests and someone asked why the preview still shipped a blank title. That is a job-file question, not a dashboard question.
GitHub’s own Understanding GitHub Actions page treats a job as steps on a runner you already control. A GitHub Actions SEO audit is one more job on that runner. It is not a weekly slide, and it is not a crawl of 500 pages on every commit.
Install with npm i -g infinitegrowth. The binary is seo-health. The install notes live on the command-line install page; this page does not retarget that old phrase. If you only need a human pass on one URL, the SEO health checker hub is the browser sibling, not the job.
YAML is not a secret store
A GitHub Actions SEO audit that puts a CLI key in the YAML will leak on the first fork, the first log paste, and the first “quick debug” commit. check needs no key. Deep commands do. GitHub’s Using secrets in GitHub Actions page is the store you already have: repository, environment, or organization secrets, referenced as ${{ secrets.NAME }}. If you must call eeat, aivisibility, or gsc, put the key there and let the runner inject it. Do not echo the value.
Eight lights, one exit code
The GitHub Actions SEO audit inherits the same eight modules the web checker uses: title, meta, headings, density, images, links, tech, and speed. Chrome can finish the local modules unless you start AI EEAT. The job’s only extra duty is to read JSON and exit non-zero.
A secrets-store-first framework
Treat a GitHub Actions SEO audit as three layers: the YAML that names steps, the secret store that may hold a CLI key, and the JSON parser that fails the job. Reverse that order and you will either leak a key or merge a red title.
Wikipedia’s continuous integration article is the reason the job exists: every change gets the same checks before merge. A GitHub Actions SEO audit applies that rule to extractable title and heading strings. If the preview ships a blank title, the pull request fails before production.
seo-health calls aimeetup.center. Deep commands use the same credits and long-task API. JSON is for the gate.
That is the InfiniSynapse boundary. The rule engine that colors the eight lights stays on aimeetup. The signed-in account spends credits only when someone opts into EEAT, visibility, or GSC narrative. The job must not send unsanitized exports or secrets.
The pillar hub that keeps the merge rule as the product is the SEO CI/CD page. This article stays on the GitHub Actions SEO audit question: YAML, store, JSON.
Why the store sits outside the YAML
Google’s SRE book is a reminder that operations fail on the boring controls, not on the slogan. A GitHub Actions SEO audit that stores the key in YAML fails that review on day one. The store is the control. The YAML is the recipe.
If the job only runs seo-health check, you may not need a key at all. That is the cheapest honest GitHub Actions SEO audit. Add a key only when a release job opts into a credited command.
JSON as the fail contract
--format json is the contract. A table is for the pull-request comment. The GitHub Actions SEO audit parser should read onPage[].status and issues[].status and fail on error. If your job greps English sentences, it will break the first time a label changes.
GitHub’s workflow syntax is the citable fail rule: a step that exits non-zero fails the job. The binary will not do that work for you. Map a required error to that exit.
Reproducible contract (verified 2026-09-10 on infinitegrowth@0.1.1): seo-health check <url> --format json writes url, page.title, onPage[], and issues[]. Observed status values were good, warning, error, and missing. check, audit, and links run without login. eeat, aivisibility, and gsc need a CLI key plus credits. Do not invent a composite Google 100. The secret-location matrix below stays illustrative.
If you need the file-shape vocabulary without the Actions YAML, open the JSON SEO report guide after you accept that the artifact is the gate.
GitHub Actions SEO audit versus a comment-only job
A comment-only job posts a table and stays green. A GitHub Actions SEO audit exits non-zero on a required red. Those are different products. Do not sell the comment as the audit.
Use a GitHub Actions SEO audit when the pull request must not merge on a red title. Use a comment bot when you want humans to read ambers. You may run both. The comment must not replace the exit code.
The NCSC guidelines for secure AI system development treat secrets, logs, and supply-chain steps as design inputs, not afterthoughts. A GitHub Actions SEO audit that prints a CLI key into the job log fails that bar even if every light is green.
If the second runner in the room is GitLab, read the GitLab CI SEO check page for that job file. This page stays on Actions YAML.
Landscape of Actions jobs in 2026
Calling check on one preview URL is cheap because the unit is one URL. A 500-page audit on every commit is a quota conversation.
Eight modules still sit on that URL. Traffic lights are not a Google 100. Keep audit --pages 50–500 on a schedule unless policy says otherwise.
OWASP’s Top 10 for Large Language Model Applications is the reason you do not paste customer GSC exports into a prompt or a log. A GitHub Actions SEO audit that calls gsc must stay limited to the export window you already uploaded, and it must not echo the file.
Preview URL versus production host
Point the GitHub Actions SEO audit at the public preview URL the pull request already built. Do not point it at a cookie-gated host or at production to admire last week’s deploy. The job is there to stop the merge.
If pages are not in the index, no job will invent impressions. Read website indexation before you treat a green check as traffic.
If you need the package name without the YAML, open infinitegrowth npm.
How to fail the Actions job on JSON red
This is the four-step GitHub Actions SEO audit. The preview URL must exist before step 2.
Step 1 — Write the Actions YAML without secrets
Create the job file. Name the job. Pin the runner image you control. A GitHub Actions SEO audit YAML may reference ${{ secrets.SEO_HEALTH_KEY }} for a credited command. It must not contain the value.
Use a public preview URL from the pull request. Do not hard-code a staff cookie. Do not check in a .env next to the YAML.
Step 2 — Install infinitegrowth on the runner
Run npm i -g infinitegrowth on that runner. Confirm seo-health is on PATH. A GitHub Actions SEO audit does not require login for check. Do not commit a personal CLI key into the repository.
Step 3 — Run seo-health check --format json
Call seo-health check <preview-url> --format json and write the file to the job artifacts. Use the same eight modules the browser paste uses at aimeetup.center/seo-tools#check. If you need a sitemap sample, schedule seo-health audit --pages 50 on a different job, not on every commit.
Keep links for a nightly dead-link pass.
Step 4 — Fail the job on a red light
Parse onPage[].status and issues[].status. Map required error values to a non-zero exit. seo-health check can exit 0 while the artifact still lists errors. The job is finished when the pull request cannot merge. A comment that says “please look” is not a gate. Warn-only density rules are allowed if you document them; silent greens are not.
Independent citation 2: According to [Using secrets in GitHub Actions](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions), GitHub documents repository, environment, and organization secrets as the store for workflow secrets. A second independent source, from GitHub, keeps this page claim from resting only on first-party lights.
Desk sample: job outcome by secret location
Observed CLI artifact (2026-09-10)
This block is observed, not illustrative. We ran npx seo-health check <url> --format json --lang en from infinitegrowth@0.1.1 against two public hosts (DESK-IG802-20260910A). The process exited 0 on both. A GitHub Actions SEO audit that stops after the binary will merge the error row.
| URL (observed) | page.title | issues[].status = error | CLI exit | Parser must exit |
|---|---|---|---|---|
https://infinisynapse.com/en/blog/data-agent-memory | Present | None (Image Alt Text = warning) | 0 | 0 if you only fail on error |
https://example.com | Example Domain | Meta Description, Robots.txt, Sitemap.xml | 0 | 1 |
Name the job file .github/workflows/seo-health.yml if you do not already have one. Pin infinitegrowth@0.1.1 or later. Parse the artifact. Do not treat exit 0 as “no errors.”
The next table is an illustrative InfiniSynapse desk log, not a customer result. Two dimensions: secret location × job outcome (DESK-IG802-20260909A).
| Secret location (illustrative) | check login | Job A (title green) | Job B (title red) | Key visible in YAML |
|---|---|---|---|---|
None — check only | No | Pass | Fail | No |
| Repository secret store | Only if deep command | Pass | Fail | No |
| Key pasted in YAML | Yes, leaked | Pass, then rotate | Fail, then rotate | Yes |
| Key echoed in logs | Yes, leaked | Pass, then rotate | Fail, then rotate | In the log |
A GitHub Actions SEO audit on this desk kept the key out of YAML. Job B failed check on a red title: one URL, one JSON file, one blocked merge. First-party desk counts stay illustrative.
Figure: illustrative grouped bars — secret location × job outcome. Two dimensions. Not a Google score and not a customer lift.
If Job B is green while the title is red, the parser is wrong.
Selection scorecard
Score each row 0–2 when someone asks for a GitHub Actions SEO audit today.
| Question | 0 | 1 | 2 |
|---|---|---|---|
| Does the YAML contain a CLI key? | Key in the file | Key in a comment | Key only in the store, or no key |
Is the command seo-health check on the preview? | Production-only crawl | Homepage only, after merge | Preview URL on the pull request |
Is --format json parsed? | Screenshot of a table | JSON attached, still always green | JSON parsed, red fails the job |
| Are deep commands optional? | eeat on every push | Deep commands on every release | Deep commands scheduled, check default |
| Will a red title block merge? | Comment only | Required check, ignored | Required check, enforced |
Under 6 means you have a comment bot. 8–10 means write the YAML and fail the job.
Failure modes that leak a key
The first failure is selling a GitHub Actions SEO audit as a screenshot of the web UI. The YAML is the product. The JSON is the contract.
The second failure is treating 500 audit pages as a trophy. If the homepage title is already red, fail check and stop.
Putting the CLI key in YAML
A key in the job file will leak. A GitHub Actions SEO audit that needs eeat, aivisibility, or gsc must read the key from the secret store. check needs no key. If your YAML contains a token, rotate it and remove the line.
Treating a comment as a gate
A comment is useful. It is not the gate. The job must still exit non-zero on the reds you named.
Cluster guides for this pillar
This page is the Actions YAML job.
| Job you actually have | Guide to open next | What this page will not do |
|---|---|---|
| Learn the merge gate as the product | SEO CI/CD (hub) | Retarget the hub phrase as this page’s keyword |
| Need the same lights on GitLab | GitLab CI SEO check | Clone the .gitlab-ci.yml file here |
| Need the file-shape vocabulary | JSON SEO report | Turn the table view into the gate |
| Need the package name only | infinitegrowth npm | Retarget a command-line brand name |
| One URL, eight lights in a browser | SEO health checker | Finish in 30 seconds on a single paste |
Keep the GitHub Actions SEO audit as the failed job, not the comment.
Fail the Actions job when the JSON lights go red
Paste the public preview URL at the live checker, then put the same eight lights behind seo-health check --format json on the runner.
Inspect the complete Github Actions SEO Audit page
Paste a sanitized URL into the InfiniSynapse SEO Health Checker so every title, mention, citation, and on-page layer can be reviewed together. Then validate the findings on the live page.
Open SEO Health CheckerRemove credentials, secrets, personal data, and sensitive literals.Frequently Asked Questions
Does the job need a login for check?
Bottom line: No. The job can run seo-health check without login. audit and links also run without login. eeat, aivisibility, and gsc need a CLI key and credits. Default the pull-request job to check.
Where do secrets live if not in YAML?
Bottom line: In the repository secret store, injected as environment variables the runner already supports. The YAML may reference a secret name. It must not contain the value. If you only run check, you may not need a secret at all.
Can I run audit --pages 500 on every pull request?
Bottom line: You can, but you usually should not. Keep check on the pull request and keep audit --pages 50–500 on a schedule. A large sample with a red title is still a fail.
Is the light an official Google score?
Bottom line: No. The job emits traffic lights for eight modules. Those lights are not a Google 100 and not an official EEAT grade. Do not print a fake score on the badge.
Conclusion
A GitHub Actions SEO audit is a failed Actions job on a red light. Write the YAML without secrets. Install infinitegrowth. Run seo-health check without login. Emit --format json. Block the merge. Keep credit commands off the default pull request. Keep Google scores out of the badge.
Open the InfiniSynapse web app only if you need that signed-in account. Fail the job. Do not negotiate the light.
William Zhu · Cofounder, InfiniSynapse · GitHub @allwefantasy
Desk-validated SEO Health methods. Corrections: zhuhl@infinisynapse.com · corrections policy.