The Local SEO audit checks the signals that connect a website to a local business listing: name, address and phone (NAP), opening hours, LocalBusiness schema, location pages, map and reviews. This guide fixes each check except schema, which is in Fix: structured data and social tags, and mobile, which is in Fix: mobile.
Find the affected checks in the app
- Open Audits and click a Local SEO audit report. It shows a NAP table (Business name, Address, Phone, Opening hours) with the value found on the page and in the schema or contact page.
- The sections cover name, address and phone, LocalBusiness schema, location pages, map and reviews, and mobile.
- Issues to fix lists failing checks as Critical or Warning, with the exact values found.
Address on the page
How we detect it
The audit looks for a street address as visible text (street number and street type, a European-style address or an address element). If the address is only in the schema, the check still fails. Critical.
Why it matters
Google matches the address on the site with the Business Profile. An address only in an image or only in code can’t be matched by people or by text-based checks.
Common causes
- The address is in an image, a map embed only, or a PDF.
- The address is only in the schema.
- The footer address is missing on the audited page template.
- Service-area businesses that hide their address on purpose (then accept this warning, and make sure the Business Profile also hides it).
Fix: basic
- Add the full address as text to the site footer (so it is on every page) and to the contact page.
- Write it exactly as on the Google Business Profile: same street abbreviation, suite number and postcode format.
- WordPress: Appearance › Widgets (or Appearance › Editor › Patterns › Footer) › add a Paragraph or Address block.
- Shopify: Shopify admin › Online Store › Themes › Customize › Footer › add a Text block.
Fix: expert
<address>
Example Roofing Ltd<br>
12 Market Street<br>
Springfield, IL 62701
</address>
Platform steps
Wix
- In the Wix dashboard, open the Editor, edit the footer (it’s shared by all pages), add a text box with the address. Publish.
Verify the fix
- In Audits, click Run again on the Local SEO audit. Address on the page shows the address it found.
Automation
Automatable with WordPress admin or theme access; the address must come from the Business Profile.
Phone number on the page
How we detect it
Looks for a phone number in tel: links and in the visible text. Critical when none is found.
Why it matters
Local customers call. A missing number loses enquiries and weakens the local listing.
Common causes
- The phone is only in a contact form or a “Call us” button without the number.
- The number is in an image.
Fix: basic
- Show the main phone number as text in the header or footer of every page.
- Make it a tap-to-call link (see Click-to-call link).
Fix: expert
<a href="tel:+15555550100">(555) 555-0100</a>
Use the client’s real number; the one above is a fictional placeholder.
Platform steps
Shopify
- Shopify admin › Online Store › Themes › Customize › Header (announcement bar) or Footer › add the number in a text block, with a link to
tel:.
Verify the fix
- Run again. The check shows the number found.
Automation
Automatable with WordPress admin or theme access.
Phone number is the same everywhere
How we detect it
Compares the digits of the first phone numbers on the page, the schema telephone and the numbers on the contact and location pages the audit reads. More than one distinct number = Critical.
Why it matters
Different numbers confuse Google and lower trust in the local listing.
Common causes
- Call-tracking numbers on some pages and the main number on others.
- An old number left in the schema, footer or contact page.
- Several branch numbers on one page (put each branch’s number on its own location page).
Fix: basic
- Pick the one main number used on the Google Business Profile.
- Update it in the header, footer, contact page, schema (SEO plugin local settings) and any page builder templates.
- If you use call tracking, use dynamic number insertion (the tracking script swaps the number for visitors) and keep the main number in the HTML and schema.
Fix: expert
Search the whole WordPress database for the old number with WP-CLI and replace it:
wp search-replace '555-555-0199' '555-555-0100' --all-tables --dry-run
wp search-replace '555-555-0199' '555-555-0100' --all-tables
Run it again with other formats of the old number (with spaces, brackets, country code).
Platform steps
WordPress
- Without WP-CLI, use the Better Search Replace plugin (Tools › Better Search Replace), run once with Run as dry run? ticked, then without it.
Verify the fix
- Run again. The check should say the same phone is used on the page, in the schema and on the contact page.
Automation
Automatable with WordPress admin access (search-replace) or server SSH (WP-CLI); the correct number must be confirmed.
Address is the same everywhere
How we detect it
Runs when the address appears on the page and also in the schema or on the contact page. Compares them (street and postcode). Different = Warning.
Why it matters
Google cross-checks the address; mismatches weaken the local listing.
Common causes
- An old address after a move, left in the schema or contact page.
- Different formats (“Suite 4” on one page, missing on another).
Fix: basic
- Copy the exact address from the Google Business Profile.
- Replace it in the footer, contact page and schema settings (see Address and geo in schema).
Fix: expert
Use the same values in the schema address as the visible address (see the LocalBusiness snippet in Fix: structured data and social tags).
Platform steps
WordPress
- Use Better Search Replace for the old street name, as above.
Verify the fix
- Run again.
Automation
Automatable with WordPress admin access; the correct address must be confirmed.
Click-to-call link
How we detect it
Runs when a phone number is found. Passes when the number is a tel: link. Warning.
Why it matters
Most local searches are on phones. One tap should start the call.
Common causes
- The number is plain text in a text widget.
Fix: basic
- In the editor, select the number, click the link button and enter
tel:followed by the number with the country code and no spaces (for exampletel:+15555550100). - In Elementor, use a Button or Icon List item with the link
tel:+15555550100.
Fix: expert
<a href="tel:+15555550100" class="call-btn">Call (555) 555-0100</a>
Platform steps
Wix
- In the Wix Editor (Wix dashboard), select the text, click Link › Phone number and enter the number.
Verify the fix
- Tap the number on a phone: the dialler should open.
- Run again.
Automation
Automatable with WordPress admin or theme access.
Opening hours
How we detect it
Looks for opening hours in the page text or the schema. Warning when none are found.
Why it matters
People check whether the business is open before they call or visit.
Common causes
- Hours only on Google, not on the site.
Fix: basic
- Add opening hours to the contact page and footer.
- Use the same hours as on the Business Profile, and update both for holidays.
Fix: expert
<h3>Opening hours</h3>
<ul>
<li>Monday to Friday: 8:00 to 18:00</li>
<li>Saturday: 9:00 to 13:00</li>
<li>Sunday: closed</li>
</ul>
Add openingHoursSpecification to the schema too: see Opening hours in schema.
Platform steps
Squarespace
- Use a Text block on the contact page; Squarespace’s business information (in your Squarespace account › the site › Settings › Business information) can also show hours in some templates.
Verify the fix
- Run again. The check shows the hours found.
Automation
Automatable with WordPress admin or theme access; hours come from the Business Profile.
Location pages
How we detect it
Looks for internal links to pages for the areas served: URLs containing /location, /locations, /areas, /areas-we-serve, /service-area, /cities, /city, /offices, /branches, /stores or near-me, or the audit city in the URL. Passes with 2 or more. Critical.
Why it matters
A page per city or area helps the business rank in each place.
Common causes
- One generic “Areas we cover” paragraph with no pages.
- Location pages exist but aren’t linked from the audited page.
- Unusual URLs the audit can’t recognise (for example /springfield-roofer-services).
Fix: basic
- List the 3 to 10 main towns or areas the business really serves.
- Create one page per area, at URLs like
/areas/springfield/or/locations/springfield/. - Give each page unique content (see Unique text per location).
- Link all area pages from the home page (an “Areas we serve” section) and the footer.
Fix: expert
<section>
<h2>Areas we serve</h2>
<ul>
<li><a href="/areas/springfield/">Springfield</a></li>
<li><a href="/areas/chatham/">Chatham</a></li>
<li><a href="/areas/sherman/">Sherman</a></li>
</ul>
</section>
Platform steps
WordPress
- Create a parent page “Areas”, then child pages for each town (Page › Page Attributes › Parent). With Settings › Permalinks › Post name, URLs become
/areas/town/.
Shopify
- Shopify pages live under
/pages/(Shopify admin › Online Store › Pages). Name them/pages/areas-springfieldso the URL contains “areas”.
Verify the fix
- Run again. The check shows how many location pages are linked.
Automation
Assisted: page creation is automatable with CMS access, but each page needs real local content.
City in title and H1
How we detect it
Runs when you enter an area for the audit. Passes when the city name is in the page title or an H1. Warning.
Why it matters
Local searches include the city. The page should too.
Common causes
- Titles like “Home | Example Roofing” with no location.
Fix: basic
- Edit the SEO title in the WordPress page editor: Yoast SEO box › SEO title (or Rank Math › Edit Snippet › Title; help: Yoast, Rank Math), for example “Roof Repair in Springfield, IL | Example Roofing”.
- Edit the H1 to include the city, for example “Roof repair in Springfield”.
Fix: expert
<title>Roof Repair in Springfield, IL | Example Roofing</title>
<h1>Roof repair in Springfield</h1>
See Fix: title tags and meta descriptions for title length.
Platform steps
Shopify
- Home page title: Shopify admin › Online Store › Preferences › Homepage title (Shopify preferences help). Pages: Search engine listing › Edit at the bottom of each page.
Verify the fix
- Run again.
Automation
Automatable with WordPress admin access via the SEO plugin, or Shopify Admin API.
Unique text per location
How we detect it
When the audit reads 2 or more location pages, it compares their words. If any two pages share 80% or more of their vocabulary, the check fails. Warning.
Why it matters
Copied pages with only the city name changed rarely rank. Google wants real local detail.
Common causes
- One template duplicated for every town.
- Location pages generated by a plugin from a single text with a city placeholder.
Fix: basic
- Open the first location page and plan 200 to 400 words that apply only to that area.
- Add projects completed there, with photos and the neighbourhood name.
- Add the local landmarks or neighbourhoods served, travel time and the team members who cover the area.
- Add 2 or 3 reviews from customers in that area.
- Add local facts that matter for the service (building types, typical problems, local permits).
- Add a map or directions from that area, then repeat for the next location page.
Fix: expert
Keep shared blocks (guarantees, process) short and put them below the unique content, so most of each page’s text is local.
Platform steps
WordPress
- If a plugin generates the pages, use its per-page custom fields for unique intro text, or replace generated pages with hand-written ones for the main areas.
Verify the fix
- Run again. The check should say each location page has its own text.
Automation
Assisted: drafts can be generated from project and review data, but real local details must come from the client.
Embedded map
How we detect it
Looks for a map on the page or on the contact page: an iframe or link from Google Maps, maps.app.goo.gl, OpenStreetMap, Bing Maps, Mapbox or Apple Maps. Warning.
Why it matters
A map helps visitors find the business and confirms the location.
Common causes
- No map, or a map as a screenshot image.
Fix: basic
- Open the business on Google Maps, click Share › Embed a map › Copy HTML.
- Paste it on the contact page: WordPress Custom HTML block, Elementor Google Maps widget, Shopify Custom Liquid section, Wix Google Maps element.
Fix: expert
<iframe src="https://www.google.com/maps/embed?pb=PASTE-YOUR-EMBED-CODE"
width="600" height="450" style="border:0" loading="lazy"
referrerpolicy="no-referrer-when-downgrade" title="Map to Example Roofing"></iframe>
loading="lazy" keeps the map from slowing the page.
Platform steps
Squarespace
- In your Squarespace account, edit the contact page, add a Map block and enter the address.
Verify the fix
- Run again.
Automation
Automatable with WordPress admin or theme access.
Link to Business Profile
How we detect it
Looks for a link to the Google Business Profile (g.page, maps.app.goo.gl, a Google Maps place or cid link, the write-a-review link or business.google.com) on the page or in the schema sameAs. Warning.
Why it matters
The link sends reviews and visitors to the listing.
Common causes
- Only social icons in the footer, no Google link.
Fix: basic
- In Google Maps or the Business Profile manager, click Share and copy the link (maps.app.goo.gl/…), or Ask for reviews to get the review link.
- Add a “Read our Google reviews” link in the footer or reviews section.
- Add the same link to the schema
sameAs(see sameAs profiles).
Fix: expert
<a href="https://maps.app.goo.gl/your-profile-link" rel="noopener">Read our Google reviews</a>
Platform steps
WordPress
- Add it to the footer menu as a Custom Link (Appearance › Menus › Custom Links).
Verify the fix
- Run again.
Automation
Automatable with WordPress admin or theme access.
Review / rating markup
How we detect it
Passes when the page has AggregateRating or Review markup. Warning.
Why it matters
Rating markup lets search engines read the stars and review count.
Common causes
- Reviews are shown by an iframe widget, so no markup is on the page.
Fix: basic
- Follow Review / rating markup in Fix: structured data and social tags. Test the result in the Rich Results Test.
Fix: expert
Add aggregateRating to the LocalBusiness schema for reviews shown on the page (snippet in the structured data guide).
Platform steps
WordPress
- Review plugins such as Site Reviews output Review schema with the review blocks.
Verify the fix
- Run again.
Automation
Assisted: markup is automatable; reviews must be real and visible.
Reviews on the site
How we detect it
Looks for review content in the page text: “testimonial”, “what our customers say”, “Google reviews”, “reviews” or star characters. Warning.
Why it matters
Reviews build trust and support local rankings.
Common causes
- Reviews only on Google.
Fix: basic
- Add a reviews section with 3 to 5 recent reviews as text (name, town, quote).
- Ask happy clients for Google reviews with the review link from the Business Profile (Ask for reviews).
Fix: expert
<section>
<h2>What our customers say</h2>
<blockquote><p>"Quick, tidy and fairly priced."</p><cite>Alex R., Chatham</cite></blockquote>
</section>
Platform steps
Shopify
- Add a Testimonials or Multicolumn section in Shopify admin › Online Store › Themes › Customize with customer quotes.
Verify the fix
- Run again.
Automation
Assisted: reviews must be real and approved.
Common questions
Which pages does the Local SEO audit compare?
It reads the audited page and up to 4 extra pages it finds linked from it: the contact page and location pages. It compares the phone and address on those pages and in the schema.
The audit says the phone is different everywhere, but it's the same number. Why?
The audit compares digits. A tracking number, a second branch number or a fax number shown before the main number counts as a different phone. Show one main number first in the header or footer and on the contact page, and use the same number in the schema.
Do I need a location page for every city?
For each main area the business really serves, yes, with unique local details. Don't create dozens of copied pages with only the city name changed; Google treats them as doorway pages.
Where do I set the city for the audit?
The city comes from the area you enter when you start the Local SEO audit. It's used for the City in title and H1 check and to find location pages.
Related articles
- Fix: structured data and social tags (schema, Open Graph)
- Fix: mobile — viewport, tap targets and font size
- Fix: title tags and meta descriptions
- Fix: content — word count, keyword placement and readability
- Run an SEO audit
Still need help?
Ask in the chat inside the app, or send us a message on the contact page. You can also browse all help topics.