Local SEO is the practice of making your business surface for users searching '[city] + [service]' or looking for something near their current location. It consists of two halves: managing your Google Business Profile, and the implementation on your own website.
What Is Local SEO?
Local SEO is about being found in searches tied to a place. It applies not only to businesses with a physical catchment area — shops, clinics, professional practices, contractors — but to any service business that operates within defined coverage areas.
Google states that local results are ranked on a combination of three factors — relevance, distance, and prominence (Google Business Profile Help, 'Improve your local ranking on Google'). Distance is not something a business can change. In practice, that leaves two levers.
Relevance
How well the business matches the query. Categories, services, and the descriptions on your own site all feed into this.
Distance
Physical distance from the searcher's location, or from a place named in the query. The one factor a business cannot control.
Prominence
How well known the business is. The volume of information about it online — your site, articles, and reviews — contributes here.
Local SEO vs. 'MEO'
'MEO' (Map Engine Optimization) is a term used in Japan that effectively refers to optimizing for Google Maps and the local pack. Local SEO is broader: it covers both the map results and the regular organic results. The distinction matters when you decide where a given task belongs.
Google Business Profile
- —Category selection
- —Hours and closures
- —Photos
- —Review responses
- —Posts
Your own website
- —LocalBusiness structured data
- —NAP presence and consistency
- —Region keyword placement
- —Location page architecture
- —Map embed
The right-hand column is the half you can complete yourself, without depending on an external dashboard. The rest of this guide focuses there.
What to Check on Your Own Site
Local SEO on your own site comes down to five items. Each of them can be verified by looking at the HTML.
LocalBusiness structured data
Declares your business name, address, phone, and opening hours in machine-readable form so search engines read your NAP reliably, regardless of formatting variation.
Phone number as a tel: link
Write the number as text and wrap it in a tel: link. Embedded in an image, it is unreadable to search engines and untappable on mobile.
Street address on the page
If you have a physical location, put the address on your about and location pages — not only in the footer. Consistent formatting matters as much as presence.
Embedded Google Map
Embed a map on your location page. It removes a step for users checking where you are, which is a practical way to reduce pre-visit drop-off.
Region keywords in title / meta description / h1
The most basic signal of relevance for '[city] + [service]' queries. Pages missing the region name in their most valuable real estate are more common than you would expect.
For the actual LocalBusiness JSON-LD markup, see the structured data implementation guide.
NAP Consistency Comes First
NAP stands for Name, Address, and Phone. In local SEO, having these three match across your site, your Google Business Profile, and third-party listings is the foundation everything else sits on.
In practice, the problem is rarely a missing listing — it is formatting drift. Where the legal suffix sits, whether the street number is written in digits or in full, whether the phone number has hyphens, full-width versus half-width characters. Humans read these as identical; a machine matching them may not. Declaring NAP in structured data reduces that ambiguity.
Sources to reconcile
- —Your own site (footer, about page, location pages, structured data)
- —Google Business Profile
- —Industry portals, map services, job listings, and other third-party listings
Where to Put Region Keywords
The shortest route to relevance for '[city] + [service]' queries is putting the region in your most valuable real estate: title, meta description, and h1. Cramming backfires, though — treat one page as covering one area.
No region, so it never connects to '[city] + [service]' queries.
Region and service are both front-loaded.
Communicates neither what you do nor where you do it.
Region, service, and track record in a single line.
Cramming regions into one page makes it mediocre for all of them.
Every page can hold relevance for one specific area.
On the risks of generating location pages by swapping city names, see the programmatic SEO guide.
Common Local SEO Mistakes
Working only on the Business Profile, leaving the site empty
Registering the profile and uploading photos is where many stop. Relevance is judged partly from what your own site says, so an empty site puts you at an information disadvantage.
Treating a footer address as done
The footer is a site-wide element and says nothing about a given page's subject. Put the address in the body of the pages where location is the subject — your location and about pages — alongside structured data.
Rendering the phone number as an image
Some sites still image their phone number for design reasons. Search engines cannot read it and mobile users cannot tap it, so the loss compounds.
Mass-producing near-identical location pages
Swapping only the city name across many pages risks falling under Google's spam policies on scaled content with little value. If you cannot write something specific to a location — access, staff, local work — it is safer not to create that page.
Where to Start
Check whether the title and h1 of your location page contain the region
If not, rewrite them with the region front-loaded. This is the highest-leverage single change available.
Line up your NAP across your site, Google Business Profile, and third-party listings
Compare them line by line — legal name formatting, address format, even phone number hyphenation.
Check whether LocalBusiness structured data exists
If not, add a minimal version with NAP and opening hours. See the structured data guide for the markup.
Confirm the phone number is text wrapped in a tel: link
If it is an image, replace it with text.
