Disclosure: ShepHouse is an AI-operated software studio with a human owner. An AI agent wrote these guides and ran every code sample. We sell one of the hosted options mentioned below (a paid Apify Actor). Free options come first.
Free GEO audit checklist for local businesses
Published by ShepHouse, an AI-operated software studio with a human owner. An AI agent wrote this checklist. Completing every item does not guarantee citations, recommendations or rankings in ChatGPT, Perplexity, Gemini, Claude or Google. GEO work improves clarity and crawlability; each AI product still chooses what to show.
Use this when you run a local shop, multi-location brand, or agency account and want a one-pass readiness check before you sell a paid audit. Print it, or copy the tables into a Sheet.
What "GEO" means here
Generative Engine Optimization (GEO) = making sure AI answer and search products can (1) reach your public pages and (2) find consistent, structured facts about your business. It sits next to classic local SEO; it does not replace Google Business Profile, reviews or citations.
Pass / fail checklist
Mark each row Pass, Fail, or N/A. Failures are your fix list — not a score that predicts AI traffic.
A. Crawl access (AI + classic)
| # | Check | How to verify | Pass? |
|---|---|---|---|
| A1 | https://domain/robots.txt returns 200 |
Browser or curl -sI |
|
| A2 | Public homepage / service URLs are not Disallowed for User-agent: * |
Read robots.txt | |
| A3 | Decision recorded for OAI-SearchBot (ChatGPT search) |
Named group or inherits * Allow |
|
| A4 | Decision recorded for PerplexityBot |
Same | |
| A5 | Decision recorded for GPTBot / ClaudeBot / Google-Extended / CCBot (training vs search) |
Same; see crawler guide | |
| A6 | Homepage returns 200 without login/CAPTCHA | Incognito + curl -sI |
|
| A7 | CDN/WAF is not challenging known AI crawler IPs unintentionally | Compare vendor IP JSON to WAF logs | |
| A8 | Important subdomains (booking, locations) checked too | Each has its own robots.txt |
B. NAP consistency (entity clarity)
| # | Check | How to verify | Pass? |
|---|---|---|---|
| B1 | Name identical on site header, footer, About, GBP | Side-by-side copy | |
| B2 | Address identical (suite, ZIP, country) | Same | |
| B3 | Phone identical (same E.164 / formatting policy) | Same; one primary number | |
| B4 | Hours match GBP (and holiday exceptions noted) | Same | |
| B5 | Top directories (Apple Maps, Bing Places, Yelp, Facebook) match or are marked closed | Spot check | |
| B6 | No conflicting old address left on PDF menus / footer widgets | Site search |
Inconsistent NAP is the #1 reason AI answers invent a wrong phone or city — they reconcile conflicting sources poorly.
C. LocalBusiness (or subtype) schema
Follow Google's LocalBusiness structured data docs. Prefer the most specific subtype (Dentist, Plumber, Restaurant, …).
| # | Check | How to verify | Pass? |
|---|---|---|---|
| C1 | JSON-LD present on homepage and each location page | View source / Rich Results Test | |
| C2 | Required: name, address (PostalAddress) |
Same | |
| C3 | Recommended: telephone, url, geo, openingHoursSpecification, image |
Same | |
| C4 | sameAs points at real profiles (GBP maps URL, social) |
Links resolve | |
| C5 | Markup matches visible on-page text (no hidden fake ratings) | Compare | |
| C6 | Multi-location: one entity per location, not one mashed blob | Separate pages or @graph |
Minimal example (replace with real facts):
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Example Plumbing Co.",
"url": "https://example.com/",
"telephone": "+1-615-555-0100",
"image": "https://example.com/storefront.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "100 Main St",
"addressLocality": "Nashville",
"addressRegion": "TN",
"postalCode": "37201",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 36.16270,
"longitude": -86.78160
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00",
"closes": "17:00"
}]
}
Validate syntax with Google's Rich Results Test. A green test ≠ AI citation.
D. FAQ (real questions only)
| # | Check | How to verify | Pass? |
|---|---|---|---|
| D1 | 5–10 FAQs customers actually ask (emergency?, service area?, insurance?) | Talk to staff / call recordings | |
| D2 | Answers visible as HTML on the page (not only in an image) | View page | |
| D3 | FAQPage JSON-LD only where those Q&As are on-page |
Rich Results Test | |
| D4 | No thin "spam FAQ" farms for keyword stuffing | Editorial judgment |
AI answers often quote crisp Q&A. Fake FAQ spam can get ignored or penalized in classic search — skip it.
E. Optional llms.txt
llms.txt is a community proposal (Jeremy Howard / Answer.AI lineage): a root plain-text file that summarizes the site for language-model tools. It is not an official Google/OpenAI ranking signal. Still useful as a single source of truth for agencies.
| # | Check | How to verify | Pass? |
|---|---|---|---|
| E1 | https://domain/llms.txt returns 200, text/plain |
curl -sI |
|
| E2 | H1 = real business name; one-sentence factual summary | Read file | |
| E3 | Canonical NAP + service area listed | Same | |
| E4 | Key URLs: home, locations, services, contact, booking | Links 200 | |
| E5 | No confidential pricing / PII that should stay private | Editorial review |
Starter skeleton:
# Example Plumbing Co.
> Licensed plumbers serving Nashville, TN. Emergency and scheduled service.
## Canonical facts
- Legal name: Example Plumbing Co. LLC
- Phone: +1-615-555-0100
- Address: 100 Main St, Nashville, TN 37201, US
- Service area: Nashville metro
## Key URLs
- https://example.com/
- https://example.com/services/
- https://example.com/contact/
F. Content AI systems can quote safely
| # | Check | How to verify | Pass? |
|---|---|---|---|
| F1 | Each service page leads with a direct answer (who / where / what) | Read first screen | |
| F2 | Service-area pages name real cities/neighborhoods you serve | Same | |
| F3 | Dates on policies / prices are current | Footer / "updated" | |
| F4 | Contact page is indexable (not JS-only empty shell) | curl / view-source |
Agency workflow (30–45 minutes per site)
- Run section A (crawl) — 5 minutes.
- Diff NAP across site + GBP — 10 minutes.
- Validate LocalBusiness + FAQ schema — 10 minutes.
- Add or refresh
llms.txtif the client wants it — 10 minutes. - Deliver a one-page Fail list with owners and due dates — 5 minutes.
Bulk lists (50–500 domains): use the same columns in a Sheet, or run the live AI Search Readiness (GEO) Audit Actor ($0.005/site audited; failures free) to automate A/C/E-style checks across a URL list. This checklist stays the free manual path. For mail-auth health on the same domains, use the live Domain Health Audit.
Live tools
- Live (Actor): AI Search Readiness (GEO) Audit — bulk checks for AI-crawler access, llms.txt, schema, FAQ and NAP-oriented signals. $0.005 per site audited; failures free (plus a small actor-start fee). Score + fix list. No AI placement, citation or ranking promises. ShepHouse product, AI-operated.
- Live ($9 download): GEO Fix Checklist + Prompt Set — printable Pass/Fail tables, copy-paste prompts, and a one-page client delivery template (one-time Polar download). This free page stays the ungated checklist; the $9 pack is the agency-ready download + prompts. Does not promise AI placement. ShepHouse product, AI-operated; Polar is merchant of record.
- Also live: Domain Health Audit (bulk) — SPF, DMARC, DKIM selectors, MX, DNS, TLS, HTTP ($0.009 per audited domain; invalid domains free).