Key takeaways
- Store name, address and phone (NAP) once in WordPress and output it everywhere, schema included.
- LocalBusiness schema needs only name and address; use the most specific type and match the visible page.
- Build location pages from a template with required local fields, or they risk becoming doorway pages.
- Service-area businesses should hide their address, not invent one.
- Your site can help relevance and prominence, never distance, and nobody can pay for a better local ranking.
Local SEO services for WordPress websites succeed or fail on a few build details that most sites get slightly wrong: where the business name, address and phone number are stored, what the LocalBusiness schema says, and how location pages are built. None of it is glamorous. All of it decides whether your site supports your Google Business Profile or quietly contradicts it.
I have worked in SEO and digital marketing for more than 16 years, much of it on WordPress, and these are the details I check first when a local business asks why its site isn’t helping in Maps and the local results. This article stays on the WordPress side. For the wider structured data picture see our guide to structured data SEO.
What your website can and can’t change in local results
Start with Google’s own description of how local results are ranked. Its help page on improving your local ranking names three factors:
- Relevance: “how well a Business Profile matches what someone is searching for.”
- Distance: “how far each business is from the customer who’s searching.”
- Prominence: “how well-known a business is”, which also draws on information such as “how many websites link to your business and how many reviews you have.”
The same page states: “There’s no way to request or pay for a better local ranking on Google.”
Your website can’t move your premises closer to the searcher. It can make it clear what you do and where (relevance), and it can earn links and mentions that make you better known (prominence). Everything below serves those two.
Local SEO services for WordPress websites start with one source of NAP
NAP is your business name, address and phone number. Google’s Business Profile guidelines ask you to “represent your business as it’s consistently represented and recognized in the real world”, to use “a precise, accurate address”, and to “use a local phone number instead of a central call center helpline number whenever possible.” Your website should say the same thing, the same way, everywhere.
The problem on WordPress is that NAP ends up typed into many places: a header widget, a footer column, the contact page, a page builder section on the home page, the SEO plugin’s settings, a schema plugin, and every location page. When the phone number changes, someone updates four of them.
The fix is a single source of truth:
- Store NAP once, in a theme options page, a small custom settings screen, or the fields of a “location” post.
- Output it everywhere through one shortcode, block or template function.
- Generate the LocalBusiness schema from the same fields, so markup and visible text can’t disagree.
| Where NAP appears | Typical WordPress setup | Better setup |
|---|---|---|
| Header and footer | Text typed into a widget or builder section | Template part reading the stored fields |
| Contact page | Typed into page content | Same block or shortcode as the footer |
| SEO or schema plugin | Separate settings screen, filled in once at launch | Fed from the stored fields, or checked against them |
| Location pages | Typed by whoever wrote the page | Custom fields on each location, required |
| Google Business Profile | Edited by the owner, separately | Checked against the site after every change |
Make the phone number a clickable tel: link on mobile, and write the address as text, not as an image or only inside an embedded map.
Local business schema on WordPress
Google’s documentation for LocalBusiness structured data lists only two required properties: address and name. Recommended ones include geo, openingHoursSpecification, telephone, url, priceRange and department. It also says to “use the most specific LocalBusiness sub-type possible”, with examples such as Restaurant and HealthClub, and notes that on a CMS “it may be easier to use a plugin that’s integrated into your CMS.”
That last line is fair, and most WordPress sites should start with their SEO plugin’s settings. The mistakes I find are rarely about syntax:
- Two plugins, two graphs. The SEO plugin outputs one organisation, a separate schema plugin outputs another, and they disagree on the name or phone.
- Generic type. Everything is marked up as Organization or plain LocalBusiness when a specific type such as Dentist or Plumber exists on schema.org.
- One markup for many places. A business with three branches outputs head-office details on every location page.
- Opening hours that don’t match the page. The schema says one thing, the visible hours another.
For businesses that serve customers at their premises, schema.org’s LocalBusiness type describes “a particular physical business or branch of an organization.” For multi-branch businesses that means one LocalBusiness block per branch, on that branch’s page, with its own address, phone and hours.
Then validate. Google’s page says to “validate your code using the Rich Results Test and fix any critical errors”, and adds that “Google does not guarantee that features that consume structured data will show up in search results.” Schema helps Google read your details. It doesn’t rank you on its own.
Your schema should be a copy of what the page already says, never a place to add claims the page doesn’t make.
Location pages that aren’t doorways
Location pages are where WordPress sites most often cross a line. Google’s spam policies describe doorway abuse as pages “created to rank for specific, similar search queries”, and give as an example “having multiple domain names or pages targeted at specific regions or cities that funnel users to one page.” Twenty city pages with the town name swapped and nothing else are exactly that. The vetting side of this, from the point of view of an MSP choosing service and location pages, is covered in our guide to SEO for managed IT firms; here is how to build it properly in WordPress.
The WordPress build that works best is a custom post type for locations, with custom fields for the details that make each place different. The template then outputs the visible details and the LocalBusiness schema from the same fields. When someone adds a new branch, they fill in a form rather than copying a page and editing words.
Fields every location page template should require
- Branch name as it appears on the sign and the Business Profile
- Full street address, written as text
- Local phone number, as a tel: link
- Opening hours, with holiday changes
- What this branch offers, if it differs from other branches
- Directions, parking or access notes written for that location
- Who works there, or who customers will meet
- A link to that branch’s Business Profile or reviews
If you can’t fill most of those fields for a town, you don’t have a location there. You have a service area, which needs a different approach.
Service-area businesses: no fake addresses
Plumbers, cleaners, electricians and other businesses that travel to customers are where I see the riskiest shortcuts: virtual offices and “locations” in every town in the region. Google’s guidelines are direct: “If you’re a service-area business, you should hide your business address from customers.”
On the website, that means:
- one page per service, with the towns you cover listed honestly
- a service area page that explains where you travel, how quickly and on what terms
- schema that describes the business at its real base, with
areaServednaming the area you cover (schema.org defines it as “the geographic area where a service or offered item is provided”) - town pages only where you have something specific to say: jobs done there, local conditions, a team based nearby
Custom WordPress development services for local SEO: when they’re worth it
Not every local business needs custom development. A single-location business can do this well with a decent theme, a mainstream SEO plugin set up properly and a carefully written contact page. Paying for custom post types and fields is worth it when:
- you have several branches, or will soon
- several people edit the site and NAP keeps drifting
- your SEO plugin can’t output the specific business type or per-branch schema you need
- location pages are created often, and you want the template to stop thin pages from being published
When I scope that work, the brief to a developer is short: one data source per location, one template, schema generated from the same fields, and validation before launch. Our WordPress SEO consulting covers that kind of build review, and the page structure decisions behind it are part of SEO website structure work.
The WordPress local SEO checks I run first
When a local business brings me a WordPress site, these come first:
- Compare NAP on every template with the Business Profile, character by character.
- View the page source of the home, contact and one location page, and list every structured data block.
- Run the Rich Results Test on those same pages.
- Read three location pages side by side. If they read the same with the town swapped, they need rewriting or merging.
- Check that each Business Profile links to the right page: the branch page for a branch, not always the home page.
- Check that phone clicks and direction clicks on the site are tracked.
None of this is long work on a small site. Our local SEO page explains how I combine it with the Business Profile and reviews side, and you can read about my background on my profile page. I charge by the hour, so a single-location site with a clean setup costs little to check.
FAQ
What do local SEO services for WordPress websites include?
A NAP setup stored once and shown consistently, LocalBusiness schema that matches the visible page, location or service area pages with real local content, correct links from each Business Profile, and tracking of calls and direction clicks. The Business Profile and reviews work sits alongside it.
Do I need a plugin for local business schema in WordPress?
Not necessarily. Google itself says a CMS plugin may be the easier route, and many SEO plugins can output the basics. Custom code makes sense when you need per-branch markup or a specific business type your plugin can’t produce. Either way, check that only one consistent block describes each location.
Are custom WordPress development services for local SEO worth the cost?
For a single location, usually not: settings and careful content do the job. For several branches, or a site where many people edit contact details, a custom location post type with required fields pays back by stopping inconsistencies and thin pages before they happen.
Can I create a page for every town I serve?
Only where you have something specific to say about that town. Google’s spam policies name pages targeted at specific regions or cities that funnel users to one page as doorway abuse. A single service area page plus a few genuine town pages is safer and usually more useful.
Does LocalBusiness schema improve my local ranking?
Not directly. It helps Google read your details correctly, and Google says it doesn’t guarantee that features using structured data will appear. Local ranking rests on relevance, distance and prominence, and the schema supports relevance only by stating clearly what you are and where.
If your WordPress site's NAP, schema or location pages don't match how your business really works, talk to me and we'll work out which fixes matter first.
Eugen Platon · SEO consultant with 16+ years in SEO and digital marketing · free 10-minute first call