I run a web design + local SEO studio out of Greenville. Most of my prospecting work is cold-walking the same business types — dentists, plumbers, contractors, restaurants, family law offices — and the conversations all start the same way: “How would I know if my website is actually working?”
So I built a tool that grades it. Twenty-five Eastern NC small-business websites pulled from my own lead list, run through the same audit I’ll run on yours if you ask. Mobile fit. Load speed. Schema markup. Whether ChatGPT, Perplexity, or Google’s AI Overview names them when you ask about their category in their town.
This is the first batch. I’ll run another twenty-five in a month. The numbers don’t lie about where the field is.
The headline finding
Zero of the twenty-five businesses appeared in Google’s AI Overview when I asked the obvious “best [their category] in Greenville NC” question. Not one.
That’s not “most of them missed it” — that’s none of them. The AI Overview either named other businesses (national chains, directories, or out-of-town competitors), or it didn’t trigger at all because no source on the open web has written about Greenville’s [dentists / restaurants / plumbers] in a way an LLM can extract.
If your customers are starting their searches in ChatGPT or Perplexity — and ~13% of Americans now do, climbing — you are invisible. This is the gap that every conversation in Greenville is going to be about over the next twenty-four months.
The full numbers
Twenty-five sites, sampled across thirteen verticals from my prospect list. Three failed to load entirely (one SSL cert problem, two timeouts). Of the twenty-two that did:
| Signal | Result |
|---|---|
| Loaded in under 3 seconds | 20% (avg load: 6.7s) |
| Has any schema markup | 76% |
| Has LocalBusiness schema | 0% |
| Has FAQPage schema | 0% |
| Has an H1 tag | 56% |
| Phone number visible on the page | 76% |
| Street address visible on the page | 64% |
| Mobile viewport meta tag | 88% |
| Mobile content overflows the viewport | 8% |
| Uses HTTPS | 100% |
| Cited in AI Overview for category | 0% |
| In organic top-10 for category | 0% |
(All numbers anonymized at the row level — I’m publishing aggregate stats, not naming and shaming. Send me a Loom request via the contact page if you want to know whether your business is in the sample and what specifically broke.)
What the data says, in order
1. The schema gap is the biggest one.
Three-quarters of the audited sites have some schema markup — almost all of it the default Yoast/WordPress output: WebPage, WebSite, BreadcrumbList, occasionally Organization. That’s table stakes; it doesn’t move the needle.
What moves the needle for a local business is LocalBusiness schema (or its specific subtype: Dentist, Plumber, Restaurant, LegalService, etc.). It declares the business as a discrete entity to Google and to the LLMs — this is a real place with an address and hours and a category. Zero of the twenty-five sites declare it.
The fix is twenty lines of JSON-LD in the <head> of every page. It is the single highest-leverage, lowest-effort change a local-business site can make, and approximately nobody in Greenville has shipped it.
2. Page speed is genuinely bad.
Average load time across the twenty-two sites that responded: 6.7 seconds. Twenty percent loaded in under three seconds. Eighty percent did not.
Google’s Core Web Vitals are now a documented ranking factor for local search, and they’re a real factor in AI-search citation too — LLMs prefer to recommend pages they can crawl quickly and reliably. Sites that take eight seconds to first paint are being skipped.
Most of the slow sites are running WordPress with a stack of plugins, an oversized hero image, and no caching layer. Each of those is fixable in an afternoon. None of them are getting fixed because nobody’s watching.
3. The “is this a real business” basics are missing more often than I expected.
Thirty-six percent of the sites don’t show a street address on the homepage. Twenty-four percent don’t show a phone number. Forty-four percent don’t have an H1 tag.
These aren’t SEO tricks — they’re trust signals. A customer landing on your site wants to know in five seconds: who are you, where are you, can I call you. AI engines want the same things, in the same five seconds, and they extract them from the same DOM elements humans look at.
A surprising number of sites pass the eye test (a designer made them, they look modern) but fail the machine-readability test. Bots and AI crawlers parse text, not vibes.
4. Mobile is mostly fine. AI-search visibility is not.
The plain-old-mobile basics are largely solved — 88% have a viewport meta tag, only 8% have overflow at 390px width. Mobile-first design has filtered down to even small WordPress shops over the last five years.
The new gap is AI search. None of the twenty-five appeared as cited sources when I asked Google’s AI Overview about their category. The AI Overview itself only triggered on one of the thirteen vertical queries (a healthcare one) — the rest didn’t return AI answers at all. Two reads of that:
- Pessimistic: AI search is still finding its footing in local categories, so the lift you’d get from optimizing for it today is small.
- Optimistic: the field is wide open. Every local-business category that triggers an AI Overview in 2026 will probably trigger one in 2027. The first business in each category that’s written about, schema-marked, and entity-connected wins the citation.
I’m in the optimistic camp. The cost of being first is one or two months of disciplined work; the cost of being fifth is two years of catch-up while incumbents stack reviews and citations.
What “good” looks like, against this baseline
I think about a local-business website on five layers, in priority order:
- Loads in under two seconds. Single biggest user trust signal and the only ranking signal you can buy with pure engineering work.
- Says who you are, what you do, and where you are — in the first 400 pixels and in machine-readable form. H1, phone, address, hours, primary service. Visible to a human. Marked up in schema for a machine.
LocalBusiness(or subtype) schema, withsameAsreferences to GBP and Wikidata. This is the entity foothold AI engines need to disambiguate you from every other business with a similar name.- One indexable page per primary commercial intent. Not five services crammed onto a single
/servicespage. Five separate pages, each ranking for its own query. - Cited somewhere on the open web for what you do. GBP doesn’t count as “the open web.” Reddit, YouTube, local press, Chamber listings, vertical directories — these are where LLMs source their answers from.
If you’re a local business owner reading this: the four most likely places your site is broken are (1), (3), (4), and (5). Mobile fit and basic SEO you probably already have. Schema, page speed, page structure, and off-site presence you probably don’t.
Methodology
For the curious. The audit script lives at tools/audit-25-greenville.py in the Mainsail repo (open).
- 25 sites sampled from my prospect master CSV, biased to vertical diversity (top fit-score per vertical, round-robin).
- Each site rendered via Playwright at 390×800 (iPhone viewport), DOM parsed for schema blocks, viewport meta, H1, phone/address regexes.
- “Cited in AI Overview” = the business’s domain or name appears in either (a) Google AI Overview source references or (b) organic top-10 for
"best [vertical] in Greenville NC". Queried via DataForSEO SERP advanced. - “Slow load” threshold = 3 seconds DOMContentLoaded + network-idle.
- Schema detection = parse every
<script type="application/ld+json">block, extract@typevalues across@grapharrays.
Raw data + screenshots (anonymized — heavy gaussian blur applied to logos and identifying text) sit in drafts/mainsail-research-2026-05-20/audit-25/ locally. I’m not publishing the screenshot grid yet — I want to give the businesses in the sample the courtesy of getting a Loom site review before I post recognizable cropped images, even blurred.
What’s next
I’ll re-run this audit at the 50-site, 100-site, and 250-site marks. Same methodology, same metrics, comparable deltas. The point isn’t a single dataset — the point is a growing one, because the only way to know if Greenville’s small-business web presence is getting better or worse is to measure it the same way over time.
If you’re running one of these businesses and you want to know exactly what your site looks like in this scoring, send me your URL and I’ll email you a five-minute Loom audit. No call, no pitch, no obligation. I’m doing them anyway — you might as well see yours.
And if you’re a developer or marketer in the area and want to compare notes on this kind of audit work — I want to know what you’re measuring. The category is moving fast enough that “audit methodology” itself deserves to be a discipline, not a single tool. Mainsail’s open-source repo is where mine lives.
Related
- How do I get my business cited in ChatGPT and Perplexity? — the Learn piece on how the AI-search citation mechanism actually works
- How much does local SEO cost in 2026? — honest pricing breakdown including what each tier should actually buy you
- Fix in public, month 1: foundation laid — the first entry in this series, about fixing Mainsail’s own AI-search invisibility
- AI search optimization — the service this all feeds