AI visibility & GEO

Local business websites in the age of AI answers

How local businesses stay visible as "near me" searches turn into AI answers: structured data, service and area pages, and enquiry follow-up.

The most expensive sentence in local business is “we just have a Facebook page.”

Not because Facebook is bad. Because of what happens when somebody in your town opens ChatGPT and types who’s a good plumber near me who does emergency callouts on weekends — and the answer is assembled from businesses that published something a machine could read. You are not in that answer. You are not even in the running.

We spent years building sites for exactly these businesses — trades, clinics, restaurants, studios — over 300 of them. The thing that changed is not the design expectations. It is who is reading.

Your website used to be read by a customer who had already decided to look at you. Increasingly it is read first by a machine deciding whether to mention you at all.

What actually changed about “near me”

For fifteen years, local search worked one way: type a query, get a map with three listings, then ten links. You optimised for the map pack and, if you had budget, for the links underneath.

That surface is still there. But a growing share of the same intent now resolves differently. Someone asks an assistant a full question — with constraints — and gets a short answer naming two or three businesses. Google’s AI Overviews do a version of this above the results. The direction of travel is clear even where the exact share is not: questions that used to produce a list of ten options increasingly produce a recommendation of two.

That is a compression event, and it has a specific consequence. Ranking eighth used to mean some traffic. Being the eighth-best-explained business in your town now means nothing at all, because there is no eighth slot in a sentence.

The queries themselves also got longer and more specific. Not “dentist Bristol” but “dentist in Bristol who takes nervous patients and has Saturday appointments”. Those constraints have to be answerable somewhere. If your site does not state that you have Saturday hours in a way a machine can extract, you cannot be the answer to a question about Saturday hours — no matter how good you are on Saturdays.

What a machine needs in order to recommend you

Strip away the jargon and an AI answer is a confidence problem. The system needs to be reasonably sure that a business exists, that it does the thing asked about, that it serves the area asked about, and that recommending it will not embarrass the system. Five things supply that confidence.

1. LocalBusiness structured data. A machine-readable block on your pages stating your legal name, address, phone, geo coordinates, opening hours, service area, and price range in a standard schema. This is the single highest- leverage thing on this list, because it removes guessing. Without it, a system is parsing your footer and hoping.

2. Consistent name, address, and phone. Identical across your site, your map listing, and every directory. Not roughly the same — the same. “Suite 4” on the website and “Unit 4” on the listing, or an old mobile number on a Facebook page nobody has edited since 2021, both reduce confidence that these mentions are one business.

3. Service pages that answer real questions. One page per service you actually want to be hired for, written to answer the questions people ask on the phone. What does it cost, roughly. How long does it take. What are the signs you need it. What happens if you leave it. This is the content AI answers are made of, because it is the only content that contains answers.

4. Opening hours, stated as data. In schema, not only inside an image of a sign on your door. Half of the constraint-heavy queries are about time — open now, open Sunday, emergency, late.

5. Genuine reviews, and a page that reflects them. Real reviews on the platforms your customers use, plus your own site acknowledging what people consistently say. Do not invent testimonials. Fabricated review content is the fastest way to lose the trust signal you were trying to build, and it is increasingly detectable.

None of that is glamorous. All of it is checkable, which is exactly why it works.

app.storypages.ai/admin
The StoryPages AI builder with a local service business described in the prompt box
You describe the business — trade, towns served, hours — and that description is what the structured data gets built from. Not a form you fill in afterwards.

Why a Facebook page cannot carry this

This is not a philosophical objection. It is mechanical.

A Facebook page is a record inside somebody else’s application. You cannot add schema to it. You cannot publish service pages under your own domain. You cannot add an llms.txt file. Its content is rendered in a way that assistants read poorly and often cannot cite, and the parts that matter most — your hours, your service area — live in fields the platform decides how to expose.

There is also an ownership problem you feel only once. A page restriction, an appeal queue, a policy change, and your entire online presence is unreachable while you wait.

Keep the Facebook page. Post on it. But an assistant recommending a local business wants to cite a source it can read and verify, and that means a site on a domain you own.

Service-area pages, done without the spam

Every local SEO guide tells you to build a page per town. Most businesses then build forty pages that are one page with the town name swapped, and are surprised when it does nothing.

Be clear about why that fails now. It is not only that search engines have demoted doorway pages for a decade. It is that an AI answer has no reason to cite a page containing no information. If the only town-specific content is the word “Croydon” appearing nine times, there is nothing to summarise, and the pattern actively marks your site as low quality — which affects the pages that were good.

The version that works has a real constraint attached to it: build a page per area only if you can write 200 words about that area that would be false about the next town over.

For a trade, that is genuinely possible:

  • The housing stock. “Most of the terraces here have the original lead runs, so we quote for replacement rather than repair.”
  • Travel and coverage. “We hold Tuesday and Thursday for this side of the river.”
  • Real jobs. Two anonymised examples from that area, with what they cost.
  • Local specifics. Parking, access, permit requirements, a council scheme.

Six pages like that outperform forty thin ones, and they hold up to being read by a person who is deciding whether to trust you. If you cannot write the 200 words, you do not serve that area distinctly — say you cover it on one honest coverage page instead.

The missed call is the real leak

Here is the part that has nothing to do with search, and costs more than search does.

A local service business loses most of its opportunities in the twenty minutes after somebody tries to reach it. You are under a sink, in a treatment room, mid-service. The phone rings out. That person does not leave a voicemail — they call the next name on the list, and you never learn the job existed.

Three fixes, in order of return:

A form next to the phone number, always. Some people will not ring at all, particularly outside working hours and particularly for anything they find awkward to explain by phone. Give them a way to reach you that does not require you to be free.

Immediate acknowledgement. An automatic reply within seconds saying you have it and when you will respond. This is what stops them calling the next number. Silence is what loses the job, not delay.

Every enquiry into one place. Form submissions, phone notes, and the people who messaged the Facebook page should end up in one contact list with a source and a last-contacted date. Not because you need a sales pipeline, but because “who have I not called back?” needs an answer that is not your memory.

app.storypages.ai/admin/contacts
The StoryPages CRM contact list showing tags, lead source, and last activity for each contact
Every form on the site writes here, tagged with where it came from. The useful column on a busy week is last activity.

In StoryPages the CRM and email are part of the same product as the website, so there is no integration step between a form being submitted and a reply going out. That matters for a two-person business more than any feature list, because nobody there is going to maintain a connection between three tools.

What that $3,000 to $5,000 usually buys

Most local businesses have been quoted somewhere in this range for a website. It is worth understanding what is inside that number.

Typically: a licensed theme, content pasted into it, a discovery call, two revision rounds, and project management. The template is not the expensive part — the coordination is. And it is common for that build to skip structured data entirely, ship an enquiry form that sends a plain email to an inbox, and leave you unable to change your own opening hours.

So you paid for the part that was cheap and did not get the parts that decide whether a machine can recommend you or whether a 7pm enquiry gets answered.

Worse is what happens next. You change a price, add a service, drop an area. Each one is an email to whoever built it, a wait, and sometimes an invoice. So the changes stop happening, and within two years the site describes a business you no longer run — including hours that are wrong.

What we ship by default

We built StoryPages because we were the agency in that story, and we got tired of being a bottleneck between an owner and their own opening hours.

Every site includes, without configuration: structured data appropriate to the business type, llms.txt, semantic HTML, and fast static pages. Not as an upsell — as the floor. That is the AI visibility work, and it is the thing most local builds leave out.

The build itself is a conversation: describe the business, approve the style, the sitemap, and the wireframes, and it goes live. Then changing it is another sentence — “add Saturday morning hours”, “we now cover Redhill” — typed into the assistant rather than requested from a supplier. See how it works.

Plans are $29, $49, and $99 a month by number of sites, pages per site, and CRM contacts, with a free plan to build on first. See pricing. If you are currently on GoHighLevel or considering it, we wrote an honest comparison from our years as a reseller.

The checklist, if you do nothing else

  1. Own a domain and put a real site on it. Keep Facebook as a channel, not a foundation.
  2. Publish LocalBusiness structured data with hours, service area, and phone.
  3. Make name, address, and phone identical everywhere they appear.
  4. Write one page per service you want to be hired for, answering the questions you get on the phone.
  5. Build area pages only where you can say something locally true. Six real ones, not forty thin ones.
  6. Put a form beside every phone number, route it into one contact list, and auto-reply immediately.
  7. Ask satisfied customers for reviews. Never write them yourself.

Do those seven and you are legible to the systems your next customer is about to ask. Skip the structured data and the follow-up, and you have a brochure that nobody — human or machine — has a reason to bring up.

More on what we build for local businesses, or the rest of the blog.

Questions people ask about this

Is a Facebook page enough for a local business now?
It is fine as a place to post updates and fine as a place customers message you. It is a poor foundation for being found, because the page belongs to a platform, its content is not published as structured data an assistant can reliably read, and you cannot add service pages, opening hours markup, or a proper enquiry form that writes into your own system.
What is LocalBusiness structured data and do I need it?
It is a machine-readable block on your pages stating your name, address, phone, opening hours, service area, and price range in a standard format. Search engines and AI assistants read it directly instead of guessing from your page text. If you want to be recommended rather than merely indexed, yes, you need it.
Do service-area pages still work, or are they seen as spam?
They work when each page is genuinely different — local specifics, real jobs, actual travel and pricing implications. They backfire when they are the same page with the town name swapped, which is a doorway pattern that search engines demote and AI systems have no reason to cite. Fewer, better pages beat forty thin ones.
Why do my name, address, and phone need to match everywhere?
Because consistency is how a machine decides two mentions describe the same business. If your website says Suite 4 and your map listing says Unit 4 and your Facebook page has an old mobile number, you have weakened the confidence any system has in recommending you.
Does the website still matter if most of my work comes from the map listing?
More than before. The map listing is a summary; the website is where the detail lives that makes you the specific answer to a specific question. AI answers are assembled from pages that explain things, and your listing cannot hold that content.
How do I stop losing jobs to missed calls?
Put a form next to the phone number and make it write into a CRM, then send an automatic reply immediately. Someone who cannot reach you by phone at 7pm will contact whoever answers first, and an automatic acknowledgement is often enough to keep them from calling the next name on the list.
Why do agencies charge $3,000 to $5,000 for a local website?
Usually because the work is a templated build wrapped in project management, discovery calls, and revision rounds. The template itself is not worth that. What you should actually pay for is the structured-data and follow-up work — which is exactly the part those builds most often skip.

Stop reading about websites. Get one.

Describe your business to StoryPages and watch the sitemap appear. Free to start — you'll know in ten minutes whether this is for you.