Browse the documentation

SEO / GEO pack: audit search visibility and readiness for AI answers

SEO / GEO: three agents audit search visibility and visibility in AI-generated answers (content quality, structured data, AI-readiness) with 15 commands. Install, keys, examples, limits.

On this page
  1. When to use it
  2. What is installed
  3. Quick start
  4. Copyable examples
  5. What it writes and where
  6. Data flows and prerequisites
  7. Limits and gotchas

The SEO / GEO pack audits a website for two things. SEO is visibility in search-engine results. GEO (generative engine optimisation) is visibility in the answers that AI assistants and AI overviews generate: whether their crawlers may read the site, whether the content and structured data are good enough to be quoted, and how ready the pages are for it. The pack brings three agents that share one command, /seo: Scout crawls and inspects, Judge assesses content, structured data and AI readiness, and Chief scores, plans and reports. It works with a small Python toolkit when one is available and falls back to a prompts-only mode when it is not, in which case it refuses to invent numbers.

When to use it

  • Before a launch or after a redesign, to catch indexing, canonical, redirect and security-header problems.
  • When organic traffic drops and you need a prioritised list of causes and a 30, 60 and 90-day plan.
  • To check whether AI crawlers can read the site, whether it has an llms.txt file, and how citable its passages are.
  • To benchmark your site against a competitor, or to track the score over time.

What is installed

SEO is a packaged pack: it lives in .agents/skills/pack-seo/ with the router SKILL.md (the skill is named seo-engine), the three agent files seo-scout.md, seo-chief.md and seo-judge.md, a checklist.md, a pagespeed-playbook.md, reference files in ref/, report templates, requirements.txt and the Python scripts in scripts/. The registry lists no separate skills for this pack.

Three agents, ten roles
AgentRolesWhat it does
SEO Scout (Technical Scanner)Crawler, Inspector, PhotographerCrawls and maps the site, runs nine categories of technical checks, takes mobile and desktop screenshots.
SEO Judge (Content & AI Analyst)Content Expert, Schema Master, GEO AnalystGrades E-E-A-T and content quality, validates structured data, measures AI-search readiness.
SEO Chief (Strategist & Reporter)Scorer, Strategist, Reporter, BenchmarkerComputes the SEO Health Score, prioritises issues, writes the plan and the fixes, reports, compares, benchmarks.

The 15 /seo commands

Command router
CommandAgentAction
/seo full <url>Scout, Judge, ChiefAll six phases
/seo quick <url>Scout, Judge, ChiefPhases 1 to 4 only
/seo technical <url>Scout (Inspector)Phase 2 technical checks only
/seo content <url>Judge (Content Expert)Phase 2 content checks only
/seo geo <url>Judge (GEO Analyst)AI-search readiness (phase 3)
/seo schema <url>Judge (Schema Master)Structured-data detection and validation
/seo images <url>Judge (Content Expert)Image audit subset
/seo hreflang <url>Scout (Inspector)Hreflang audit
/seo pagespeed <url>Scout and ChiefPageSpeed perfection loop
/seo plan <type>Chief (Strategist)Strategic plan for saas, ecommerce, local, publisher or agency
/seo fixChief (Strategist)Generate fixes from the last audit
/seo historyChief (Reporter)Show the score history
/seo compareChief (Reporter)Compare with the previous audit
/seo competitor <url1> <url2>Scout, Judge, ChiefBenchmark two sites
/seo api <url>A scriptGoogle APIs: PageSpeed, CrUX, mobile-friendly test

The six phases of a full audit

  1. Reconnaissance: fetch the home page, crawl to a depth of 2 and at most 25 pages, detect the business type (SaaS, e-commerce, local, publisher, agency), look for robots.txt, sitemap.xml and llms.txt. A checkpoint asks whether to continue.
  2. Deep scan, run in parallel: Scout checks nine technical categories (crawlability, indexability, security, URL structure, mobile, Core Web Vitals, structured-data detection, JavaScript rendering, IndexNow) while Judge checks E-E-A-T, content quality, schema and images.
  3. AI readiness: access for GPTBot, ClaudeBot and PerplexityBot, llms.txt, passage citability (blocks of 134 to 167 words), and an AI Readiness Score from 0 to 100.
  4. Scoring: the SEO Health Score from 0 to 100, only when every weighted category has verified inputs.
  5. Action plan: issues classed critical, high, medium or low, quick wins, a 30, 60 and 90-day roadmap, generated fixes (meta tags, JSON-LD, robots.txt, llms.txt). A checkpoint asks whether to apply fixes. A PageSpeed loop can follow.
  6. Monitoring, optional: save the results under .bmad-seo/history/ and compare with the previous audit.
SEO Health Score weights
CategoryWeight
Technical SEO20 %
Content & E-E-A-T22 %
On-Page SEO18 %
Schema10 %
Performance (Core Web Vitals)12 %
AI Readiness (GEO)12 %
Images6 %

Quick start

  1. Install the pack

    Core is added automatically. Prompts-only mode needs nothing else.

    In your project terminal
    npx bmad-plus install --packs seo

  2. Optional: provision the Python toolkit

    With --provision-python the installer builds an isolated environment in .bmad/venv/seo/ (it needs Python 3.11 or newer, or uv, which can fetch one) and checks that requests, bs4, defusedxml and lxml import. It is opt-in.

    In your project terminal
    npx bmad-plus install --packs seo --provision-python

  3. Optional: set a Google API key

    Needed only for live PageSpeed and CrUX data. The key is free and read from the environment; it is sent in a request header, never in a URL.

    In your project terminal
    $env:GOOGLE_API_KEY = "your-key"

  4. Run a first audit

    Replace the address with the site you are allowed to audit.

    In your project terminal
    SEO Scout, run a quick audit of https://example.com (the /seo quick route, phases 1 to 4).

Copyable examples

Run the full six-phase audit

Use it on a site you own or are mandated to audit. Scout, Judge and Chief work in sequence.

In your AI assistant
SEO Scout, run the full six-phase audit of https://example.com (the /seo full route). Stop at each checkpoint so I can decide whether to continue.

What you should get Phase 1 ends with a discovery summary and the question "Continue with full audit?". Then come the deep scan, AI readiness and scoring, and the action plan, which pauses with "Apply fixes automatically?". If Python is not available, the audit says "prompts-only mode" up front, marks missing data unverified and leaves out any score whose inputs are incomplete, including the overall SEO Health Score.

Technical inspection only

Use it when you suspect indexing or infrastructure problems and do not need the content review.

In your AI assistant
SEO Scout, run the technical route (/seo technical) on https://shop.example. We moved to a new platform last Friday and pages are dropping out of Google: check robots.txt, noindex directives and canonical tags first.

What you should get Scout acts as Inspector and returns a technical report over nine categories, with issues sorted into critical, high, medium and low. Core Web Vitals are judged from the source when no live API data exists, and INP is used rather than the retired FID.

Audit a multilingual site’s hreflang

Use it for sites with several languages or regions, such as /fr/ and /de/ variants.

In your AI assistant
SEO Scout, audit the hreflang annotations of https://example.com (the /seo hreflang route). The site has /fr/ and /de/ versions: check that every page links back to its translations and that x-default is set.

What you should get Scout checks self-referencing tags, return tags and x-default against the pack’s hreflang rules and reports the pages that break them.

Validate structured data

Use it before and after you add JSON-LD. Judge acts as Schema Master.

In your AI assistant
SEO Judge, validate the structured data of https://example.com/pricing (the /seo schema route) and tell me whether any type is deprecated or missing.

What you should get A schema report: what was found, in which format, whether each type is valid and not deprecated, and which missing opportunities are worth adding. Judge recommends JSON-LD, flags retired types, and can generate compliant snippets.

Measure AI-search readiness

Use it to decide what to change so assistants can read and quote your pages. Judge acts as GEO Analyst.

In your AI assistant
SEO Judge, run the GEO route (/seo geo) on https://docs.example. Can GPTBot, ClaudeBot and PerplexityBot read our documentation, and would an llms.txt help?

What you should get A GEO report: which AI crawlers robots.txt allows or blocks, whether llms.txt exists and is well-formed, how many passages fit the citable 134 to 167 word range, and the AI Readiness Score, shown only when its inputs were verified.

Raise the PageSpeed scores one fix at a time

Needs GOOGLE_API_KEY for live scores. The target is 100 in all four Lighthouse categories.

In your AI assistant
SEO Chief, with SEO Scout, run the PageSpeed loop (/seo pagespeed) on https://example.com/landing. My GOOGLE_API_KEY is set. Fix one issue at a time and re-test after each.

What you should get Scout and Chief loop: measure, fix one issue, re-test, confirm the improvement, move to the next, following the pack’s PageSpeed playbook and checklist. Without a key, the agents say live scores are unavailable instead of estimating them.

Get a plan for your type of site, then the fixes

Run it after an audit. Plan types are saas, ecommerce, local, publisher and agency.

In your AI assistant
SEO Chief, the audit of our site is done. Write the strategic plan for a SaaS site (the /seo plan saas route), then turn that audit into ready-to-apply fixes (/seo fix).

What you should get Chief writes a strategic plan for a SaaS site (pricing pages, feature comparison, trial calls to action, documentation SEO). Then /seo fix turns the last audit into ready-to-apply changes: optimised title and description tags, JSON-LD built from the pack templates, an improved robots.txt and an llms.txt.

Benchmark a competitor and track progress

Use it when you want a side-by-side read, or after a second audit to see deltas.

In your AI assistant
SEO Chief, benchmark https://example.com against https://competitor.example (the /seo competitor route) and tell me where the rival is ahead. If I saved earlier audits, also show how our score has moved.

What you should get Chief runs a full audit on both sites and compares scores with deltas (SEO score, E-E-A-T, schema types, GEO score, PageSpeed), then lists the gaps where the rival is ahead, your advantages and what to prioritise. Score history exists only if earlier audits were saved under .bmad-seo/history/ by the optional monitoring phase (phase 6 of a full audit); then /seo history and /seo compare can show the evolution, and without a saved audit there is nothing to compare.

What it writes and where

Files the SEO pack can create
PathProduced byContent
.bmad-seo/history/<domain>-<date>.jsonPhase 6 (monitoring)Scores by category and the issue list, for history and comparison
seo-report.htmlscripts/seo_report.pyHTML report from an audit JSON file, default file name; used only when every score is verified
screenshot.pngscripts/seo_screenshot.pyDefault output name of a page screenshot (--output changes it)
.bmad/venv/seo/install --provision-pythonThe isolated Python environment

Data flows and prerequisites

  • Runtimes: Node.js 20 for the installer; Python 3.11 or newer only if you want the toolkit (otherwise prompts-only mode). Python packages: requests, beautifulsoup4, defusedxml, lxml.
  • Off-machine flows: seo-site-fetch (the crawl contacts the site you audit; addresses are checked against server-side request forgery and pinned), seo-google-apis (PageSpeed, CrUX and the mobile-friendly test, with your GOOGLE_API_KEY sent in the x-goog-api-key header), seo-screenshot (the browser reaches only the audited host) and python-provision (installing the packages, opt-in).
  • The pack carries the compliance tag GDPR because Google Analytics or Search Console data can contain personal data; handle such exports under your own rules.

Limits and gotchas

Warning No data, no score

In prompts-only mode, or when a category could not be checked, the agents mark it unverified. They never substitute zero or reweight the other categories, so an incomplete audit shows coverage (pages and checks reviewed, sources, unverified items) instead of an overall number.

Note Screenshots need a browser you install yourself

requirements.txt keeps Playwright commented out, and --provision-python only verifies requests, bs4, defusedxml and lxml. For seo_screenshot.py, install playwright and Chromium in the same environment yourself. Third-party resources are blocked during a capture and listed as blocked_requests, so a missing CDN image is an effect of the capture, not a site defect.

Note Ask in plain words: the /seo names are routes, not slash commands

The /seo ... names are the pack’s own router vocabulary. The pack does not register them as slash commands in your AI client, so typed alone they may be answered with an unknown-command message. Write a plain request to an SEO agent and name the route inside the sentence, as the examples above do. For an audit, ask for the full route (all six phases) or the quick route (phases 1 to 4); the router has no bare audit route.

Note Provenance

The SEO Audit 360 base was written by Laurent Rochetta at Oveanet, his company, and integrated into BMAD+.

See also