If you build or maintain websites for local businesses, you've probably already noticed organic click-through rates dropping even as rankings hold steady. The reason: AI Overviews now appear in roughly 68% of local searches (versus ~39% for the classic three-pack local results), and for "near me" or pricing-style queries, AI-generated answers show up 80β97% of the time. ChatGPT itself is reportedly the third most-used source for local recommendations, behind Google and Facebook.
Ranking #1 in classic SERPs no longer guarantees you get mentioned when an LLM synthesizes an answer. As developers, that means the job has expanded: we're no longer optimizing purely for a crawler that returns links β we're optimizing for models that read, verify, and cite structured facts.
This post is a practical, implementation-level walkthrough: what's changed, what to build, and where to instrument tracking so you can actually prove impact to a client or stakeholder.
Classic search: crawl β index β rank β return links
.
AI search / generative engine optimization (GEO): crawl β extract entities β verify consistency across sources β synthesize an answer β optionally cite sources
.
The practical consequence is that LLM-driven answer engines lean much harder on:
schema.org
JSON-LD) β explicit, machine-readable facts beat inferred onesIf you're the one writing the code and markup, this is where you actually have leverage.
A few numbers to bring to your next client call or sprint planning:
Article
and FAQPage
schema correctly has been associated with roughly a For a dev team, this reframes "SEO work" from a content/marketing-only task into something with real technical scope: schema architecture, crawler access policy, and analytics instrumentation.
LocalBusiness
JSON-LD Don't just drop in a name and address. Include the fields AI systems actually use to verify and cite you:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "SoftWin Local Client Example",
"image": "https://example.com/storefront.jpg",
"@id": "https://example.com",
"url": "https://example.com",
"telephone": "+1-512-555-0134",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 30.2672,
"longitude": -97.7431
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "18:00"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "212"
},
"sameAs": [
"https://www.facebook.com/example",
"https://www.yelp.com/biz/example",
"https://www.google.com/maps/place/example"
]
}
Key details that get overlooked: the sameAs
array is what lets an LLM cross-reference your GBP, Yelp, and Facebook listings to confirm you're the same entity everywhere. aggregateRating
should mirror your actual, current review data β mismatched ratings between schema and the live listing are an easy trust penalty.
FAQPage
schema to service and location pages
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does [service] cost in [city]?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Pricing for [service] in [city] typically ranges from $X to $Y, depending on [factors]."
}
}
]
}
This directly targets the query types most likely to trigger an AI Overview β pricing and "how does X work" questions trigger AI-generated answers over 80% of the time.
A lot of legacy robots.txt
files block "unknown" or aggressive crawlers by default, which can inadvertently block AI user agents you want indexing you. Audit for:
User-agent: GPTBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Google-Extended
Allow: /
Decide deliberately, per client, whether you want each of these allowed β some businesses have legitimate reasons to restrict AI training crawlers while still allowing retrieval/citation bots (the two are not always the same user agent). Some teams are also experimenting with an llms.txt
file at the site root β an emerging, informal convention for summarizing site content specifically for LLM consumption β though it's not yet a universal standard, so treat it as supplementary, not a replacement for solid schema and clean HTML.
Programmatically generated location pages (the classic "swap the city name" template) are easy for both classic crawlers and LLMs to flag as low-value or duplicate. Structurally, each location page should include:
FAQPage
schemaBecause AI-driven visits often arrive without standard UTM parameters, they can silently collapse into "Direct" traffic. Set up custom channel groupings or at minimum a segment based on referrer domain:
chatgpt.com
perplexity.ai
gemini.google.com
copilot.microsoft.com
www.bing.com/chat
In GA4, this can be done via a custom channel group (Admin β Data display β Channel groups) with a referrer-based condition, or via a lightweight server-side check if you're logging referrers yourself. Without this, you have no way to prove AI-search work is actually driving traffic β which makes it hard to justify continued investment to a client or stakeholder.
Manual audits go stale fast. A simple approach: maintain a canonical JSON "business profile" object in your codebase or CMS, and diff it periodically against your live listings (GBP, Yelp, Facebook, Bing Places) β either manually on a quarterly cadence or via a citation-tracking API (BrightLocal, Semrush Listing Management, Moz Local all expose this). Flag any mismatch in name, address, phone, or category immediately; inconsistency is one of the most common reasons a business gets excluded from AI-generated answers, because the model can't confirm which version is authoritative.
When https://softwin.io/'s dev team onboards a local business site, the AI-readiness audit now runs as a standing checklist alongside the technical SEO audit: schema validation (completeness, not just presence), crawler-access review, GA4 AI-referral instrumentation, and a quarterly NAP consistency diff. The single most common finding isn't a missing feature β it's drift: schema that was correct at launch but never updated when the business changed hours, added a location, or their review count changed. AI systems have very little tolerance for stale or inconsistent data, more so than classic search ever did.
aggregateRating
or openingHoursSpecification
actively hurts trust signalsrobots.txt
inherited from a templateDoes adding schema markup guarantee an AI citation?
No β schema improves the odds of being correctly parsed and verified, but citation also depends on review data, third-party corroboration, and content freshness. Treat it as necessary, not sufficient.
Should I block AI crawlers like GPTBot to protect my client's content?
That's a business decision, not just a technical one β discuss it explicitly with the client. Blocking training crawlers doesn't necessarily block retrieval/citation bots, and the two often use different user agents, so a blanket block can hurt visibility without achieving the content-protection goal intended.
Is llms.txt worth implementing right now?
llms.txt
as a supplementary experiment.How do I prove this work had impact to a stakeholder?
Instrument GA4 AI-referral tracking before you start the work, so you have a baseline, and re-run direct prompts ("best [service] in [city]") across ChatGPT, Perplexity, and Google AI Mode periodically to track whether citations change over time.
Does this apply to small sites, or only enterprise/multi-location deployments?
It applies especially to small sites β they're the most likely to be running templated themes with generic or missing schema, and the fixes here are proportionally cheaper to implement than on a large multi-location deployment.
The technical SEO fundamentals you already know β clean HTML, fast load times, mobile usability β haven't gone away. What's new is that structured data, entity consistency, and crawler-access decisions have moved from "nice to have" to "directly determines whether an AI names your client's business." That's a meaningful expansion of scope for anyone building local business sites, and it's a good time to add an AI-readiness pass to your standard site audit template.
If you want a second pair of eyes on a client's schema implementation or crawler configuration, ** https://softwin.io/'s team runs technical AI-search audits** for local and multi-location business sites β feel free to reach out, or drop a comment below with your own findings on what's actually moving AI citations for you.
Written by the SoftWin engineering team. We build and audit web infrastructure for local and growing businesses, with a focus on technical SEO and AI-search readiness.