How to Build a Local Business Website That Supports SEO

Shovon Joarder — How to build a local business website that supports SEO

Here is a question I ask every local business owner who tells me their website “isn’t doing much.”

When was the last time your website brought you a customer you didn’t already know?

Silence. Then: “Well, people find us on Google…” Sure. But which page did they land on? What did it say? And did it actually help them pick up the phone — or did they bounce straight back to your competitor’s site?

I’m Shovon. I run a digital marketing agency in London, Ontario, and I audit local business websites for a living. Most of them have the same problem, and it isn’t the design. It’s that nobody built the site to be understood — by Google, or by the customer standing on a sidewalk with a phone in one hand and a burst pipe in the other.

This post is the blueprint I wish every local business had before paying for a website. How Google actually reads your site, how to structure it so both humans and search engines get it, and the handful of technical pieces — internal links, indexing, schema markup — that separate the sites that rank from the ones that just sit there looking pretty.

Key Takeaways

  • Structure is a message. A shallow, logical site tells Google exactly what you do and where you do it. A messy one tells it nothing at all.
  • One page per service. “Emergency plumber in Kitchener” deserves its own page, written for a human with a real problem — not a line item on a generic Services page.
  • Location pages need real local content. Photos from actual jobs, neighbourhoods you serve, reviews from that town. Copy-paste city pages hurt more than they help.
  • Link your pages like you mean it. Descriptive internal links between services, locations, and blog posts tell Google which pages matter most.
  • Don’t let two pages chase the same keyword. When your own pages compete with each other, Google picks neither with confidence. Consolidate or differentiate.
  • Check what’s actually indexed. Search Console’s indexing report shows you what Google can see. Assumptions don’t rank.
  • Add LocalBusiness schema. A small block of code that hands Google your name, address, hours, and services on a platter. Most local sites still don’t have it.
Infographic: the Local SEO Website Blueprint in 6 steps — shallow structure, one page per service, real location pages, internal links, indexing, LocalBusiness schema.

First, think like Google

Google doesn’t look at your website. It crawls it (follows links from page to page), renders it (runs the code the way a browser would), and then tries to answer two questions about every page: what is this about, and who is it for?

For a local business, those two questions have very specific answers. What do you do, and where do you do it? A dental clinic in Oakville. A plumber serving Kitchener-Waterloo. A salon on Dundas Street. Every structural decision on your site should make those answers easier to find — for Google and for the human reading the page.

Think of your website as a filing cabinet. A good one has labelled folders, everything in its place, and you can find any document in seconds. A bad one is a junk drawer: everything technically in there, nothing findable. Most local business websites I audit are junk drawers with nice paint.

And here’s the uncomfortable part: pretty doesn’t equal understandable. Google can’t admire your hero slider. It can’t tell that the gorgeous photo is your actual storefront. It reads text, links, and code — so the site has to say what it shows.

Get the structure right

Site structure is just the hierarchy of your pages: what lives under what, and how many clicks it takes to get anywhere. The rule I give every client: no important page should be more than three clicks from the homepage. Your money pages — the service pages that bring enquiries — should be one or two.

Your navigation menu should mirror that structure. If a visitor can’t tell what you do from your menu labels, Google probably can’t either. “Services” with a dropdown of actual services beats a clever menu every time. And your footer is free real estate: full business name, address, phone number, and links to your key pages on every single page of the site.

Here’s the shape I recommend for almost every local business:

Page typeThe job it doesExample for a plumbing company
HomepageTells Google and visitors who you are, where you are, and what you dodavesplumbing.ca
Service pagesRank for “[service] + [city]” searches/emergency-plumber-kitchener/
Location pagesRank for “near me” searches in each town you serve/service-areas/waterloo/
About / ContactTrust signals and NAP consistency/about/, /contact/
BlogAnswers customer questions, earns links, feeds internal links to service pages/blog/frozen-pipe-prevention/

Notice what isn’t there: a dozen thin pages nobody asked for, a “Gallery” with no context, three different contact pages. Every page has a job. If a page doesn’t have one, it’s dead weight.

Give every service its own page

This is the single most common structural mistake I see: one “Services” page listing twelve things the business does, each with two sentences. A page like that can’t rank for anything, because it isn’t about anything. Google needs a page to be clearly about one thing before it will show it for that thing.

So: one page per service. Not one page per service category — one page per service a customer would actually search for. A dental clinic doesn’t need a page for “dentistry.” It needs pages for teeth whitening, dental implants, emergency dental care, Invisalign, and so on. Each one is a separate chance to show up when someone searches exactly that.

And write each page for a human with a real problem, not for a keyword counter. A strong service page has:

  • A headline that says the service and the city. “Emergency Plumber in Kitchener — 24/7, 60-Minute Response.” Nobody ever complained a headline was too clear.
  • What the service actually includes. Spell it out. Customers don’t know what “comprehensive pipe diagnostics” means; they know their basement is flooding.
  • Who it’s for and how it works. A short “how it works” or “what to expect” section answers the questions people are afraid to ask on the phone.
  • Proof. Reviews from customers who bought that service, photos of real work, before-and-afters. Stock photos of smiling strangers prove nothing.
  • One obvious next step. Tap-to-call button, quote form, online booking — above the fold and again at the bottom. A service page without a clear call to action is a brochure, not a salesperson.

Length matters less than completeness. Some service pages do the job in 600 words; competitive ones need 1,500. The test is simple: does this page answer everything a customer needs to know before calling? If yes, it’s long enough.

Illustration of a well-structured local service page with headline, photo, reviews and call button

Build location pages that earn their keep

If you serve more than one town, you need pages that speak to each town — because “plumber” and “plumber in Waterloo” are different searches with different winners. But this is where good intentions go to die, because most location pages are built the lazy way.

The lazy way: take one page of generic text, swap “Kitchener” for “Waterloo” for “Cambridge,” publish thirty of them, and wonder why nothing ranks. Google has a name for these — doorway pages — and its spam policies have called them out for years. Pages that exist only to catch searches, with no unique value, don’t just fail to rank. They can drag down your whole site.

A location page that earns its keep has things only someone serving that town could write:

  • The neighbourhoods and areas you actually serve there — not just the city name in the headline.
  • Local landmarks and context. “We handle emergency calls across Waterloo, from the university district to Laurelwood” beats “Welcome to our Waterloo page” every time.
  • Photos from real jobs in that town. A furnace install on Park Street is worth more than any stock photo.
  • Reviews from customers in that town. “Fixed our water heater the same day” — Sarah M., Waterloo.
  • Local details that matter. Parking, service hours for that area, the local number if you have one.

My honesty test for location pages: would you be proud to show this page to a customer from that town? If the answer is no — if it reads like a mail merge — don’t publish it. One strong location page beats ten embarrassing ones.

Internal links — links from one page of your site to another — are the signposts of your filing cabinet. They tell Google which pages are important (pages with many internal links pointing at them) and how pages relate to each other. They also do something just as valuable: they keep human visitors moving toward a phone call instead of a back button.

Most local sites link almost nothing to nothing. The blog sits in a corner, unlinked. Service pages don’t mention each other. The location pages are reachable only from a footer link in 8-point type. Here’s the linking pattern I set up for clients:

  • Blog posts link to the service pages they relate to — with descriptive anchor text. A post about frozen pipes links to your “Emergency Plumber in Kitchener” page using those words, not “click here.”
  • Service pages link to related services and to your location pages. Someone reading about drain cleaning might need water heater repair too.
  • Location pages link back to the services offered there. The Waterloo page links to each service page, and each service page links to the towns it covers.
  • No orphan pages. Every page on your site should have at least one internal link pointing to it from another page. Pages with zero incoming links are pages Google may never find — and customers definitely won’t.

Anchor text is the label on the signpost. “Emergency plumber in Kitchener” tells Google what the linked page is about. “Click here” tells it nothing. You don’t need to force keywords into every link — just describe the destination the way a helpful human would.

Stop your pages fighting each other

Here’s a problem that hides on bigger local sites: keyword cannibalization. Two (or more) of your own pages target the same keyword and the same intent, so they compete with each other. Google gets mixed signals about which page should rank — and the usual result is that neither ranks as well as one strong page would.

Classic local-business version: a “Services” page, a blog post, and a location page all trying to rank for “dental implants Oakville.” Google rotates between them, positions wobble, and the enquiry goes to the competitor with one clear page.

How to spot it:

  • The site: search. Type site:yourdomain.com “your keyword” into Google. If two or more of your pages show up for the same term, you may have a conflict worth investigating.
  • Search Console’s Pages tab. In Performance, filter by the query, then switch to Pages. Multiple URLs sharing impressions for one search term confirms it.
  • Rank volatility. If your rank tracker shows different URLs ranking for the same keyword on different days, Google is undecided — that’s cannibalization in action.

And how to fix it depends on the situation:

SituationFix
Two thin pages covering the same topic and intentConsolidate — merge them into one stronger page, 301 redirect the weaker URL to it
One clearly strong page plus a weak duplicate301 redirect the weak page to the strong one
Both pages valuable but overlapping on one termDifferentiate — give the keyword to one page, re-optimize the other around a related term and intent
Near-duplicate URLs (tags, parameters, print versions)Canonical tag pointing to the preferred URL

One important nuance: shared keywords aren’t automatically a problem. A guide and a service page can mention the same term while serving completely different intents, and both can rank happily. It’s only cannibalization when the pages compete for the same intent. Neil Patel’s guide walks through the diagnosis well if you want a second opinion on yours.

Find out what Google actually indexed

Everything so far assumes Google can see your pages. That assumption deserves checking — because “we published it, so it must be ranking” is one of the most expensive sentences in local marketing.

Open Google Search Console and go to the Indexing → Pages report. It shows you exactly which pages Google has indexed and, more usefully, which ones it hasn’t and why. The statuses that matter most:

StatusWhat it meansWhat to do
Discovered — currently not indexedGoogle knows the URL exists but hasn’t crawled it yetStrengthen internal links to the page, make sure it’s in your sitemap, and give it time
Crawled — currently not indexedGoogle looked at it and chose not to index itThe content is likely too thin or too similar to other pages — make it substantially better or consolidate it
Blocked by robots.txtYou’re telling Google’s crawler to stay outCheck whether that’s intentional — staging-site rules left behind after launch are a classic
Alternate page with proper canonical tagGoogle honours your canonical and indexes the preferred URL insteadUsually fine — that’s the system working as designed

Two more tools worth knowing. The URL Inspection tool lets you check any single URL — whether it’s indexed, when it was last crawled, and you can request indexing after you publish or fix something. And an XML sitemap submitted in Search Console is your site’s table of contents for Google: it doesn’t guarantee indexing, but it removes any excuse for Google not finding your pages.

The single most common indexing disaster I see on local sites? A WordPress site launched with “Discourage search engines from indexing this site” still ticked from the staging phase. Months of invisibility, one checkbox. Check yours today — it takes ten seconds.

Give Google the cheat sheet: LocalBusiness schema

Schema markup is structured data — a small block of code that describes your page’s content in a format Google reads directly. For a local business, the relevant type is LocalBusiness schema, usually added as JSON-LD in the page’s head section. Think of it as a cheat sheet you hand Google: here’s our exact name, address, phone number, hours, and what we do — no interpretation required.

Google’s LocalBusiness documentation requires exactly two properties: name and address (as a structured PostalAddress, not a free-text string). But the two required fields are the floor, not the ceiling. The properties worth adding:

  • telephone — with country and area code, matching the number on the page.
  • geo — latitude and longitude (Google asks for at least 5 decimal places of precision).
  • openingHoursSpecification — your hours, per day, in 24-hour format.
  • priceRange — keep it short: $, $$, or a range like $50–$200.
  • url — the page’s own working URL.

Three rules that separate good schema from dangerous schema. One: use the most specific business subtype you can — Dentist beats LocalBusiness, Plumber (under HomeAndConstructionBusiness) beats ProfessionalService. Two: the markup must match what’s visible on the page. Marking up a five-star rating nobody can see, or hours that contradict your footer, is exactly the kind of misleading structured data Google penalizes. Three: keep it current. A schema block with your old address is worse than no schema at all. This practical walkthrough covers the quiet ways local-business markup gets disqualified.

When you’re done, validate it with Google’s Rich Results Test. Correct markup makes you eligible for rich results — it doesn’t guarantee them — but eligibility is a lot better than invisibility.

Illustration of structured data markup connecting a business website to rich search results

Start this week

You don’t need a rebuild to start. Five things, in order:

  1. Sketch your structure. On paper, draw your homepage with every page under it. Anything important more than three clicks deep gets moved up. Anything without a job gets cut.
  2. Fix your best service page. Pick the service that makes you the most money. Give it a clear headline with service + city, real proof, and one obvious call to action.
  3. Run the site: test. Search site:yourdomain.com plus your three most valuable keywords. If two of your pages show up for the same term, you’ve found cannibalization — now you know what to fix.
  4. Open Search Console’s indexing report. Look at what’s indexed and what isn’t. Fix the checkbox-of-doom first (Settings → Reading, in WordPress).
  5. Add LocalBusiness schema to your homepage and contact page. Name, address, phone, hours, geo — matching exactly what’s on the page.

Do those five and your site will already be easier for Google to understand than most of your competitors’. In the coming posts I’ll go deeper on each piece — the full local SEO audit, GBP optimization, review strategy, and keyword research — so every part of this blueprint gets the attention it deserves.

Frequently Asked Questions

How many pages does a local business website actually need?

Fewer than most owners think, but more than most have. A typical local business needs a homepage, one page per core service (often 5–10), location pages for each town genuinely served, an about page, a contact page, and a blog that actually gets used. That’s usually 15–30 solid pages — far better than 100 thin ones.

Quality beats quantity every time. One complete service page outranks five stubs.

Do I really need a separate page for every service and every town?

For services: yes, if customers search for them separately. Nobody searches “dentistry services” — they search “teeth whitening Oakville.” For towns: only where you can write genuinely local content. A thin page with the town name swapped in does more harm than good.

When in doubt, ask the pride test: would you show this page to a customer from that town?

What’s the difference between a location page and a doorway page?

A location page is genuinely useful to someone in that town — real service areas, local photos, local reviews, local details. A doorway page exists only to catch searches: thin, interchangeable, and written for Google instead of humans. Google’s spam policies have called out doorway pages for years.

If your “Waterloo” and “Cambridge” pages are identical except the city name, you have doorway pages.

How long does it take Google to index a new page?

Anywhere from a few days to a few weeks, depending on how often Google crawls your site and how well the page is linked internally. You can speed things along with the URL Inspection tool’s “Request indexing” — but don’t panic if a brand-new page isn’t indexed overnight.

If a page still isn’t indexed after a month, check the Indexing report for the reason instead of guessing.

Can I add schema markup myself, or do I need a developer?

You can do the basics yourself. LocalBusiness schema is a copy-paste JSON-LD block — fill in your details, paste it into the page head (most SEO plugins have a field for this), and validate with Google’s Rich Results Test. The hard part isn’t the code; it’s keeping it accurate when hours or addresses change.

If your site has many locations or complex services, that’s when a developer earns their fee.

My homepage ranks, but my service pages don’t. What’s wrong?

Usually one of three things: the service pages are too thin to deserve a ranking, they have almost no internal links pointing at them (so Google treats them as unimportant), or they’re cannibalizing each other — or the homepage — for the same keyword. Check all three in that order.

Strong internal links from relevant blog posts to a service page are often the fastest fix.

Further reading: website architecture and why it’s the backbone of SEO-friendly design (Freelancers HUB Canada blog). See also: on-page SEO and what an agency actually does with it (Freelancers HUB).

Post a Comment

0 Comments