# /local-seo-audit

> Backed by `.claude/context/ai-seo/playbook/01-local-seo-audit.md` (+ `00-field-notes.md`).


# /local-seo-audit — AI-Powered Local SEO Audit

Backed by `.claude/context/ai-seo/playbook/01-local-seo-audit.md` (+ `00-field-notes.md`).
Method source: Caleb Ulku, "AI SEO Mastery Pro". Shared I/O runner: `ACME Agency/scripts/seo_run.mjs`.

## When to trigger

- "Run a local SEO audit for ACME Agency", "audit the SEO for this business", "/local-seo-audit ACME Agency"
- A prospect/client asks "why aren't we ranking on Google Maps / locally?"
- Before pitching SEO as a service, or kicking off a new SEO retainer (pairs with `/seo-site-structure` next).

NOT for: paid ads diagnosis (that's `media-buyer` / `/meta-ads-analyze`), or content writing (that's `/seo-content`).

## What it produces

A Google Doc in `Klijenti/<Client>/SEO/` titled "Local SEO Audit — <Client>", with:
1. **Snapshot** — business, location, site, primary services, current GBP signals seen.
2. **Competition assessment** — is this niche+location winnable? (uses the playbook's low-competition signals).
3. **Technical audit** — findings against the playbook checklist (indexability, speed signals, mobile, title/meta, NAP, internal linking, schema presence).
4. **GBP gap analysis** — what's missing/weak vs the GBP playbook (categories, description, services, posts, ACME Agencyws).
5. **Core 30 / content gap** — how far the site is from the Core 30 structure (topical + geographic relevance).
6. **AI-visibility gap** — is the business present in ChatGPT / AI Overviews / Bing (quick GEO read).
7. **Prioritized 30/60/90-day plan** — ordered actions, each tagged with the skill that executes it.

## Step-by-Step

### 1. Parse the request
- First positional = client/business name. Flags: `--url`, `--location` (city/region), `--gbp` (profile name), `--dry-run` (no Drive/Slack — print only).
- If no URL and the client isn't in `clients.json` with a website, ask the user for the site URL and the target city. Don't guess.

### 2. Gather context (script)
```bash
node ACME Agency/scripts/seo_run.mjs --skill local-audit --mode gather \
  --client "<name>" --url "<url>" --location "<city>"
```
This prints a JSON CONTEXT block: resolved business facts (Slack channel, Drive folder), client notes, and the scraped site (homepage title/description/markdown + key pages). Read it.

### 3. Read the method
- Read `.claude/context/ai-seo/playbook/01-local-seo-audit.md` in full (path is in the CONTEXT `playbook` field).
- Skim `.claude/context/ai-seo/playbook/00-field-notes.md` for real-world gotchas (proximity ceiling, visible-address rule, "every URL needs a backlink", phone-answer-rate signal).
- For the GBP / structure / AI-visibility gap sections, also glance at playbooks `02`, `04`, and `03` so the gaps are framed in those skills' terms.

### 4. Do the audit
Working from the scraped site + the playbook, write the deliverable as **markdown** (use `#`/`##`/`###`, bullet lists, and pipe tables). Be specific and evidence-based — cite what you actually saw on the site. Apply the playbook's rules literally:
- **Topical before geographic** — flag if the site is chasing city terms without topical depth.
- **GBP proximity ceiling** — if location targeting exceeds the GBP's real address reach, say so and set expectations.
- **Competition** — give a clear winnable / hard / very-hard verdict with reasons.
- Every recommendation must map to one of: `/gbp-optimize`, `/seo-site-structure`, `/seo-content`, `/seo-schema`, `/seo-backlinks`, `/ai-visibility`. Tag each action with its skill.
- End with the 30/60/90 plan as a table: `| Phase | Action | Skill | Expected impact |`.
Write it to a temp file, e.g. `ACME Agency/clients/<Client>/SEO/audit.md` (create the folder) or `/tmp/seo-audit.md`.

### 5. Save + report (script)
```bash
node ACME Agency/scripts/seo_run.mjs --skill local-audit --mode save \
  --client "<name>" --in "<path to audit.md>" \
  --title "Local SEO Audit — <Client>" \
  --slack "*Local SEO Audit — <Client>*
Competition: <one-word verdict>. Top 3 priorities: <a>, <b>, <c>."
```
- The script creates the Google Doc in the client's Drive `/SEO` folder and posts the summary + Doc link to the client Slack channel (one message — no progress chatter).
- With `--dry-run`, append `--dry-run`: it prints what it would do and skips Drive/Slack.
- Output the Doc link to the user immediately.

## Guardrails
- **Recommend-only.** Never edit the live site, GBP, or DNS. This skill diagnoses and plans.
- **No invented data.** If you couldn't see the GBP or rank data, say "not verified" rather than asserting. Pull before hypothesizing (Diagnosis Protocol).
- **Croatian/Bosnian clients:** any client-facing prose in the Doc follows the no-em-dash / no-AI-tell rules in root CLAUDE.md.
